@venizia/ignis-docs 0.2.1-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/content/best-practices/architectural-patterns.md +3 -3
- package/content/best-practices/code-style-standards/naming-conventions.md +1 -1
- package/content/best-practices/contribution-workflow.md +2 -2
- package/content/best-practices/error-handling.md +94 -89
- package/content/best-practices/security-guidelines.md +5 -5
- package/content/extensions/components/api-reference.md +22 -21
- package/content/extensions/components/authentication/api.md +64 -28
- package/content/extensions/components/authentication/errors.md +19 -5
- package/content/extensions/components/authentication/index.md +19 -18
- package/content/extensions/components/authentication/usage.md +55 -30
- package/content/extensions/components/authorization/api.md +351 -84
- package/content/extensions/components/authorization/errors.md +51 -17
- package/content/extensions/components/authorization/getting-started.md +227 -0
- package/content/extensions/components/authorization/index.md +24 -16
- package/content/extensions/components/authorization/usage.md +45 -21
- package/content/extensions/components/health-check.md +15 -9
- package/content/extensions/components/index.md +24 -90
- package/content/extensions/components/mail/api.md +105 -54
- package/content/extensions/components/mail/errors.md +12 -10
- package/content/extensions/components/mail/index.md +32 -13
- package/content/extensions/components/mail/usage.md +26 -18
- package/content/extensions/components/request-tracker.md +18 -14
- package/content/extensions/components/socket-io/api.md +377 -882
- package/content/extensions/components/socket-io/errors.md +49 -51
- package/content/extensions/components/socket-io/index.md +72 -88
- package/content/extensions/components/socket-io/usage.md +107 -117
- package/content/extensions/components/static-asset/api.md +83 -31
- package/content/extensions/components/static-asset/errors.md +18 -7
- package/content/extensions/components/static-asset/index.md +18 -11
- package/content/extensions/components/static-asset/usage.md +11 -6
- package/content/extensions/components/template/index.md +3 -3
- package/content/extensions/components/websocket/api.md +58 -27
- package/content/extensions/components/websocket/errors.md +3 -3
- package/content/extensions/components/websocket/index.md +8 -7
- package/content/extensions/components/websocket/usage.md +21 -8
- package/content/extensions/helpers/cron/index.md +8 -7
- package/content/extensions/helpers/crypto/index.md +16 -8
- package/content/extensions/helpers/crypto/reference.md +96 -24
- package/content/extensions/helpers/env/index.md +14 -10
- package/content/extensions/helpers/error/index.md +99 -23
- package/content/extensions/helpers/index.md +61 -47
- package/content/extensions/helpers/inversion/index.md +23 -6
- package/content/extensions/helpers/inversion/reference.md +30 -22
- package/content/extensions/helpers/kafka/admin.md +3 -2
- package/content/extensions/helpers/kafka/compile-binary.md +69 -44
- package/content/extensions/helpers/kafka/consumer.md +24 -21
- package/content/extensions/helpers/kafka/examples.md +22 -234
- package/content/extensions/helpers/kafka/index.md +30 -62
- package/content/extensions/helpers/kafka/producer.md +31 -26
- package/content/extensions/helpers/kafka/schema-registry.md +19 -14
- package/content/extensions/helpers/logger/hf-logger.md +49 -22
- package/content/extensions/helpers/logger/index.md +37 -12
- package/content/extensions/helpers/logger/pino.md +31 -11
- package/content/extensions/helpers/logger/reference.md +243 -52
- package/content/extensions/helpers/network/api.md +65 -30
- package/content/extensions/helpers/network/index.md +32 -11
- package/content/extensions/helpers/queue/index.md +17 -6
- package/content/extensions/helpers/queue/reference.md +52 -25
- package/content/extensions/helpers/redis/index.md +29 -11
- package/content/extensions/helpers/redis/reference.md +85 -28
- package/content/extensions/helpers/secrets/index.md +82 -12
- package/content/extensions/helpers/socket-io/api.md +40 -21
- package/content/extensions/helpers/socket-io/index.md +26 -10
- package/content/extensions/helpers/storage/api.md +42 -24
- package/content/extensions/helpers/storage/index.md +10 -7
- package/content/extensions/helpers/types/index.md +20 -7
- package/content/extensions/helpers/types/reference.md +53 -14
- package/content/extensions/helpers/uid/index.md +166 -10
- package/content/extensions/helpers/websocket/api.md +52 -13
- package/content/extensions/helpers/websocket/index.md +7 -4
- package/content/extensions/helpers/worker-thread/index.md +9 -5
- package/content/extensions/helpers/worker-thread/reference.md +20 -20
- 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/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 +26 -14
- package/content/guides/core-concepts/persistent/sqlite.md +296 -0
- package/content/guides/core-concepts/persistent/transactions.md +12 -11
- 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 +4 -3
- package/content/guides/migrations/scoped-rbac-migration.md +5 -5
- package/content/guides/migrations/unified-connectors-migration.md +7 -6
- package/content/guides/tutorials/realtime-chat.md +1 -1
- package/content/references/base/application.md +63 -21
- package/content/references/base/components.md +3 -3
- package/content/references/base/connectors.md +14 -14
- package/content/references/base/controllers.md +12 -12
- package/content/references/base/datasources-reference.md +32 -31
- package/content/references/base/datasources.md +6 -6
- package/content/references/base/dependency-injection.md +12 -11
- package/content/references/base/filter-system/application-usage.md +54 -30
- package/content/references/base/filter-system/array-operators.md +24 -46
- package/content/references/base/filter-system/comparison-operators.md +47 -67
- package/content/references/base/filter-system/default-filter.md +59 -53
- package/content/references/base/filter-system/fields-order-pagination.md +92 -146
- package/content/references/base/filter-system/index.md +25 -13
- package/content/references/base/filter-system/json-filtering.md +45 -184
- package/content/references/base/filter-system/list-operators.md +23 -53
- package/content/references/base/filter-system/logical-operators.md +63 -121
- package/content/references/base/filter-system/null-operators.md +34 -104
- package/content/references/base/filter-system/pattern-matching.md +40 -55
- package/content/references/base/filter-system/quick-reference.md +86 -198
- package/content/references/base/filter-system/range-operators.md +18 -46
- package/content/references/base/filter-system/tips.md +6 -6
- package/content/references/base/filter-system/use-cases.md +33 -15
- package/content/references/base/grpc-controllers.md +53 -17
- package/content/references/base/index.md +5 -3
- package/content/references/base/middlewares.md +11 -10
- package/content/references/base/models-reference.md +17 -17
- package/content/references/base/models.md +4 -3
- package/content/references/base/providers.md +8 -8
- package/content/references/base/repositories/advanced.md +224 -326
- package/content/references/base/repositories/index.md +19 -6
- package/content/references/base/repositories/mixins.md +5 -5
- package/content/references/base/repositories/relations.md +160 -293
- package/content/references/base/repositories/soft-deletable.md +16 -6
- package/content/references/base/secrets.md +17 -13
- package/content/references/base/services.md +6 -4
- package/content/references/configuration/environment-variables.md +31 -23
- package/content/references/configuration/index.md +6 -4
- package/content/references/index.md +1 -1
- package/content/references/utilities/duration.md +85 -0
- package/content/references/utilities/index.md +5 -1
- package/content/references/utilities/jsx-reference.md +11 -11
- package/content/references/utilities/jsx.md +2 -2
- package/content/references/utilities/module.md +78 -25
- package/content/references/utilities/request.md +2 -1
- package/content/references/utilities/retry.md +139 -0
- package/content/references/utilities/schema.md +2 -2
- package/content/references/utilities/statuses-reference.md +4 -4
- package/content/references/utilities/statuses.md +5 -5
- 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 +17 -16
|
@@ -6,135 +6,65 @@ 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:
|
|
15
|
-
|
|
16
|
-
```typescript
|
|
17
|
-
// IS NULL (implicit)
|
|
18
|
-
{ where: { deletedAt: null } }
|
|
19
|
-
// SQL: WHERE "deleted_at" IS NULL
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## eq with Null
|
|
24
|
-
|
|
25
|
-
```typescript
|
|
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
|
|
35
|
-
|
|
36
|
-
```typescript
|
|
37
|
-
// IS NOT NULL
|
|
38
|
-
{ where: { deletedAt: { ne: null } } }
|
|
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'
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
## is - IS NULL / Equality
|
|
18
|
+
## is
|
|
49
19
|
|
|
50
20
|
```typescript
|
|
51
|
-
// NULL check
|
|
52
21
|
{ where: { deletedAt: { is: null } } }
|
|
53
22
|
// SQL: WHERE "deleted_at" IS NULL
|
|
54
|
-
|
|
55
|
-
// Value check (same as eq)
|
|
56
|
-
{ where: { status: { is: 'active' } } }
|
|
57
|
-
// SQL: WHERE "status" = 'active'
|
|
58
23
|
```
|
|
59
24
|
|
|
25
|
+
**Notice:** `is` behaves exactly like `eq` - `is: null` compiles to `IS NULL`, `is: <value>` compiles to `=`.
|
|
26
|
+
|
|
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`.
|
|
60
30
|
|
|
61
|
-
## isn
|
|
31
|
+
## isn
|
|
62
32
|
|
|
63
33
|
```typescript
|
|
64
|
-
// NOT NULL check
|
|
65
34
|
{ where: { verifiedAt: { isn: null } } }
|
|
66
35
|
// 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
36
|
```
|
|
72
37
|
|
|
38
|
+
**Notice:** `isn` behaves exactly like `ne`/`neq` - `isn: null` compiles to `IS NOT NULL`, `isn: <value>` compiles to `!=`.
|
|
73
39
|
|
|
74
|
-
|
|
40
|
+
**Edge cases:**
|
|
41
|
+
- Same three-valued-logic caveat as `ne`: `{ isn: value }` for a real `value` never matches a `NULL` row.
|
|
75
42
|
|
|
76
|
-
|
|
43
|
+
## exists
|
|
77
44
|
|
|
78
45
|
```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 } } }
|
|
46
|
+
{ where: { verifiedAt: { exists: true } } }
|
|
47
|
+
// SQL: WHERE "verified_at" IS NOT NULL
|
|
88
48
|
```
|
|
89
49
|
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
## Null Check Summary
|
|
50
|
+
**Notice:** `exists` takes a boolean, not a value - `exists: false` compiles to `IS NULL`, anything else compiles to `IS NOT NULL`.
|
|
99
51
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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) |
|
|
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 } }`.
|
|
110
56
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
> [!NOTE]
|
|
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.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
## Common Patterns
|
|
118
|
-
|
|
119
|
-
### Soft Delete Pattern
|
|
57
|
+
## notExists
|
|
120
58
|
|
|
121
59
|
```typescript
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// Find deleted records only
|
|
126
|
-
{ where: { deletedAt: { isn: null } } }
|
|
60
|
+
{ where: { verifiedAt: { notExists: true } } }
|
|
61
|
+
// SQL: WHERE "verified_at" IS NULL
|
|
127
62
|
```
|
|
128
63
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
// Find verified users
|
|
133
|
-
{ where: { emailVerifiedAt: { isn: null } } }
|
|
64
|
+
**Notice:** the inverse of `exists` - `notExists: false` compiles to `IS NOT NULL`, anything else compiles to `IS NULL`.
|
|
134
65
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
```
|
|
66
|
+
**Edge cases:**
|
|
67
|
+
- Same `false`-only branch rule as `exists`.
|
|
138
68
|
|
|
139
69
|
## See also
|
|
140
70
|
|
|
@@ -145,6 +75,6 @@ All the IS NULL / IS NOT NULL syntaxes above are equivalent -- use whichever rea
|
|
|
145
75
|
|
|
146
76
|
**Files:**
|
|
147
77
|
|
|
148
|
-
- [`packages/core/src/connectors/postgres/repositories/dialect/query.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core/src/connectors/postgres/repositories/dialect/query.ts) - `PostgresQueryOperators.FNS`, per-operator SQL builders
|
|
149
|
-
- [`packages/core/src/connectors/
|
|
150
|
-
- [`packages/
|
|
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,106 +6,91 @@ 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.
|
|
60
53
|
|
|
61
|
-
|
|
54
|
+
**Edge cases:**
|
|
55
|
+
- `ILIKE` is a PostgreSQL extension, not standard SQL.
|
|
56
|
+
- Same pattern-character rules as `like`.
|
|
57
|
+
|
|
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 (`~*`).
|
|
98
91
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
| Operator | SQL | Case | Description |
|
|
102
|
-
|----------|-----|------|-------------|
|
|
103
|
-
| `like` | `LIKE` | Sensitive | Pattern with wildcards |
|
|
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 |
|
|
92
|
+
**Edge cases:**
|
|
93
|
+
- Matches `'John Doe'`, `'JOHN SMITH'`, and `'john'` alike.
|
|
109
94
|
|
|
110
95
|
## See also
|
|
111
96
|
|
|
@@ -115,6 +100,6 @@ PostgreSQL POSIX regex matching.
|
|
|
115
100
|
|
|
116
101
|
**Files:**
|
|
117
102
|
|
|
118
|
-
- [`packages/core/src/connectors/postgres/repositories/dialect/query.ts`](https://github.com/VENIZIA-AI/ignis/blob/main/packages/core/src/connectors/postgres/repositories/dialect/query.ts) - `PostgresQueryOperators.FNS`, per-operator SQL builders
|
|
119
|
-
- [`packages/core/src/connectors/
|
|
120
|
-
- [`packages/
|
|
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
|