rado 1.0.4 → 1.0.6
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/dist/core/Column.d.ts +5 -2
- package/dist/core/Column.js +12 -5
- package/dist/core/Emitter.js +1 -1
- package/dist/core/Query.d.ts +1 -1
- package/dist/core/Query.js +2 -2
- package/dist/core/Sql.d.ts +2 -1
- package/dist/core/Sql.js +8 -1
- package/dist/core/expr/Conditions.js +9 -7
- package/dist/core/query/Insert.js +3 -3
- package/dist/postgres/diff.js +3 -3
- package/dist/sqlite/diff.js +2 -2
- package/dist/sqlite/functions.d.ts +1 -5
- package/dist/sqlite/functions.js +0 -2
- package/dist/universal/functions.d.ts +1 -1
- package/dist/universal/functions.js +9 -5
- package/package.json +1 -1
package/dist/core/Column.d.ts
CHANGED
|
@@ -11,7 +11,8 @@ export interface ColumnData {
|
|
|
11
11
|
notNull?: boolean;
|
|
12
12
|
isUnique?: boolean;
|
|
13
13
|
autoIncrement?: boolean;
|
|
14
|
-
|
|
14
|
+
$default?(): Sql;
|
|
15
|
+
defaultValue?: Sql;
|
|
15
16
|
references?(): FieldData;
|
|
16
17
|
onUpdate?: Sql;
|
|
17
18
|
onDelete?: Sql;
|
|
@@ -23,7 +24,9 @@ export declare class Column<Value = unknown> {
|
|
|
23
24
|
readonly [internalData]: ColumnData;
|
|
24
25
|
constructor(data: ColumnData);
|
|
25
26
|
notNull(): RequiredColumn<Value>;
|
|
26
|
-
|
|
27
|
+
$defaultFn(value: () => Input<WithoutNull<Value>>): Column<WithoutNull<Value>>;
|
|
28
|
+
$default(value: Input<WithoutNull<Value>> | (() => Input<WithoutNull<Value>>)): Column<WithoutNull<Value>>;
|
|
29
|
+
default(value: Input<WithoutNull<Value>>): Column<WithoutNull<Value>>;
|
|
27
30
|
defaultNow(): Column<WithoutNull<Value>>;
|
|
28
31
|
primaryKey(): Column<WithoutNull<Value>>;
|
|
29
32
|
unique(name?: string): Column<Value>;
|
package/dist/core/Column.js
CHANGED
|
@@ -13,20 +13,27 @@ var Column = class _Column {
|
|
|
13
13
|
notNull: true
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
$defaultFn(value) {
|
|
17
|
+
return this.$default(value);
|
|
18
|
+
}
|
|
19
|
+
$default(value) {
|
|
17
20
|
return new _Column({
|
|
18
21
|
...getData(this),
|
|
19
|
-
|
|
22
|
+
$default() {
|
|
20
23
|
return input(value instanceof Function ? value() : value);
|
|
21
24
|
}
|
|
22
25
|
});
|
|
23
26
|
}
|
|
27
|
+
default(value) {
|
|
28
|
+
return new _Column({
|
|
29
|
+
...getData(this),
|
|
30
|
+
defaultValue: input(value)
|
|
31
|
+
});
|
|
32
|
+
}
|
|
24
33
|
defaultNow() {
|
|
25
34
|
return new _Column({
|
|
26
35
|
...getData(this),
|
|
27
|
-
defaultValue()
|
|
28
|
-
return sql.unsafe("now()");
|
|
29
|
-
}
|
|
36
|
+
defaultValue: sql.unsafe("now()")
|
|
30
37
|
});
|
|
31
38
|
}
|
|
32
39
|
primaryKey() {
|
package/dist/core/Emitter.js
CHANGED
|
@@ -65,7 +65,7 @@ var Emitter = class {
|
|
|
65
65
|
column.notNull && sql`not null`,
|
|
66
66
|
column.isUnique && sql`unique`,
|
|
67
67
|
column.autoIncrement && sql`autoincrement`,
|
|
68
|
-
column.defaultValue && sql`default ${column.defaultValue
|
|
68
|
+
column.defaultValue && sql`default ${column.defaultValue}`,
|
|
69
69
|
column.references && sql`references ${sql.chunk("emitReferences", [column.references()])}`,
|
|
70
70
|
column.onUpdate && sql`on update ${column.onUpdate}`
|
|
71
71
|
]).emitTo(this);
|
package/dist/core/Query.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export declare abstract class Query<Result, Meta extends QueryMeta> extends Exec
|
|
|
32
32
|
get(db?: HasResolver): Deliver<Meta, Result | null>;
|
|
33
33
|
run(db?: HasResolver): Deliver<Meta, void>;
|
|
34
34
|
prepare<Inputs extends Record<string, unknown>>(name?: string): PreparedQuery<Result, Inputs, Meta>;
|
|
35
|
-
toSQL(): {
|
|
35
|
+
toSQL(db?: HasResolver): {
|
|
36
36
|
sql: string;
|
|
37
37
|
params: Array<unknown>;
|
|
38
38
|
};
|
package/dist/core/Query.js
CHANGED
|
@@ -80,8 +80,8 @@ var Query = class extends Executable {
|
|
|
80
80
|
prepare(name) {
|
|
81
81
|
return getData(this).resolver.prepare(this, name);
|
|
82
82
|
}
|
|
83
|
-
toSQL() {
|
|
84
|
-
const
|
|
83
|
+
toSQL(db) {
|
|
84
|
+
const resolver = db ? getResolver(db) : getData(this).resolver;
|
|
85
85
|
if (!resolver)
|
|
86
86
|
throw new Error("Query has no resolver");
|
|
87
87
|
return resolver.toSQL(this);
|
package/dist/core/Sql.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export declare class Sql<Value = unknown> implements HasSql<Value> {
|
|
|
29
29
|
field(field: FieldData): Sql<Value>;
|
|
30
30
|
add(sql: HasSql): Sql<Value>;
|
|
31
31
|
value(value: unknown): Sql<Value>;
|
|
32
|
+
getValue(): Value | undefined;
|
|
32
33
|
inline(value: unknown): Sql<Value>;
|
|
33
34
|
jsonPath(path: Array<string | number>): Sql<Value>;
|
|
34
35
|
placeholder(name: string): Sql<Value>;
|
|
@@ -48,7 +49,7 @@ export declare namespace sql {
|
|
|
48
49
|
export function identifier<T>(identifier: string): Sql<T>;
|
|
49
50
|
export function field<T>(field: FieldData): Sql<T>;
|
|
50
51
|
export function chunk<Type extends keyof EmitMethods>(type: Type, inner: Parameters<EmitMethods[Type]>[0]): Sql;
|
|
51
|
-
export function universal(runtimes: Partial<Record<Runtime | 'default', Sql
|
|
52
|
+
export function universal<T>(runtimes: Partial<Record<Runtime | 'default', Sql<T>>>): Sql<T>;
|
|
52
53
|
type QueryChunk = HasSql | undefined;
|
|
53
54
|
export function query(ast: Record<string, boolean | QueryChunk | Array<QueryChunk>>): Sql;
|
|
54
55
|
export function join<T>(items: Array<Sql | HasSql | undefined | false>, separator?: Sql): Sql<T>;
|
package/dist/core/Sql.js
CHANGED
|
@@ -46,6 +46,13 @@ var Sql = class _Sql {
|
|
|
46
46
|
value(value) {
|
|
47
47
|
return this.chunk("emitValue", value);
|
|
48
48
|
}
|
|
49
|
+
getValue() {
|
|
50
|
+
if (this.#chunks.length !== 1)
|
|
51
|
+
return;
|
|
52
|
+
const chunk = this.#chunks[0];
|
|
53
|
+
if (chunk?.type === "emitValue")
|
|
54
|
+
return chunk.inner;
|
|
55
|
+
}
|
|
49
56
|
inline(value) {
|
|
50
57
|
return this.chunk("emitInline", value);
|
|
51
58
|
}
|
|
@@ -141,7 +148,7 @@ function sql(strings, ...inner) {
|
|
|
141
148
|
}
|
|
142
149
|
sql2.chunk = chunk;
|
|
143
150
|
function universal(runtimes) {
|
|
144
|
-
return chunk("emitUniversal", runtimes);
|
|
151
|
+
return empty().chunk("emitUniversal", runtimes);
|
|
145
152
|
}
|
|
146
153
|
sql2.universal = universal;
|
|
147
154
|
function query(ast) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/core/expr/Conditions.ts
|
|
2
|
-
import { getQuery } from "../Internal.js";
|
|
2
|
+
import { getQuery, getSql, hasSql } from "../Internal.js";
|
|
3
3
|
import { sql } from "../Sql.js";
|
|
4
4
|
import { input } from "./Input.js";
|
|
5
5
|
function bool(impl) {
|
|
@@ -41,19 +41,21 @@ function not(condition) {
|
|
|
41
41
|
return bool(sql`not ${input(condition)}`);
|
|
42
42
|
}
|
|
43
43
|
function inArray(left, right) {
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
const value = (hasSql(right) ? getSql(right).getValue() : void 0) ?? right;
|
|
45
|
+
if (Array.isArray(value)) {
|
|
46
|
+
if (value.length === 0)
|
|
46
47
|
return sql`false`;
|
|
47
|
-
return bool(sql`${input(left)} in (${sql.join(
|
|
48
|
+
return bool(sql`${input(left)} in (${sql.join(value.map(input), sql`, `)})`);
|
|
48
49
|
}
|
|
49
50
|
return bool(sql`${input(left)} in ${input(right)}`);
|
|
50
51
|
}
|
|
51
52
|
function notInArray(left, right) {
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
const value = (hasSql(right) ? getSql(right).getValue() : void 0) ?? right;
|
|
54
|
+
if (Array.isArray(value)) {
|
|
55
|
+
if (value.length === 0)
|
|
54
56
|
return sql`true`;
|
|
55
57
|
return bool(
|
|
56
|
-
sql`${input(left)} not in (${sql.join(
|
|
58
|
+
sql`${input(left)} not in (${sql.join(value.map(input), sql`, `)})`
|
|
57
59
|
);
|
|
58
60
|
}
|
|
59
61
|
return bool(sql`${input(left)} not in ${input(right)}`);
|
|
@@ -84,11 +84,11 @@ var InsertInto = class {
|
|
|
84
84
|
return sql`(${sql.join(
|
|
85
85
|
Object.entries(table.columns).map(([key, column]) => {
|
|
86
86
|
const value = row[key];
|
|
87
|
-
const {
|
|
87
|
+
const { $default, mapToDriverValue } = getData(column);
|
|
88
88
|
if (value !== void 0)
|
|
89
89
|
return input(mapToDriverValue?.(value) ?? value);
|
|
90
|
-
if (
|
|
91
|
-
return
|
|
90
|
+
if ($default)
|
|
91
|
+
return $default();
|
|
92
92
|
return defaultKeyword;
|
|
93
93
|
}),
|
|
94
94
|
sql`, `
|
package/dist/postgres/diff.js
CHANGED
|
@@ -113,7 +113,7 @@ var postgresDiff = (hasTable) => {
|
|
|
113
113
|
{
|
|
114
114
|
type: sql.unsafe(column2.type.toLowerCase()),
|
|
115
115
|
notNull: column2.notNull,
|
|
116
|
-
defaultValue: column2.defaultValue ?
|
|
116
|
+
defaultValue: column2.defaultValue ? sql.unsafe(column2.defaultValue) : void 0
|
|
117
117
|
}
|
|
118
118
|
];
|
|
119
119
|
})
|
|
@@ -168,8 +168,8 @@ var postgresDiff = (hasTable) => {
|
|
|
168
168
|
})
|
|
169
169
|
);
|
|
170
170
|
}
|
|
171
|
-
const localDefault = localInstruction.defaultValue
|
|
172
|
-
const schemaDefault = schemaInstruction.defaultValue
|
|
171
|
+
const localDefault = localInstruction.defaultValue;
|
|
172
|
+
const schemaDefault = schemaInstruction.defaultValue;
|
|
173
173
|
const localDefaultStr = localDefault && inline(localDefault);
|
|
174
174
|
const schemaDefaultStr = schemaDefault && inline(schemaDefault);
|
|
175
175
|
if (localDefaultStr !== schemaDefaultStr) {
|
package/dist/sqlite/diff.js
CHANGED
|
@@ -41,7 +41,7 @@ var sqliteDiff = (hasTable) => {
|
|
|
41
41
|
type: sql.unsafe(column2.type.toLowerCase()),
|
|
42
42
|
notNull: column2.notnull,
|
|
43
43
|
primary: hasSinglePrimaryKey && column2.pk === 1,
|
|
44
|
-
defaultValue: column2.dflt_value !== null ?
|
|
44
|
+
defaultValue: column2.dflt_value !== null ? sql.unsafe(column2.dflt_value) : void 0
|
|
45
45
|
})
|
|
46
46
|
)
|
|
47
47
|
];
|
|
@@ -142,7 +142,7 @@ var sqliteDiff = (hasTable) => {
|
|
|
142
142
|
);
|
|
143
143
|
const selection = { ...hasTable };
|
|
144
144
|
for (const name of missingColumns) {
|
|
145
|
-
selection[name] = getData(tableApi.columns[name]).defaultValue
|
|
145
|
+
selection[name] = getData(tableApi.columns[name]).defaultValue ?? sql`null`;
|
|
146
146
|
}
|
|
147
147
|
return [
|
|
148
148
|
// Create a new temporary table with the new definition
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { HasSql, HasTable } from '../core/Internal.js';
|
|
2
2
|
import { type Sql } from '../core/Sql.js';
|
|
3
3
|
import { type Input } from '../core/expr/Input.js';
|
|
4
4
|
/**: The count(X) function returns a count of the number of times that X is not NULL in a group. The count(*) function (with no arguments) returns the total number of rows in the group. */
|
|
5
5
|
export declare const count: (x?: HasSql) => Sql<number>;
|
|
6
6
|
/** The iif(X,Y,Z) function returns the value Y if X is true, and Z otherwise. The iif(X,Y,Z) function is logically equivalent to and generates the same bytecode as the CASE HasSql "CASE WHEN X THEN Y ELSE Z END".*/
|
|
7
7
|
export declare const iif: <T>(x: Input<boolean>, y: Input<T>, z: Input<T>) => Sql<T>;
|
|
8
|
-
/**
|
|
9
|
-
* The EXISTS operator always evaluates to one of the integer values 0 and 1. If executing the SELECT statement specified as the right-hand operand of the EXISTS operator would return one or more rows, then the EXISTS operator evaluates to 1. If executing the SELECT would return no rows at all, then the EXISTS operator evaluates to 0.
|
|
10
|
-
*/
|
|
11
|
-
export declare const exists: (cursor: HasQuery) => Sql<boolean>;
|
|
12
8
|
/** Use the match operator for the FTS5 module */
|
|
13
9
|
export declare const match: (table: HasTable, searchTerm: Input<string>) => Sql<boolean>;
|
|
14
10
|
/** Returns a real value reflecting the accuracy of the current match */
|
package/dist/sqlite/functions.js
CHANGED
|
@@ -4,7 +4,6 @@ import { Functions } from "../core/expr/Functions.js";
|
|
|
4
4
|
import { input } from "../core/expr/Input.js";
|
|
5
5
|
var count = Functions.count;
|
|
6
6
|
var iif = Functions.iif;
|
|
7
|
-
var exists = Functions.exists;
|
|
8
7
|
var match = Functions.match;
|
|
9
8
|
var bm25 = Functions.bm25;
|
|
10
9
|
var highlight = Functions.highlight;
|
|
@@ -101,7 +100,6 @@ export {
|
|
|
101
100
|
date,
|
|
102
101
|
datetime,
|
|
103
102
|
degrees,
|
|
104
|
-
exists,
|
|
105
103
|
exp,
|
|
106
104
|
floor,
|
|
107
105
|
group_concat,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type Sql } from '../core/Sql.js';
|
|
2
|
-
import type
|
|
2
|
+
import { type Input } from '../core/expr/Input.js';
|
|
3
3
|
export declare function lastInsertId(): Sql<number>;
|
|
4
4
|
export declare function concat(...slices: Array<Input<string | null>>): Sql<string>;
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
// src/universal/functions.ts
|
|
2
2
|
import { sql } from "../core/Sql.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Functions } from "../core/expr/Functions.js";
|
|
4
|
+
import { input } from "../core/expr/Input.js";
|
|
4
5
|
var insertId = sql.universal({
|
|
5
|
-
sqlite:
|
|
6
|
-
postgres:
|
|
7
|
-
mysql:
|
|
6
|
+
sqlite: Functions.last_insert_rowid(),
|
|
7
|
+
postgres: Functions.lastval(),
|
|
8
|
+
mysql: Functions.last_insert_id()
|
|
8
9
|
}).mapWith(Number);
|
|
9
10
|
function lastInsertId() {
|
|
10
11
|
return insertId;
|
|
11
12
|
}
|
|
12
13
|
function concat(...slices) {
|
|
13
|
-
return
|
|
14
|
+
return sql.universal({
|
|
15
|
+
mysql: Functions.concat(...slices),
|
|
16
|
+
default: sql.join(slices.map(input), sql` || `)
|
|
17
|
+
});
|
|
14
18
|
}
|
|
15
19
|
export {
|
|
16
20
|
concat,
|