@venizia/ignis-docs 0.2.0 → 0.2.1-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -14
- package/content/best-practices/api-usage-examples.md +39 -19
- package/content/best-practices/architectural-patterns.md +24 -13
- package/content/best-practices/architecture-decisions.md +29 -16
- package/content/best-practices/code-style-standards/advanced-patterns.md +43 -31
- package/content/best-practices/code-style-standards/constants-configuration.md +19 -4
- package/content/best-practices/code-style-standards/control-flow.md +33 -1
- package/content/best-practices/code-style-standards/documentation.md +28 -8
- package/content/best-practices/code-style-standards/function-patterns.md +15 -4
- package/content/best-practices/code-style-standards/index.md +7 -2
- package/content/best-practices/code-style-standards/naming-conventions.md +27 -3
- package/content/best-practices/code-style-standards/route-definitions.md +9 -5
- package/content/best-practices/code-style-standards/tooling.md +14 -1
- package/content/best-practices/code-style-standards/type-safety.md +39 -6
- package/content/best-practices/common-pitfalls.md +59 -35
- package/content/best-practices/contribution-workflow.md +8 -4
- package/content/best-practices/data-modeling.md +78 -62
- package/content/best-practices/deployment-strategies.md +56 -19
- package/content/best-practices/error-handling.md +247 -153
- package/content/best-practices/index.md +6 -0
- package/content/best-practices/performance-optimization.md +26 -13
- package/content/best-practices/security-guidelines.md +35 -9
- package/content/best-practices/testing-strategies.md +7 -2
- package/content/best-practices/troubleshooting-tips.md +27 -17
- package/content/extensions/components/api-reference.md +109 -323
- package/content/extensions/components/authentication/api.md +489 -602
- package/content/extensions/components/authentication/errors.md +135 -498
- package/content/extensions/components/authentication/index.md +89 -801
- package/content/extensions/components/authentication/usage.md +231 -955
- package/content/extensions/components/authorization/api.md +991 -644
- package/content/extensions/components/authorization/errors.md +204 -208
- package/content/extensions/components/authorization/getting-started.md +227 -0
- package/content/extensions/components/authorization/index.md +88 -795
- package/content/extensions/components/authorization/usage.md +219 -528
- package/content/extensions/components/health-check.md +77 -243
- package/content/extensions/components/index.md +24 -90
- package/content/extensions/components/mail/api.md +553 -285
- package/content/extensions/components/mail/errors.md +76 -62
- package/content/extensions/components/mail/index.md +111 -463
- package/content/extensions/components/mail/usage.md +139 -173
- package/content/extensions/components/request-tracker.md +70 -173
- package/content/extensions/components/socket-io/api.md +462 -785
- package/content/extensions/components/socket-io/errors.md +49 -51
- package/content/extensions/components/socket-io/index.md +69 -372
- package/content/extensions/components/socket-io/usage.md +212 -105
- package/content/extensions/components/static-asset/api.md +461 -141
- package/content/extensions/components/static-asset/errors.md +121 -53
- package/content/extensions/components/static-asset/index.md +84 -606
- package/content/extensions/components/static-asset/usage.md +184 -299
- package/content/extensions/components/template/index.md +3 -3
- package/content/extensions/components/websocket/api.md +311 -404
- package/content/extensions/components/websocket/errors.md +47 -56
- package/content/extensions/components/websocket/index.md +75 -407
- package/content/extensions/components/websocket/usage.md +120 -338
- package/content/extensions/helpers/cron/index.md +52 -160
- package/content/extensions/helpers/crypto/index.md +67 -480
- package/content/extensions/helpers/crypto/reference.md +528 -0
- package/content/extensions/helpers/env/index.md +64 -178
- package/content/extensions/helpers/error/index.md +286 -196
- package/content/extensions/helpers/index.md +61 -47
- package/content/extensions/helpers/inversion/index.md +76 -550
- package/content/extensions/helpers/inversion/reference.md +530 -0
- package/content/extensions/helpers/kafka/admin.md +23 -3
- package/content/extensions/helpers/kafka/compile-binary.md +83 -52
- package/content/extensions/helpers/kafka/consumer.md +65 -28
- package/content/extensions/helpers/kafka/examples.md +46 -253
- package/content/extensions/helpers/kafka/index.md +55 -617
- package/content/extensions/helpers/kafka/producer.md +156 -22
- package/content/extensions/helpers/kafka/schema-registry.md +59 -79
- package/content/extensions/helpers/logger/hf-logger.md +220 -0
- package/content/extensions/helpers/logger/index.md +78 -552
- package/content/extensions/helpers/logger/pino.md +105 -0
- package/content/extensions/helpers/logger/reference.md +937 -0
- package/content/extensions/helpers/network/api.md +276 -195
- package/content/extensions/helpers/network/index.md +87 -524
- package/content/extensions/helpers/queue/index.md +80 -897
- package/content/extensions/helpers/queue/reference.md +494 -0
- package/content/extensions/helpers/redis/index.md +86 -640
- package/content/extensions/helpers/redis/reference.md +784 -0
- package/content/extensions/helpers/secrets/index.md +136 -0
- package/content/extensions/helpers/socket-io/api.md +325 -204
- package/content/extensions/helpers/socket-io/index.md +79 -429
- package/content/extensions/helpers/storage/api.md +584 -464
- package/content/extensions/helpers/storage/index.md +80 -573
- package/content/extensions/helpers/types/index.md +75 -495
- package/content/extensions/helpers/types/reference.md +689 -0
- package/content/extensions/helpers/uid/index.md +176 -189
- package/content/extensions/helpers/websocket/api.md +366 -214
- package/content/extensions/helpers/websocket/index.md +68 -503
- package/content/extensions/helpers/worker-thread/index.md +62 -396
- package/content/extensions/helpers/worker-thread/reference.md +428 -0
- package/content/extensions/index.md +38 -39
- package/content/extensions/src-details/mcp-server.md +96 -548
- package/content/guides/core-concepts/persistent/datasources.md +2 -2
- package/content/guides/core-concepts/persistent/index.md +5 -1
- package/content/guides/core-concepts/persistent/models.md +1 -1
- package/content/guides/core-concepts/persistent/pglite.md +218 -0
- package/content/guides/core-concepts/persistent/postgres-drivers.md +21 -15
- package/content/guides/core-concepts/persistent/search-meilisearch.md +22 -12
- package/content/guides/core-concepts/persistent/search-typesense.md +28 -16
- package/content/guides/core-concepts/persistent/sqlite.md +296 -0
- package/content/guides/core-concepts/persistent/transactions.md +12 -11
- package/content/guides/core-concepts/secrets-vault.md +177 -0
- package/content/guides/core-concepts/services.md +1 -1
- package/content/guides/get-started/5-minute-quickstart.md +59 -206
- package/content/guides/get-started/philosophy.md +135 -670
- package/content/guides/get-started/setup.md +53 -74
- package/content/guides/migrations/redis-helpers-migration.md +5 -4
- package/content/guides/migrations/scoped-rbac-migration.md +5 -5
- package/content/guides/migrations/unified-connectors-migration.md +8 -7
- package/content/guides/tutorials/ecommerce-api.md +3 -8
- package/content/guides/tutorials/realtime-chat.md +1 -1
- package/content/references/base/application.md +64 -22
- package/content/references/base/components.md +3 -3
- package/content/references/base/connectors.md +79 -136
- package/content/references/base/controllers.md +12 -12
- package/content/references/base/datasources-reference.md +600 -0
- package/content/references/base/datasources.md +84 -444
- package/content/references/base/dependency-injection.md +25 -46
- package/content/references/base/filter-system/application-usage.md +95 -123
- package/content/references/base/filter-system/array-operators.md +33 -43
- package/content/references/base/filter-system/comparison-operators.md +55 -63
- package/content/references/base/filter-system/default-filter.md +144 -350
- package/content/references/base/filter-system/fields-order-pagination.md +116 -148
- package/content/references/base/filter-system/index.md +114 -253
- package/content/references/base/filter-system/json-filtering.md +52 -181
- package/content/references/base/filter-system/list-operators.md +28 -44
- package/content/references/base/filter-system/logical-operators.md +69 -114
- package/content/references/base/filter-system/null-operators.md +41 -98
- package/content/references/base/filter-system/pattern-matching.md +48 -51
- package/content/references/base/filter-system/quick-reference.md +93 -196
- package/content/references/base/filter-system/range-operators.md +22 -38
- package/content/references/base/filter-system/tips.md +70 -133
- package/content/references/base/filter-system/use-cases.md +173 -232
- package/content/references/base/grpc-controllers.md +53 -17
- package/content/references/base/index.md +5 -3
- package/content/references/base/middlewares.md +43 -28
- package/content/references/base/models-reference.md +886 -0
- package/content/references/base/models.md +81 -1452
- package/content/references/base/providers.md +8 -8
- package/content/references/base/repositories/advanced.md +281 -419
- package/content/references/base/repositories/index.md +84 -644
- package/content/references/base/repositories/mixins.md +25 -21
- package/content/references/base/repositories/relations.md +194 -375
- package/content/references/base/repositories/soft-deletable.md +67 -55
- package/content/references/base/secrets.md +267 -0
- package/content/references/base/services.md +8 -6
- package/content/references/configuration/environment-variables.md +73 -21
- package/content/references/configuration/index.md +51 -31
- package/content/references/index.md +1 -1
- package/content/references/quick-reference.md +3 -16
- package/content/references/utilities/crypto.md +35 -76
- package/content/references/utilities/date.md +33 -73
- package/content/references/utilities/duration.md +85 -0
- package/content/references/utilities/index.md +6 -2
- package/content/references/utilities/jsx-reference.md +298 -0
- package/content/references/utilities/jsx.md +82 -525
- package/content/references/utilities/module.md +81 -61
- package/content/references/utilities/parse.md +34 -64
- package/content/references/utilities/performance.md +33 -58
- package/content/references/utilities/promise.md +28 -62
- package/content/references/utilities/request.md +58 -218
- package/content/references/utilities/retry.md +139 -0
- package/content/references/utilities/schema.md +43 -137
- package/content/references/utilities/statuses-reference.md +361 -0
- package/content/references/utilities/statuses.md +63 -667
- package/dist/mcp-server/index.js +0 -0
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.js +3 -3
- package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
- package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
- package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
- package/package.json +24 -23
|
@@ -6,132 +6,75 @@ difficulty: intermediate
|
|
|
6
6
|
|
|
7
7
|
# Null Check Operators
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Checks whether a field is `NULL` or has a value, without comparing to a specific value.
|
|
10
10
|
|
|
11
|
+
| Operator | SQL | Meaning |
|
|
12
|
+
|----------|-----|---------|
|
|
13
|
+
| `is` | `IS NULL` / `=` | Null check or equality |
|
|
14
|
+
| `isn` | `IS NOT NULL` / `!=` | Not-null check or inequality |
|
|
15
|
+
| `exists` | `IS NOT NULL` / `IS NULL` | Presence check |
|
|
16
|
+
| `notExists` | `IS NULL` / `IS NOT NULL` | Inverse presence check |
|
|
11
17
|
|
|
12
|
-
##
|
|
13
|
-
|
|
14
|
-
The simplest way to check for NULL:
|
|
18
|
+
## is
|
|
15
19
|
|
|
16
20
|
```typescript
|
|
17
|
-
|
|
18
|
-
{ where: { deletedAt: null } }
|
|
21
|
+
{ where: { deletedAt: { is: null } } }
|
|
19
22
|
// SQL: WHERE "deleted_at" IS NULL
|
|
20
23
|
```
|
|
21
24
|
|
|
25
|
+
**Notice:** `is` behaves exactly like `eq` - `is: null` compiles to `IS NULL`, `is: <value>` compiles to `=`.
|
|
22
26
|
|
|
23
|
-
|
|
27
|
+
**Edge cases:**
|
|
28
|
+
- The bare shorthand `{ deletedAt: null }` (no operator key) is identical to `{ deletedAt: { is: null } }`.
|
|
29
|
+
- `{ is: 'active' }` compiles to `"status" = 'active'`, the same as `eq`.
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
{ where: { deletedAt: { eq: null } } }
|
|
27
|
-
// SQL: WHERE "deleted_at" IS NULL
|
|
28
|
-
|
|
29
|
-
{ where: { status: { eq: 'active' } } }
|
|
30
|
-
// SQL: WHERE "status" = 'active'
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
## ne / neq with Null
|
|
31
|
+
## isn
|
|
35
32
|
|
|
36
33
|
```typescript
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
{ where: { deletedAt: { neq: null } } }
|
|
40
|
-
// SQL: WHERE "deleted_at" IS NOT NULL
|
|
41
|
-
|
|
42
|
-
// Not equal to value
|
|
43
|
-
{ where: { status: { ne: 'deleted' } } }
|
|
44
|
-
// SQL: WHERE "status" != 'deleted'
|
|
34
|
+
{ where: { verifiedAt: { isn: null } } }
|
|
35
|
+
// SQL: WHERE "verified_at" IS NOT NULL
|
|
45
36
|
```
|
|
46
37
|
|
|
38
|
+
**Notice:** `isn` behaves exactly like `ne`/`neq` - `isn: null` compiles to `IS NOT NULL`, `isn: <value>` compiles to `!=`.
|
|
47
39
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
// NULL check
|
|
52
|
-
{ where: { deletedAt: { is: null } } }
|
|
53
|
-
// SQL: WHERE "deleted_at" IS NULL
|
|
54
|
-
|
|
55
|
-
// Value check (same as eq)
|
|
56
|
-
{ where: { status: { is: 'active' } } }
|
|
57
|
-
// SQL: WHERE "status" = 'active'
|
|
58
|
-
```
|
|
59
|
-
|
|
40
|
+
**Edge cases:**
|
|
41
|
+
- Same three-valued-logic caveat as `ne`: `{ isn: value }` for a real `value` never matches a `NULL` row.
|
|
60
42
|
|
|
61
|
-
##
|
|
43
|
+
## exists
|
|
62
44
|
|
|
63
45
|
```typescript
|
|
64
|
-
|
|
65
|
-
{ where: { verifiedAt: { isn: null } } }
|
|
46
|
+
{ where: { verifiedAt: { exists: true } } }
|
|
66
47
|
// SQL: WHERE "verified_at" IS NOT NULL
|
|
67
|
-
|
|
68
|
-
// Value check (same as ne)
|
|
69
|
-
{ where: { status: { isn: 'deleted' } } }
|
|
70
|
-
// SQL: WHERE "status" != 'deleted'
|
|
71
48
|
```
|
|
72
49
|
|
|
50
|
+
**Notice:** `exists` takes a boolean, not a value - `exists: false` compiles to `IS NULL`, anything else compiles to `IS NOT NULL`.
|
|
73
51
|
|
|
74
|
-
|
|
52
|
+
**Edge cases:**
|
|
53
|
+
- Only the literal `false` selects the `IS NULL` branch.
|
|
54
|
+
- Any other operand, including `0` or a truthy string, selects `IS NOT NULL`.
|
|
55
|
+
- Also works over a JSON path key, for example `{ 'metadata.score': { exists: true } }`.
|
|
75
56
|
|
|
76
|
-
|
|
57
|
+
## notExists
|
|
77
58
|
|
|
78
59
|
```typescript
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
{ where: { verifiedAt: { exists: true } } } // has verifiedAt -> IS NOT NULL
|
|
82
|
-
|
|
83
|
-
// notExists is the inverse
|
|
84
|
-
{ where: { verifiedAt: { notExists: true } } } // IS NULL
|
|
85
|
-
|
|
86
|
-
// exists over a JSON path (PostgreSQL)
|
|
87
|
-
{ where: { 'metadata.score': { exists: true } } }
|
|
60
|
+
{ where: { verifiedAt: { notExists: true } } }
|
|
61
|
+
// SQL: WHERE "verified_at" IS NULL
|
|
88
62
|
```
|
|
89
63
|
|
|
90
|
-
|
|
91
|
-
|--------|-----|-------------|
|
|
92
|
-
| `{ field: { exists: true } }` | `IS NOT NULL` | Field is present |
|
|
93
|
-
| `{ field: { exists: false } }` | `IS NULL` | Field is missing/null |
|
|
94
|
-
| `{ field: { notExists: true } }` | `IS NULL` | Inverse of exists |
|
|
95
|
-
| `{ field: { notExists: false } }` | `IS NOT NULL` | Inverse of exists |
|
|
96
|
-
|
|
64
|
+
**Notice:** the inverse of `exists` - `notExists: false` compiles to `IS NOT NULL`, anything else compiles to `IS NULL`.
|
|
97
65
|
|
|
98
|
-
|
|
66
|
+
**Edge cases:**
|
|
67
|
+
- Same `false`-only branch rule as `exists`.
|
|
99
68
|
|
|
100
|
-
|
|
101
|
-
|--------|-----|-------------|
|
|
102
|
-
| `{ field: null }` | `IS NULL` | Direct null check |
|
|
103
|
-
| `{ field: { eq: null } }` | `IS NULL` | Explicit null equality |
|
|
104
|
-
| `{ field: { is: null } }` | `IS NULL` | IS operator with null |
|
|
105
|
-
| `{ field: { exists: false } }` | `IS NULL` | Presence check (false = missing) |
|
|
106
|
-
| `{ field: { ne: null } }` | `IS NOT NULL` | Not-equal null check |
|
|
107
|
-
| `{ field: { neq: null } }` | `IS NOT NULL` | Alias for ne with null |
|
|
108
|
-
| `{ field: { isn: null } }` | `IS NOT NULL` | IS NOT operator with null |
|
|
109
|
-
| `{ field: { exists: true } }` | `IS NOT NULL` | Presence check (true = present) |
|
|
69
|
+
## See also
|
|
110
70
|
|
|
111
|
-
|
|
71
|
+
- [Filter System Overview](./) - the `filter` shape and the full `where` operator table
|
|
72
|
+
- [Logical Operators](./logical-operators) - `not`, the general-purpose negation operator
|
|
73
|
+
- [JSON Filtering](./json-filtering) - `exists` also works over a `'column.path'` key
|
|
74
|
+
- [Quick Reference](./quick-reference) - every operator, one line each
|
|
112
75
|
|
|
113
|
-
|
|
114
|
-
> `ne`/`neq` follow SQL three-valued logic: a row whose field is `NULL` never matches `{ field: { neq: value } }`. This is intentional (`NULL <> value` is UNKNOWN, not TRUE). Reach for `exists`/`notExists` or an explicit `{ field: null }` branch when you want NULL rows included.
|
|
76
|
+
**Files:**
|
|
115
77
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
### Soft Delete Pattern
|
|
120
|
-
|
|
121
|
-
```typescript
|
|
122
|
-
// Find active records (not deleted)
|
|
123
|
-
{ where: { deletedAt: { is: null } } }
|
|
124
|
-
|
|
125
|
-
// Find deleted records only
|
|
126
|
-
{ where: { deletedAt: { isn: null } } }
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Verified Users
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
// Find verified users
|
|
133
|
-
{ where: { emailVerifiedAt: { isn: null } } }
|
|
134
|
-
|
|
135
|
-
// Find unverified users
|
|
136
|
-
{ where: { emailVerifiedAt: { is: null } } }
|
|
137
|
-
```
|
|
78
|
+
- [`packages/core-server/src/connectors/postgres/repositories/dialect/query.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/postgres/repositories/dialect/query.ts) - `PostgresQueryOperators.FNS`, per-operator SQL builders
|
|
79
|
+
- [`packages/core-server/src/connectors/relational/repositories/dialect/filter.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/relational/repositories/dialect/filter.ts) - `FilterBuilder`, translates `TFilter` to Drizzle/SQL
|
|
80
|
+
- [`packages/filter/src/common/operators.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/filter/src/common/operators.ts) - `QueryOperators` constants
|
|
@@ -6,103 +6,100 @@ difficulty: intermediate
|
|
|
6
6
|
|
|
7
7
|
# Pattern Matching Operators
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Matches string fields against SQL `LIKE` patterns or POSIX regular expressions.
|
|
10
10
|
|
|
11
|
+
| Operator | SQL | Meaning |
|
|
12
|
+
|----------|-----|---------|
|
|
13
|
+
| `like` | `LIKE` | Case-sensitive pattern match |
|
|
14
|
+
| `nlike` | `NOT LIKE` | Negated case-sensitive pattern match |
|
|
15
|
+
| `ilike` | `ILIKE` | Case-insensitive pattern match (PostgreSQL-only) |
|
|
16
|
+
| `nilike` | `NOT ILIKE` | Negated case-insensitive pattern match (PostgreSQL-only) |
|
|
17
|
+
| `regexp` | `~` | Case-sensitive POSIX regex match |
|
|
18
|
+
| `iregexp` | `~*` | Case-insensitive POSIX regex match |
|
|
11
19
|
|
|
12
|
-
## like
|
|
13
|
-
|
|
14
|
-
Matches strings using SQL LIKE patterns.
|
|
20
|
+
## like
|
|
15
21
|
|
|
16
22
|
```typescript
|
|
17
|
-
// Starts with
|
|
18
23
|
{ where: { email: { like: '%@gmail.com' } } }
|
|
19
24
|
// SQL: WHERE "email" LIKE '%@gmail.com'
|
|
20
|
-
|
|
21
|
-
// Contains
|
|
22
|
-
{ where: { name: { like: '%john%' } } }
|
|
23
|
-
// SQL: WHERE "name" LIKE '%john%'
|
|
24
|
-
|
|
25
|
-
// Ends with
|
|
26
|
-
{ where: { filename: { like: '%.pdf' } } }
|
|
27
|
-
// SQL: WHERE "filename" LIKE '%.pdf'
|
|
28
|
-
|
|
29
|
-
// Single character wildcard
|
|
30
|
-
{ where: { code: { like: 'A_B' } } } // Matches 'A1B', 'AXB', etc.
|
|
31
|
-
// SQL: WHERE "code" LIKE 'A_B'
|
|
32
25
|
```
|
|
33
26
|
|
|
34
|
-
**
|
|
35
|
-
- `%` - Matches any sequence of characters (including empty)
|
|
36
|
-
- `_` - Matches exactly one character
|
|
27
|
+
**Notice:** `%` matches any sequence of characters (including none); `_` matches exactly one character.
|
|
37
28
|
|
|
29
|
+
**Edge cases:**
|
|
30
|
+
- A `null` operand compiles to `LIKE NULL`, which is never true - no rows match.
|
|
31
|
+
- Case sensitivity follows the column's collation; the default is case-sensitive.
|
|
38
32
|
|
|
39
|
-
## nlike
|
|
33
|
+
## nlike
|
|
40
34
|
|
|
41
35
|
```typescript
|
|
42
36
|
{ where: { email: { nlike: '%@test.com' } } }
|
|
43
37
|
// SQL: WHERE "email" NOT LIKE '%@test.com'
|
|
44
38
|
```
|
|
45
39
|
|
|
40
|
+
**Notice:** `NOT LIKE` excludes rows where the column is `NULL`, the same as `NOT IN`.
|
|
46
41
|
|
|
47
|
-
|
|
42
|
+
**Edge cases:**
|
|
43
|
+
- Same pattern-character rules as `like`.
|
|
48
44
|
|
|
49
|
-
|
|
45
|
+
## ilike
|
|
50
46
|
|
|
51
47
|
```typescript
|
|
52
48
|
{ where: { name: { ilike: '%john%' } } }
|
|
53
49
|
// SQL: WHERE "name" ILIKE '%john%'
|
|
54
|
-
// Matches: 'John', 'JOHN', 'john', 'JoHn'
|
|
55
|
-
|
|
56
|
-
{ where: { email: { ilike: '%@GMAIL.COM' } } }
|
|
57
|
-
// Matches: 'user@gmail.com', 'USER@Gmail.Com'
|
|
58
50
|
```
|
|
59
51
|
|
|
52
|
+
**Notice:** matches `'John'`, `'JOHN'`, and `'john'` alike.
|
|
53
|
+
|
|
54
|
+
**Edge cases:**
|
|
55
|
+
- `ILIKE` is a PostgreSQL extension, not standard SQL.
|
|
56
|
+
- Same pattern-character rules as `like`.
|
|
60
57
|
|
|
61
|
-
## nilike
|
|
58
|
+
## nilike
|
|
62
59
|
|
|
63
60
|
```typescript
|
|
64
61
|
{ where: { email: { nilike: '%@example%' } } }
|
|
65
62
|
// SQL: WHERE NOT ("email" ILIKE '%@example%')
|
|
66
63
|
```
|
|
67
64
|
|
|
65
|
+
**Notice:** built as a negated `ILIKE`, not a dedicated SQL operator.
|
|
68
66
|
|
|
69
|
-
|
|
67
|
+
**Edge cases:**
|
|
68
|
+
- Same `NULL`-excludes-nothing behavior as `nlike`.
|
|
70
69
|
|
|
71
|
-
|
|
70
|
+
## regexp
|
|
72
71
|
|
|
73
72
|
```typescript
|
|
74
|
-
// Starts with letter
|
|
75
73
|
{ where: { code: { regexp: '^[A-Z]' } } }
|
|
76
74
|
// SQL: WHERE "code" ~ '^[A-Z]'
|
|
77
|
-
|
|
78
|
-
// Email pattern
|
|
79
|
-
{ where: { email: { regexp: '^[a-z]+@[a-z]+\\.[a-z]+$' } } }
|
|
80
|
-
// SQL: WHERE "email" ~ '^[a-z]+@[a-z]+\.[a-z]+$'
|
|
81
|
-
|
|
82
|
-
// Phone number pattern
|
|
83
|
-
{ where: { phone: { regexp: '^\\+?[0-9]{10,15}$' } } }
|
|
84
75
|
```
|
|
85
76
|
|
|
86
|
-
|
|
87
|
-
> Escape backslashes in TypeScript strings: `\\d` for regex `\d`.
|
|
77
|
+
**Notice:** `~` is PostgreSQL's case-sensitive POSIX regex operator.
|
|
88
78
|
|
|
79
|
+
**Edge cases:**
|
|
80
|
+
- Escape backslashes in TypeScript strings: `\\d` for regex `\d`.
|
|
81
|
+
- No shape validation - any string operand is passed through as the pattern.
|
|
89
82
|
|
|
90
|
-
## iregexp
|
|
83
|
+
## iregexp
|
|
91
84
|
|
|
92
85
|
```typescript
|
|
93
86
|
{ where: { name: { iregexp: '^john' } } }
|
|
94
87
|
// SQL: WHERE "name" ~* '^john'
|
|
95
|
-
// Matches: 'John Doe', 'JOHN SMITH', 'john'
|
|
96
88
|
```
|
|
97
89
|
|
|
90
|
+
**Notice:** same as `regexp`, but case-insensitive (`~*`).
|
|
91
|
+
|
|
92
|
+
**Edge cases:**
|
|
93
|
+
- Matches `'John Doe'`, `'JOHN SMITH'`, and `'john'` alike.
|
|
94
|
+
|
|
95
|
+
## See also
|
|
96
|
+
|
|
97
|
+
- [Filter System Overview](./) - the `filter` shape and the full `where` operator table
|
|
98
|
+
- [JSON Filtering](./json-filtering) - pattern operators also work on a `'column.path'` key, with no numeric casting
|
|
99
|
+
- [Quick Reference](./quick-reference) - every operator, one line each
|
|
98
100
|
|
|
99
|
-
|
|
101
|
+
**Files:**
|
|
100
102
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
| `nlike` | `NOT LIKE` | Sensitive | Negative pattern |
|
|
105
|
-
| `ilike` | `ILIKE` | Insensitive | PostgreSQL only |
|
|
106
|
-
| `nilike` | `NOT ILIKE` | Insensitive | PostgreSQL only |
|
|
107
|
-
| `regexp` | `~` | Sensitive | POSIX regex match |
|
|
108
|
-
| `iregexp` | `~*` | Insensitive | POSIX regex match |
|
|
103
|
+
- [`packages/core-server/src/connectors/postgres/repositories/dialect/query.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/postgres/repositories/dialect/query.ts) - `PostgresQueryOperators.FNS`, per-operator SQL builders
|
|
104
|
+
- [`packages/core-server/src/connectors/relational/repositories/dialect/filter.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core-server/src/connectors/relational/repositories/dialect/filter.ts) - `FilterBuilder`, translates `TFilter` to Drizzle/SQL
|
|
105
|
+
- [`packages/filter/src/common/operators.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/filter/src/common/operators.ts) - `QueryOperators` constants
|