Skip to content

Commit b3ebeac

Browse files
authored
add if else clause. (#7)
1 parent ba781dd commit b3ebeac

23 files changed

+631
-37
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ To fix that, add an [`import_map.json`](https://deno.land/manual@v1.26.1/linking
4141
```json
4242
{
4343
"imports": {
44-
"kysely": "https://cdn.jsdelivr.net/npm/kysely@0.22.0/dist/esm/index.js"
44+
"kysely": "https://cdn.jsdelivr.net/npm/kysely@0.23.5/dist/esm/index.js"
4545
}
4646
}
4747
```
@@ -140,7 +140,9 @@ await db
140140

141141
#### Supported SurrealQL specific statements:
142142

143-
[create](https://surrealdb.com/docs/surrealql/statements/create), [relate](https://surrealdb.com/docs/surrealql/statements/relate).
143+
[create](https://surrealdb.com/docs/surrealql/statements/create),
144+
[if else](https://surrealdb.com/docs/surrealql/statements/ifelse),
145+
[relate](https://surrealdb.com/docs/surrealql/statements/relate).
144146

145147
#### Why not write a query builder from scratch
146148

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"type-check": "tsc --noEmit"
3636
},
3737
"peerDependencies": {
38-
"kysely": ">= 0.7.8 < 1"
38+
"kysely": ">= 0.23.5 < 1"
3939
},
4040
"devDependencies": {
4141
"@tsconfig/node16": "^1.0.3",
@@ -53,7 +53,7 @@
5353
"eslint-config-prettier": "^8.5.0",
5454
"eslint-plugin-import": "^2.26.0",
5555
"eslint-plugin-prettier": "^4.2.1",
56-
"kysely": "^0.22.0",
56+
"kysely": "^0.23.5",
5757
"mocha": "^10.0.0",
5858
"node-fetch": "^2",
5959
"prettier": "^2.7.1",

pnpm-lock.yaml

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/dialect/http/http-adapter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ export class SurrealDbHttpAdapter extends DialectAdapterBase {
1111
return false
1212
}
1313

14-
async acquireMigrationLock(db: Kysely<any>): Promise<void> {
14+
async acquireMigrationLock(_: Kysely<any>): Promise<void> {
1515
this.#throwLocksError()
1616
}
1717

18-
async releaseMigrationLock(db: Kysely<any>): Promise<void> {
18+
async releaseMigrationLock(_: Kysely<any>): Promise<void> {
1919
this.#throwLocksError()
2020
}
2121

src/dialect/http/http-connection.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ export class SurrealDbHttpConnection implements DatabaseConnection {
3838
throw new SurrealDbHttpDatabaseError(queryResult.detail)
3939
}
4040

41+
const rows = queryResult?.result || []
42+
4143
return {
42-
rows: queryResult?.result ?? [],
44+
numAffectedRows: BigInt(rows.length),
45+
rows,
4346
}
4447
}
4548

src/dialect/http/http-introspector.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export class SurrealDbHttpIntrospector implements DatabaseIntrospector {
4141
isNullable: true,
4242
name,
4343
})),
44+
isView: false,
4445
name: tableName,
4546
}
4647
}),

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export * from './dialect/http/http-errors.js'
66
export * from './dialect/http/http-introspector.js'
77
export type {FetchRequest, FetchResponse, SurrealDbHttpDialectConfig} from './dialect/http/http-types.js'
88
export * from './query-builder/create-query-builder.js'
9+
export * from './query-builder/if-else-query-builder.js'
910
export * from './query-builder/relate-query-builder.js'
1011
export * from './query-compiler/query-compiler.js'
1112
export * from './surreal-kysely.js'

src/operation-node/create-query-node.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {ColumnUpdateNode, TableNode, ValueNode} from 'kysely'
1+
import type {ColumnUpdateNode, TableNode, ValueNode} from 'kysely'
22

33
import {freeze} from '../util/object-utils.js'
44
import type {SurrealOperationNode} from './operation-node.js'

src/operation-node/else-if-node.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import type {OperationNode} from 'kysely'
2+
3+
import {freeze} from '../util/object-utils.js'
4+
import type {SurrealOperationNode} from './operation-node.js'
5+
6+
export interface ElseIfNode extends SurrealOperationNode {
7+
readonly kind: 'ElseIfNode'
8+
readonly if: OperationNode
9+
readonly then: OperationNode
10+
}
11+
12+
/**
13+
* @internal
14+
*/
15+
export const ElseIfNode = freeze({
16+
is(node: SurrealOperationNode): node is ElseIfNode {
17+
return node.kind === 'ElseIfNode'
18+
},
19+
20+
create(condition: OperationNode, expression: OperationNode): ElseIfNode {
21+
return freeze({
22+
kind: 'ElseIfNode',
23+
if: condition,
24+
then: expression,
25+
})
26+
},
27+
})
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import type {OperationNode} from 'kysely'
2+
3+
import {freeze} from '../util/object-utils.js'
4+
import {ElseIfNode} from './else-if-node.js'
5+
import type {SurrealOperationNode} from './operation-node.js'
6+
7+
export interface IfElseQueryNode extends SurrealOperationNode {
8+
readonly kind: 'IfElseQueryNode'
9+
readonly if: OperationNode
10+
readonly then: OperationNode
11+
readonly else?: OperationNode
12+
readonly elseIf?: ReadonlyArray<ElseIfNode>
13+
}
14+
15+
/**
16+
* @internal
17+
*/
18+
export const IfElseQueryNode = freeze({
19+
is(node: SurrealOperationNode): node is IfElseQueryNode {
20+
return node.kind === 'IfElseQueryNode'
21+
},
22+
23+
create(condition: OperationNode, expression: OperationNode): IfElseQueryNode {
24+
return freeze({
25+
kind: 'IfElseQueryNode',
26+
if: condition,
27+
then: expression,
28+
})
29+
},
30+
31+
cloneWithElse(ifElseQuery: IfElseQueryNode, elze: OperationNode): IfElseQueryNode {
32+
return freeze({
33+
...ifElseQuery,
34+
else: elze,
35+
})
36+
},
37+
38+
cloneWithElseIf(ifElseQuery: IfElseQueryNode, condition: OperationNode, expression: OperationNode): IfElseQueryNode {
39+
const elseIfNode = ElseIfNode.create(condition, expression)
40+
41+
return freeze({
42+
...ifElseQuery,
43+
elseIf: ifElseQuery.elseIf !== undefined ? [...ifElseQuery.elseIf, elseIfNode] : [elseIfNode],
44+
})
45+
},
46+
})

0 commit comments

Comments
 (0)