@powersync/service-sync-rules 0.32.0 → 0.34.0
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/BaseSqlDataQuery.js +2 -1
- package/dist/BaseSqlDataQuery.js.map +1 -1
- package/dist/BucketDescription.d.ts +20 -1
- package/dist/BucketDescription.js +12 -0
- package/dist/BucketDescription.js.map +1 -1
- package/dist/BucketParameterQuerier.d.ts +5 -0
- package/dist/BucketParameterQuerier.js +15 -3
- package/dist/BucketParameterQuerier.js.map +1 -1
- package/dist/BucketSource.d.ts +1 -1
- package/dist/BucketSource.js +5 -4
- package/dist/BucketSource.js.map +1 -1
- package/dist/HydrationState.d.ts +4 -0
- package/dist/HydrationState.js +4 -2
- package/dist/HydrationState.js.map +1 -1
- package/dist/SqlParameterQuery.js +8 -12
- package/dist/SqlParameterQuery.js.map +1 -1
- package/dist/StaticSqlParameterQuery.js +5 -12
- package/dist/StaticSqlParameterQuery.js.map +1 -1
- package/dist/TableValuedFunctionSqlParameterQuery.js +3 -10
- package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
- package/dist/cast.d.ts +9 -0
- package/dist/cast.js +131 -0
- package/dist/cast.js.map +1 -0
- package/dist/compiler/bucket_resolver.d.ts +2 -0
- package/dist/compiler/bucket_resolver.js +18 -1
- package/dist/compiler/bucket_resolver.js.map +1 -1
- package/dist/compiler/equality.d.ts +1 -1
- package/dist/compiler/equality.js.map +1 -1
- package/dist/compiler/parser.js +12 -2
- package/dist/compiler/parser.js.map +1 -1
- package/dist/compiler/querier_graph.js +5 -2
- package/dist/compiler/querier_graph.js.map +1 -1
- package/dist/compiler/sqlite.js +1 -1
- package/dist/compiler/sqlite.js.map +1 -1
- package/dist/compiler/table.js +4 -1
- package/dist/compiler/table.js.map +1 -1
- package/dist/from_yaml.js +54 -24
- package/dist/from_yaml.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/json_schema.js +9 -0
- package/dist/json_schema.js.map +1 -1
- package/dist/schema-generators/DartSchemaGenerator.d.ts +1 -0
- package/dist/schema-generators/DartSchemaGenerator.js +36 -2
- package/dist/schema-generators/DartSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/DotNetSchemaGenerator.d.ts +12 -1
- package/dist/schema-generators/DotNetSchemaGenerator.js +104 -3
- package/dist/schema-generators/DotNetSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/KotlinSchemaGenerator.d.ts +3 -0
- package/dist/schema-generators/KotlinSchemaGenerator.js +68 -5
- package/dist/schema-generators/KotlinSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/RoomSchemaGenerator.js +3 -19
- package/dist/schema-generators/RoomSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/SchemaGenerator.d.ts +7 -1
- package/dist/schema-generators/SchemaGenerator.js +35 -0
- package/dist/schema-generators/SchemaGenerator.js.map +1 -1
- package/dist/schema-generators/SwiftSchemaGenerator.d.ts +3 -0
- package/dist/schema-generators/SwiftSchemaGenerator.js +66 -2
- package/dist/schema-generators/SwiftSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/TsSchemaGenerator.d.ts +2 -0
- package/dist/schema-generators/TsSchemaGenerator.js +45 -8
- package/dist/schema-generators/TsSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/generators.d.ts +2 -1
- package/dist/schema-generators/generators.js +2 -1
- package/dist/schema-generators/generators.js.map +1 -1
- package/dist/sql_functions.d.ts +1 -5
- package/dist/sql_functions.js +31 -114
- package/dist/sql_functions.js.map +1 -1
- package/dist/streams/filter.d.ts +2 -4
- package/dist/streams/filter.js +2 -1
- package/dist/streams/filter.js.map +1 -1
- package/dist/streams/variant.js +4 -7
- package/dist/streams/variant.js.map +1 -1
- package/dist/sync_plan/engine/javascript.js +2 -2
- package/dist/sync_plan/engine/javascript.js.map +1 -1
- package/dist/sync_plan/evaluator/bucket_data_source.js +2 -1
- package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -1
- package/dist/sync_plan/evaluator/bucket_source.d.ts +1 -1
- package/dist/sync_plan/evaluator/bucket_source.js +31 -36
- package/dist/sync_plan/evaluator/bucket_source.js.map +1 -1
- package/dist/sync_plan/evaluator/index.d.ts +6 -0
- package/dist/sync_plan/evaluator/index.js +7 -0
- package/dist/sync_plan/evaluator/index.js.map +1 -1
- package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +6 -12
- package/dist/sync_plan/evaluator/parameter_evaluator.js +51 -54
- package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +4 -1
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -1
- package/dist/sync_plan/plan.d.ts +1 -1
- package/dist/sync_plan/schema_inference.d.ts +6 -2
- package/dist/sync_plan/schema_inference.js +104 -3
- package/dist/sync_plan/schema_inference.js.map +1 -1
- package/dist/sync_plan/serialize.d.ts +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +26 -4
- package/dist/utils.js +53 -17
- package/dist/utils.js.map +1 -1
- package/dist/yaml_scalar_map.d.ts +15 -0
- package/dist/yaml_scalar_map.js +126 -0
- package/dist/yaml_scalar_map.js.map +1 -0
- package/package.json +4 -2
- package/schema/sync_rules.json +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KotlinSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/KotlinSchemaGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KotlinSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/KotlinSchemaGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAgC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAExG,OAAO,EAAyB,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE3F,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IAC/C,GAAG,GAAG,QAAQ,CAAC;IACf,KAAK,GAAG,QAAQ,CAAC;IACjB,SAAS,GAAG,eAAe,CAAC;IAC5B,QAAQ,GAAG,WAAW,CAAC;IAEhC,QAAQ,CAAC,MAAkB,EAAE,MAAoB,EAAE,OAA+B;QAChF,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAElD,IAAI,OAAO,GAAG;;;CAGjB,CAAC;QAEE,MAAM,eAAe,GAAG;IACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;;CAE9F,CAAC;QAEE,MAAM,OAAO,GAAG,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnE,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,OAAO,IAAI;;;;CAIhB,CAAC;YACI,OAAO,GAAG,OAAO,KAAK,eAAe,KAAK,OAAO,EAAE,CAAC;QACtD,CAAC;QAED,OAAO,GAAG,OAAO,KAAK,eAAe,EAAE,CAAC;IAC1C,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,OAA2B,EAAE,OAA+B;QAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,cAAsB,CAAC;YAC3B,IAAI,IAAI,EAAE,CAAC;gBACT,cAAc,GAAG,WAAW,IAAI,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,cAAc,GAAG,WAAW,IAAI,GAAG,CAAC;YACtC,CAAC;YAED,IAAI,OAAO,EAAE,mBAAmB,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC3D,OAAO,GAAG,cAAc,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,cAAc,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO;cACG,IAAI;;EAEhB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;IAElB,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAwB;QAC7C,OAAO,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;IAC/D,CAAC;IAEO,6BAA6B,CAAC,MAAkB,EAAE,MAAoB;QAC5E,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,IAAI,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,aAAa,GAAG;;CAEzB,CAAC;YAEI,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAClD,IAAI,gBAAgB,GAAG,OAAO;qBAC3B,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACjF,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,IAAI,YAAoB,CAAC;gBACzB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,YAAY,GAAG,cAAc,CAAC;oBAC9B,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;wBACxC,YAAY,IAAI,YAAY,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;oBAC5G,CAAC;oBACD,YAAY,IAAI,KAAK,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,YAAY,CAAC;gBAC9B,CAAC;gBAED,aAAa,IAAI,SAAS,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,kCAAkC,MAAM,CAAC,IAAI,MAAM,YAAY,KAAK,CAAC;YAC7I,CAAC;YAED,aAAa,IAAI;CACtB,CAAC;YACI,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,EAAE,IAAI,EAAc;QACrC,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;YACtC,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,EAAE,IAAI,EAAc;QAC9C,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,EAAE,CAAC;YAChD,OAAO,kBAAkB,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SchemaGenerator } from './SchemaGenerator.js';
|
|
1
|
+
import { SchemaGenerator, toCamelCase } from './SchemaGenerator.js';
|
|
2
2
|
/**
|
|
3
3
|
* Generates a schema to use with the [Room library](https://docs.powersync.com/client-sdk-references/kotlin-multiplatform/libraries/room).
|
|
4
4
|
*/
|
|
@@ -16,7 +16,7 @@ import androidx.room.PrimaryKey
|
|
|
16
16
|
for (const table of tables) {
|
|
17
17
|
// @Entity(tableName = "todo_list_items") data class TodoListItems(
|
|
18
18
|
buffer += `\n@Entity(tableName = "${table.name}")\n`;
|
|
19
|
-
buffer += `data class ${
|
|
19
|
+
buffer += `data class ${toCamelCase(table.name, true)}(\n`;
|
|
20
20
|
// Id column
|
|
21
21
|
buffer += ' @PrimaryKey val id: String,\n';
|
|
22
22
|
for (const column of table.columns) {
|
|
@@ -27,27 +27,11 @@ import androidx.room.PrimaryKey
|
|
|
27
27
|
integer: 'Long'
|
|
28
28
|
}[sqliteType];
|
|
29
29
|
// @ColumnInfo(name = "author_id") val authorId: String,
|
|
30
|
-
buffer += ` @ColumnInfo("${column.name}") val ${
|
|
30
|
+
buffer += ` @ColumnInfo("${column.name}") val ${toCamelCase(column.name)}: ${kotlinType},\n`;
|
|
31
31
|
}
|
|
32
32
|
buffer += ')\n';
|
|
33
33
|
}
|
|
34
34
|
return buffer;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
function snakeCaseToKotlin(source, initialUpper) {
|
|
38
|
-
let result = '';
|
|
39
|
-
for (const chunk of source.split('_')) {
|
|
40
|
-
if (chunk.length == 0)
|
|
41
|
-
continue;
|
|
42
|
-
const firstCharUpper = result.length > 0 || initialUpper;
|
|
43
|
-
if (firstCharUpper) {
|
|
44
|
-
result += chunk.charAt(0).toUpperCase();
|
|
45
|
-
result += chunk.substring(1);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
result += chunk;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
37
|
//# sourceMappingURL=RoomSchemaGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoomSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/RoomSchemaGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"RoomSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/RoomSchemaGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAC7C,GAAG,GAAG,aAAa,CAAC;IACpB,KAAK,GAAG,6BAA6B,CAAC;IACtC,SAAS,GAAG,eAAe,CAAC;IAC5B,QAAQ,GAAG,aAAa,CAAC;IAElC,QAAQ,CAAC,MAAkB,EAAE,MAAoB;QAC/C,IAAI,MAAM,GAAG;;;CAGhB,CAAC;QACE,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,mEAAmE;YACnE,MAAM,IAAI,0BAA0B,KAAK,CAAC,IAAI,MAAM,CAAC;YACrD,MAAM,IAAI,cAAc,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YAE3D,YAAY;YACZ,MAAM,IAAI,iCAAiC,CAAC;YAE5C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC3C,MAAM,UAAU,GAAG;oBACjB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,MAAM;iBAChB,CAAC,UAAU,CAAC,CAAC;gBAEd,wDAAwD;gBACxD,MAAM,IAAI,kBAAkB,MAAM,CAAC,IAAI,UAAU,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,UAAU,KAAK,CAAC;YAChG,CAAC;YAED,MAAM,IAAI,KAAK,CAAC;QAClB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SyncConfig } from '../SyncConfig.js';
|
|
2
|
-
import { ColumnDefinition } from '../ExpressionType.js';
|
|
2
|
+
import { ColumnDefinition, ColumnType } from '../ExpressionType.js';
|
|
3
3
|
import { SourceSchema } from '../types.js';
|
|
4
4
|
export interface GenerateSchemaOptions {
|
|
5
5
|
includeTypeComments?: boolean;
|
|
@@ -9,6 +9,7 @@ export declare abstract class SchemaGenerator {
|
|
|
9
9
|
name: string;
|
|
10
10
|
columns: ColumnDefinition[];
|
|
11
11
|
}[];
|
|
12
|
+
protected getOptionalStreams(source: SyncConfig, schema: SourceSchema): OptionalStream[];
|
|
12
13
|
abstract readonly key: string;
|
|
13
14
|
abstract readonly label: string;
|
|
14
15
|
abstract readonly mediaType: string;
|
|
@@ -25,3 +26,8 @@ export declare abstract class SchemaGenerator {
|
|
|
25
26
|
* @returns The default SQL column type name for that type.
|
|
26
27
|
*/
|
|
27
28
|
export declare function sqlTypeName(def: ColumnDefinition): 'text' | 'real' | 'integer';
|
|
29
|
+
export interface OptionalStream {
|
|
30
|
+
name: string;
|
|
31
|
+
parameters: Record<string, ColumnType>;
|
|
32
|
+
}
|
|
33
|
+
export declare function toCamelCase(source: string, initialUpper?: boolean): string;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from '../ExpressionType.js';
|
|
2
|
+
import { PrecompiledSyncConfig } from '../sync_plan/evaluator/index.js';
|
|
3
|
+
import { SyncPlanSchemaAnalyzer } from '../sync_plan/schema_inference.js';
|
|
2
4
|
export class SchemaGenerator {
|
|
3
5
|
getAllTables(source, schema) {
|
|
4
6
|
let tables = {};
|
|
@@ -12,6 +14,23 @@ export class SchemaGenerator {
|
|
|
12
14
|
};
|
|
13
15
|
});
|
|
14
16
|
}
|
|
17
|
+
getOptionalStreams(source, schema) {
|
|
18
|
+
const streams = [];
|
|
19
|
+
if (source instanceof PrecompiledSyncConfig) {
|
|
20
|
+
const analyzer = new SyncPlanSchemaAnalyzer(source.defaultSchema, schema);
|
|
21
|
+
for (const { stream, queriers } of source.plan.streams) {
|
|
22
|
+
if (stream.isSubscribedByDefault) {
|
|
23
|
+
// Not an optional stream
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
streams.push({
|
|
27
|
+
name: stream.name,
|
|
28
|
+
parameters: analyzer.resolveReferencedParameters(queriers)
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return streams;
|
|
33
|
+
}
|
|
15
34
|
/**
|
|
16
35
|
* @param def The column definition to generate the type for.
|
|
17
36
|
* @returns The SDK column type for the given column definition.
|
|
@@ -39,4 +58,20 @@ export function sqlTypeName(def) {
|
|
|
39
58
|
return 'text';
|
|
40
59
|
}
|
|
41
60
|
}
|
|
61
|
+
export function toCamelCase(source, initialUpper = false) {
|
|
62
|
+
let result = '';
|
|
63
|
+
for (const chunk of source.split(/[_-]/)) {
|
|
64
|
+
if (chunk.length == 0)
|
|
65
|
+
continue;
|
|
66
|
+
const firstCharUpper = result.length > 0 || initialUpper;
|
|
67
|
+
if (firstCharUpper) {
|
|
68
|
+
result += chunk.charAt(0).toUpperCase();
|
|
69
|
+
result += chunk.substring(1);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
result += chunk;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
42
77
|
//# sourceMappingURL=SchemaGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SchemaGenerator.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SchemaGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,4 +9,7 @@ export declare class SwiftSchemaGenerator extends SchemaGenerator {
|
|
|
9
9
|
generate(source: SyncConfig, schema: SourceSchema, options?: GenerateSchemaOptions): string;
|
|
10
10
|
private generateTable;
|
|
11
11
|
private generateColumn;
|
|
12
|
+
private generateStreamHelper;
|
|
13
|
+
private swiftType;
|
|
14
|
+
private swiftJsonParamType;
|
|
12
15
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from '../ExpressionType.js';
|
|
2
|
+
import { SchemaGenerator, toCamelCase } from './SchemaGenerator.js';
|
|
2
3
|
export class SwiftSchemaGenerator extends SchemaGenerator {
|
|
3
4
|
key = 'swift';
|
|
4
5
|
label = 'Swift';
|
|
@@ -6,11 +7,14 @@ export class SwiftSchemaGenerator extends SchemaGenerator {
|
|
|
6
7
|
fileName = 'schema.swift';
|
|
7
8
|
generate(source, schema, options) {
|
|
8
9
|
const tables = super.getAllTables(source, schema);
|
|
10
|
+
const streamsHelper = this.generateStreamHelper(source, schema);
|
|
9
11
|
return `import PowerSync
|
|
10
12
|
|
|
11
13
|
let schema = Schema(
|
|
12
14
|
${tables.map((table) => this.generateTable(table.name, table.columns, options)).join(',\n ')}
|
|
13
|
-
)
|
|
15
|
+
)
|
|
16
|
+
${streamsHelper ?? ''}
|
|
17
|
+
`;
|
|
14
18
|
}
|
|
15
19
|
generateTable(name, columns, options) {
|
|
16
20
|
const generated = columns.map((c, i) => {
|
|
@@ -40,5 +44,65 @@ ${generated.join('\n')}
|
|
|
40
44
|
generateColumn(column) {
|
|
41
45
|
return `.${this.columnType(column)}("${column.name}")`;
|
|
42
46
|
}
|
|
47
|
+
generateStreamHelper(source, schema) {
|
|
48
|
+
const optionalSyncStreams = this.getOptionalStreams(source, schema);
|
|
49
|
+
if (optionalSyncStreams.length) {
|
|
50
|
+
let generatedCode = `
|
|
51
|
+
struct TypedSyncStreams {
|
|
52
|
+
private var db: PowerSyncDatabaseProtocol
|
|
53
|
+
init(_ db: PowerSyncDatabaseProtocol) {
|
|
54
|
+
self.db = db
|
|
55
|
+
}
|
|
56
|
+
`;
|
|
57
|
+
for (const stream of optionalSyncStreams) {
|
|
58
|
+
const entries = Object.entries(stream.parameters);
|
|
59
|
+
let swiftParameters = entries
|
|
60
|
+
.map(([parameter, type]) => `${toCamelCase(parameter)}: ${this.swiftType(type)}`)
|
|
61
|
+
.join(', ');
|
|
62
|
+
let parameterMap;
|
|
63
|
+
if (entries.length) {
|
|
64
|
+
parameterMap = '[\n';
|
|
65
|
+
for (const [parameter, type] of entries) {
|
|
66
|
+
parameterMap += ` "${parameter}": ${this.swiftJsonParamType(type)}(${toCamelCase(parameter)})\n`;
|
|
67
|
+
}
|
|
68
|
+
parameterMap += ' ]';
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
parameterMap = '[:]';
|
|
72
|
+
}
|
|
73
|
+
generatedCode += ` func ${toCamelCase(stream.name)}(${swiftParameters}) -> SyncStream {
|
|
74
|
+
return db.syncStream(name: "${stream.name}", params: ${parameterMap})
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
}
|
|
78
|
+
generatedCode += `}`;
|
|
79
|
+
return generatedCode;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
swiftType({ type }) {
|
|
83
|
+
if (type.typeFlags & TYPE_TEXT) {
|
|
84
|
+
return 'String';
|
|
85
|
+
}
|
|
86
|
+
else if (type.typeFlags & TYPE_REAL) {
|
|
87
|
+
return 'Double';
|
|
88
|
+
}
|
|
89
|
+
else if (type.typeFlags & TYPE_INTEGER) {
|
|
90
|
+
return 'Int';
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return 'String';
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
swiftJsonParamType({ type }) {
|
|
97
|
+
if (type.typeFlags & TYPE_INTEGER) {
|
|
98
|
+
return 'JsonValue.int';
|
|
99
|
+
}
|
|
100
|
+
else if (type.typeFlags & TYPE_REAL) {
|
|
101
|
+
return 'JsonValue.double';
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return 'JsonValue.string';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
43
107
|
}
|
|
44
108
|
//# sourceMappingURL=SwiftSchemaGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwiftSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SwiftSchemaGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SwiftSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SwiftSchemaGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGxG,OAAO,EAAyB,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE3F,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IAC9C,GAAG,GAAG,OAAO,CAAC;IACd,KAAK,GAAG,OAAO,CAAC;IAChB,SAAS,GAAG,cAAc,CAAC;IAC3B,QAAQ,GAAG,cAAc,CAAC;IAEnC,QAAQ,CAAC,MAAkB,EAAE,MAAoB,EAAE,OAA+B;QAChF,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEhE,OAAO;;;IAGP,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;;EAE7F,aAAa,IAAI,EAAE;CACpB,CAAC;IACA,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,OAA2B,EAAE,OAA+B;QAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,cAAsB,CAAC;YAC3B,IAAI,IAAI,EAAE,CAAC;gBACT,cAAc,GAAG,WAAW,IAAI,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,cAAc,GAAG,WAAW,IAAI,GAAG,CAAC;YACtC,CAAC;YAED,IAAI,OAAO,EAAE,mBAAmB,IAAI,CAAC,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;gBAC3D,OAAO,GAAG,cAAc,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,cAAc,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO;aACE,IAAI;;EAEf,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;IAElB,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAwB;QAC7C,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;IAEO,oBAAoB,CAAC,MAAkB,EAAE,MAAoB;QACnE,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,IAAI,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,aAAa,GAAG;;;;;;CAMzB,CAAC;YAEI,KAAK,MAAM,MAAM,IAAI,mBAAmB,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAClD,IAAI,eAAe,GAAG,OAAO;qBAC1B,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;qBAChF,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,IAAI,YAAoB,CAAC;gBACzB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,YAAY,GAAG,KAAK,CAAC;oBACrB,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;wBACxC,YAAY,IAAI,gBAAgB,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;oBAC9G,CAAC;oBACD,YAAY,IAAI,WAAW,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC;gBAED,aAAa,IAAI,YAAY,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,eAAe;sCAC1C,MAAM,CAAC,IAAI,cAAc,YAAY;;CAE1E,CAAC;YACI,CAAC;YAED,aAAa,IAAI,GAAG,CAAC;YACrB,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,EAAE,IAAI,EAAc;QACpC,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;YACtC,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,EAAE,IAAI,EAAc;QAC7C,IAAI,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;YAClC,OAAO,eAAe,CAAC;QACzB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;YACtC,OAAO,kBAAkB,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from '../ExpressionType.js';
|
|
2
|
-
import { SchemaGenerator } from './SchemaGenerator.js';
|
|
2
|
+
import { SchemaGenerator, toCamelCase } from './SchemaGenerator.js';
|
|
3
3
|
export var TsSchemaLanguage;
|
|
4
4
|
(function (TsSchemaLanguage) {
|
|
5
5
|
TsSchemaLanguage["ts"] = "ts";
|
|
@@ -40,7 +40,8 @@ export class TsSchemaGenerator extends SchemaGenerator {
|
|
|
40
40
|
}
|
|
41
41
|
generate(source, schema, options) {
|
|
42
42
|
const tables = super.getAllTables(source, schema);
|
|
43
|
-
|
|
43
|
+
const streamsHelper = this.generateStreamHelper(source, schema);
|
|
44
|
+
return `${this.generateImports(streamsHelper != null)}
|
|
44
45
|
|
|
45
46
|
${tables.map((table) => this.generateTable(table.name, table.columns, options)).join('\n\n')}
|
|
46
47
|
|
|
@@ -48,7 +49,8 @@ export const AppSchema = new Schema({
|
|
|
48
49
|
${tables.map((table) => table.name).join(',\n ')}
|
|
49
50
|
});
|
|
50
51
|
|
|
51
|
-
${this.generateTypeExports()}
|
|
52
|
+
${this.generateTypeExports()}
|
|
53
|
+
${streamsHelper ?? ''}`;
|
|
52
54
|
}
|
|
53
55
|
generateTypeExports() {
|
|
54
56
|
if (this.language == TsSchemaLanguage.ts) {
|
|
@@ -58,17 +60,22 @@ ${this.generateTypeExports()}`;
|
|
|
58
60
|
return ``;
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
|
-
generateImports() {
|
|
63
|
+
generateImports(includeSyncStreams) {
|
|
62
64
|
const importStyle = this.options.imports ?? 'auto';
|
|
65
|
+
const importedNames = ['column', 'Schema', 'Table'];
|
|
66
|
+
if (includeSyncStreams) {
|
|
67
|
+
importedNames.push(...['PowerSyncDatabase', 'SyncStream']);
|
|
68
|
+
}
|
|
69
|
+
const importStart = `import { ${importedNames.join(', ')} } from`;
|
|
63
70
|
if (importStyle == TsSchemaImports.web) {
|
|
64
|
-
return
|
|
71
|
+
return `${importStart} '@powersync/web';`;
|
|
65
72
|
}
|
|
66
73
|
else if (importStyle == TsSchemaImports.reactNative) {
|
|
67
|
-
return
|
|
74
|
+
return `${importStart} '@powersync/react-native';`;
|
|
68
75
|
}
|
|
69
76
|
else {
|
|
70
|
-
return
|
|
71
|
-
// OR:
|
|
77
|
+
return `${importStart} '@powersync/web';
|
|
78
|
+
// OR: ${importStart} '@powersync/react-native';`;
|
|
72
79
|
}
|
|
73
80
|
}
|
|
74
81
|
generateTable(name, columns, options) {
|
|
@@ -97,6 +104,28 @@ ${generated.join('\n')}
|
|
|
97
104
|
{ indexes: {} }
|
|
98
105
|
);`;
|
|
99
106
|
}
|
|
107
|
+
generateStreamHelper(source, schema) {
|
|
108
|
+
const optionalSyncStreams = this.getOptionalStreams(source, schema);
|
|
109
|
+
if (optionalSyncStreams.length) {
|
|
110
|
+
let generatedCode = `export function typedStreams(db: PowerSyncDatabase) {
|
|
111
|
+
return {
|
|
112
|
+
`;
|
|
113
|
+
const methods = optionalSyncStreams.map((stream) => {
|
|
114
|
+
const allParams = Object.entries(stream.parameters);
|
|
115
|
+
let args = '';
|
|
116
|
+
if (allParams.length) {
|
|
117
|
+
const paramsType = allParams.map(([name, type]) => `${name}: ${this.valueType(type)}`).join(', ');
|
|
118
|
+
args += `params: { ${paramsType} }`;
|
|
119
|
+
}
|
|
120
|
+
return ` ${toCamelCase(stream.name)}(${args}): SyncStream {
|
|
121
|
+
return db.syncStream('${stream.name}', ${allParams.length ? 'params' : '{}'});
|
|
122
|
+
}`;
|
|
123
|
+
});
|
|
124
|
+
generatedCode += methods.join(',\n');
|
|
125
|
+
generatedCode += `\n };\n}\n`;
|
|
126
|
+
return generatedCode;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
100
129
|
generateColumn(column) {
|
|
101
130
|
const t = column.type;
|
|
102
131
|
if (t.typeFlags & TYPE_TEXT) {
|
|
@@ -112,5 +141,13 @@ ${generated.join('\n')}
|
|
|
112
141
|
return `${column.name}: column.text`;
|
|
113
142
|
}
|
|
114
143
|
}
|
|
144
|
+
valueType({ type }) {
|
|
145
|
+
if (type.typeFlags & (TYPE_INTEGER | TYPE_REAL)) {
|
|
146
|
+
return 'number';
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
return 'string';
|
|
150
|
+
}
|
|
151
|
+
}
|
|
115
152
|
}
|
|
116
153
|
//# sourceMappingURL=TsSchemaGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TsSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/TsSchemaGenerator.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"TsSchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/TsSchemaGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DartSchemaGenerator } from './DartSchemaGenerator.js';
|
|
2
|
-
import { DotNetSchemaGenerator } from './DotNetSchemaGenerator.js';
|
|
2
|
+
import { DotNetSchemaGenerator, DotNetClassSchemaGenerator } from './DotNetSchemaGenerator.js';
|
|
3
3
|
import { JsLegacySchemaGenerator } from './JsLegacySchemaGenerator.js';
|
|
4
4
|
import { KotlinSchemaGenerator } from './KotlinSchemaGenerator.js';
|
|
5
5
|
import { SwiftSchemaGenerator } from './SwiftSchemaGenerator.js';
|
|
@@ -7,6 +7,7 @@ import { TsSchemaGenerator } from './TsSchemaGenerator.js';
|
|
|
7
7
|
export declare const schemaGenerators: {
|
|
8
8
|
dart: DartSchemaGenerator;
|
|
9
9
|
dotNet: DotNetSchemaGenerator;
|
|
10
|
+
dotNetClass: DotNetClassSchemaGenerator;
|
|
10
11
|
js: TsSchemaGenerator;
|
|
11
12
|
jsLegacy: JsLegacySchemaGenerator;
|
|
12
13
|
kotlin: KotlinSchemaGenerator;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DartSchemaGenerator } from './DartSchemaGenerator.js';
|
|
2
|
-
import { DotNetSchemaGenerator } from './DotNetSchemaGenerator.js';
|
|
2
|
+
import { DotNetSchemaGenerator, DotNetClassSchemaGenerator } from './DotNetSchemaGenerator.js';
|
|
3
3
|
import { JsLegacySchemaGenerator } from './JsLegacySchemaGenerator.js';
|
|
4
4
|
import { KotlinSchemaGenerator } from './KotlinSchemaGenerator.js';
|
|
5
5
|
import { SwiftSchemaGenerator } from './SwiftSchemaGenerator.js';
|
|
@@ -7,6 +7,7 @@ import { TsSchemaGenerator, TsSchemaLanguage } from './TsSchemaGenerator.js';
|
|
|
7
7
|
export const schemaGenerators = {
|
|
8
8
|
dart: new DartSchemaGenerator(),
|
|
9
9
|
dotNet: new DotNetSchemaGenerator(),
|
|
10
|
+
dotNetClass: new DotNetClassSchemaGenerator(),
|
|
10
11
|
js: new TsSchemaGenerator({ language: TsSchemaLanguage.js }),
|
|
11
12
|
jsLegacy: new JsLegacySchemaGenerator(),
|
|
12
13
|
kotlin: new KotlinSchemaGenerator(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/schema-generators/generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/schema-generators/generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE7E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,IAAI,mBAAmB,EAAE;IAC/B,MAAM,EAAE,IAAI,qBAAqB,EAAE;IACnC,WAAW,EAAE,IAAI,0BAA0B,EAAE;IAC7C,EAAE,EAAE,IAAI,iBAAiB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC;IAC5D,QAAQ,EAAE,IAAI,uBAAuB,EAAE;IACvC,MAAM,EAAE,IAAI,qBAAqB,EAAE;IACnC,KAAK,EAAE,IAAI,oBAAoB,EAAE;IACjC,EAAE,EAAE,IAAI,iBAAiB,EAAE;CAC5B,CAAC"}
|
package/dist/sql_functions.d.ts
CHANGED
|
@@ -21,16 +21,12 @@ export interface DocumentedSqlFunction extends SqlFunction {
|
|
|
21
21
|
export declare function getOperatorFunction(op: string): SqlFunction;
|
|
22
22
|
export declare function generateSqlFunctions(compatibility: CompatibilityContext): {
|
|
23
23
|
named: Record<string, DocumentedSqlFunction>;
|
|
24
|
-
callable: Record<"
|
|
24
|
+
callable: Record<"upper" | "lower" | "substring" | "length" | "hex" | "base64" | "uuid_blob" | "typeof" | "ifnull" | "iif" | "instr" | "json_valid" | "json_keys" | "unixepoch" | "datetime" | "st_asgeojson" | "st_astext" | "st_x" | "st_y" | "json_extract" | "json_array_length", (...args: SqliteValue[]) => SqliteValue>;
|
|
25
25
|
jsonExtract: (sourceValue: SqliteValue, path: SqliteValue, operator: string) => import("./types.js").SqliteJsonValue;
|
|
26
26
|
jsonExtractFromRecord: (value: any, path: SqliteValue, operator: string) => import("./types.js").SqliteJsonValue;
|
|
27
27
|
operatorJsonExtractJson: SqlFunction;
|
|
28
28
|
operatorJsonExtractSql: SqlFunction;
|
|
29
29
|
};
|
|
30
|
-
export declare const CAST_TYPES: Set<String>;
|
|
31
|
-
export declare function castAsText(value: SqliteValue): string | null;
|
|
32
|
-
export declare function castAsBlob(value: SqliteValue): Uint8Array | null;
|
|
33
|
-
export declare function cast(value: SqliteValue, to: string): string | number | bigint | Uint8Array<ArrayBufferLike> | null;
|
|
34
30
|
export declare function sqliteTypeOf(arg: SqliteInputValue): SqliteValueType;
|
|
35
31
|
export declare function parseGeometry(value?: SqliteValue): wkx.Geometry | null;
|
|
36
32
|
export declare function evaluateOperator(op: string, a: SqliteValue, b: SqliteValue): SqliteValue;
|
package/dist/sql_functions.js
CHANGED
|
@@ -9,6 +9,7 @@ import { ExpressionType, TYPE_INTEGER } from './ExpressionType.js';
|
|
|
9
9
|
import * as uuid from 'uuid';
|
|
10
10
|
import { CustomSqliteValue } from './types/custom_sqlite_value.js';
|
|
11
11
|
import { CompatibilityOption } from './compatibility.js';
|
|
12
|
+
import { cast, CAST_TYPES, castAsBlob, castAsText } from './cast.js';
|
|
12
13
|
export const BASIC_OPERATORS = new Set([
|
|
13
14
|
'=',
|
|
14
15
|
'!=',
|
|
@@ -239,6 +240,35 @@ const iif = {
|
|
|
239
240
|
},
|
|
240
241
|
detail: 'If x is true then returns y else returns z'
|
|
241
242
|
};
|
|
243
|
+
// This matches the behavior of the instr function in SQLite.
|
|
244
|
+
// If both arguments are BLOBs, performs a byte-level search.
|
|
245
|
+
// Otherwise, both arguments are interpreted as text.
|
|
246
|
+
const instr = {
|
|
247
|
+
debugName: 'instr',
|
|
248
|
+
call(x, y) {
|
|
249
|
+
if (x == null || y == null) {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
// Both BLOBs: byte-level search
|
|
253
|
+
if (x instanceof Uint8Array && y instanceof Uint8Array) {
|
|
254
|
+
const pos = Buffer.from(x.buffer, x.byteOffset, x.byteLength).indexOf(y);
|
|
255
|
+
return BigInt(pos < 0 ? 0 : pos + 1);
|
|
256
|
+
}
|
|
257
|
+
// Neither BLOB, or mixed: cast both to text
|
|
258
|
+
const haystack = castAsText(x);
|
|
259
|
+
const needle = castAsText(y);
|
|
260
|
+
const pos = haystack.indexOf(needle);
|
|
261
|
+
return BigInt(pos < 0 ? 0 : pos + 1);
|
|
262
|
+
},
|
|
263
|
+
parameters: [
|
|
264
|
+
{ name: 'x', type: ExpressionType.ANY, optional: false },
|
|
265
|
+
{ name: 'y', type: ExpressionType.ANY, optional: false }
|
|
266
|
+
],
|
|
267
|
+
getReturnType() {
|
|
268
|
+
return ExpressionType.INTEGER;
|
|
269
|
+
},
|
|
270
|
+
detail: 'Returns 1-indexed position of y in x, or 0 if not found. If both are BLOBs, counts bytes; otherwise counts characters.'
|
|
271
|
+
};
|
|
242
272
|
const json_valid = {
|
|
243
273
|
debugName: 'json_valid',
|
|
244
274
|
call(json) {
|
|
@@ -466,6 +496,7 @@ export function generateSqlFunctions(compatibility) {
|
|
|
466
496
|
typeof: fn_typeof,
|
|
467
497
|
ifnull,
|
|
468
498
|
iif,
|
|
499
|
+
instr,
|
|
469
500
|
json_extract: json.json_extract,
|
|
470
501
|
json_array_length: json.json_array_length,
|
|
471
502
|
json_valid,
|
|
@@ -488,100 +519,6 @@ export function generateSqlFunctions(compatibility) {
|
|
|
488
519
|
operatorJsonExtractSql: json.OPERATOR_JSON_EXTRACT_SQL
|
|
489
520
|
};
|
|
490
521
|
}
|
|
491
|
-
export const CAST_TYPES = new Set(['text', 'numeric', 'integer', 'real', 'blob']);
|
|
492
|
-
const textEncoder = new TextEncoder();
|
|
493
|
-
const textDecoder = new TextDecoder();
|
|
494
|
-
export function castAsText(value) {
|
|
495
|
-
if (value == null) {
|
|
496
|
-
return null;
|
|
497
|
-
}
|
|
498
|
-
else if (value instanceof Uint8Array) {
|
|
499
|
-
return textDecoder.decode(value);
|
|
500
|
-
}
|
|
501
|
-
else {
|
|
502
|
-
return value.toString();
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
export function castAsBlob(value) {
|
|
506
|
-
if (value == null) {
|
|
507
|
-
return null;
|
|
508
|
-
}
|
|
509
|
-
else if (value instanceof Uint8Array) {
|
|
510
|
-
return value;
|
|
511
|
-
}
|
|
512
|
-
if (typeof value != 'string') {
|
|
513
|
-
value = value.toString();
|
|
514
|
-
}
|
|
515
|
-
return textEncoder.encode(value);
|
|
516
|
-
}
|
|
517
|
-
export function cast(value, to) {
|
|
518
|
-
if (value == null) {
|
|
519
|
-
return null;
|
|
520
|
-
}
|
|
521
|
-
if (to == 'text') {
|
|
522
|
-
return castAsText(value);
|
|
523
|
-
}
|
|
524
|
-
else if (to == 'numeric') {
|
|
525
|
-
if (value instanceof Uint8Array) {
|
|
526
|
-
value = textDecoder.decode(value);
|
|
527
|
-
}
|
|
528
|
-
if (typeof value == 'string') {
|
|
529
|
-
return parseNumeric(value);
|
|
530
|
-
}
|
|
531
|
-
else if (typeof value == 'number' || typeof value == 'bigint') {
|
|
532
|
-
return value;
|
|
533
|
-
}
|
|
534
|
-
else {
|
|
535
|
-
return 0n;
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
else if (to == 'real') {
|
|
539
|
-
if (value instanceof Uint8Array) {
|
|
540
|
-
value = textDecoder.decode(value);
|
|
541
|
-
}
|
|
542
|
-
if (typeof value == 'string') {
|
|
543
|
-
const nr = parseFloat(value);
|
|
544
|
-
if (isNaN(nr)) {
|
|
545
|
-
return 0.0;
|
|
546
|
-
}
|
|
547
|
-
else {
|
|
548
|
-
return nr;
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
else if (typeof value == 'number') {
|
|
552
|
-
return value;
|
|
553
|
-
}
|
|
554
|
-
else if (typeof value == 'bigint') {
|
|
555
|
-
return Number(value);
|
|
556
|
-
}
|
|
557
|
-
else {
|
|
558
|
-
return 0.0;
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
else if (to == 'integer') {
|
|
562
|
-
if (value instanceof Uint8Array) {
|
|
563
|
-
value = textDecoder.decode(value);
|
|
564
|
-
}
|
|
565
|
-
if (typeof value == 'string') {
|
|
566
|
-
return parseBigInt(value);
|
|
567
|
-
}
|
|
568
|
-
else if (typeof value == 'number') {
|
|
569
|
-
return Number.isInteger(value) ? BigInt(value) : BigInt(Math.floor(value));
|
|
570
|
-
}
|
|
571
|
-
else if (typeof value == 'bigint') {
|
|
572
|
-
return value;
|
|
573
|
-
}
|
|
574
|
-
else {
|
|
575
|
-
return 0n;
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
else if (to == 'blob') {
|
|
579
|
-
return castAsBlob(value);
|
|
580
|
-
}
|
|
581
|
-
else {
|
|
582
|
-
throw new Error(`Type not supported for cast: '${to}'`);
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
522
|
export function sqliteTypeOf(arg) {
|
|
586
523
|
if (arg == null) {
|
|
587
524
|
return 'null';
|
|
@@ -623,26 +560,6 @@ export function parseGeometry(value) {
|
|
|
623
560
|
const geo = wkx.Geometry.parse(blob);
|
|
624
561
|
return geo;
|
|
625
562
|
}
|
|
626
|
-
function parseNumeric(text) {
|
|
627
|
-
const match = /^\s*(\d+)(\.\d*)?(e[+\-]?\d+)?/i.exec(text);
|
|
628
|
-
if (!match) {
|
|
629
|
-
return 0n;
|
|
630
|
-
}
|
|
631
|
-
if (match[2] != null || match[3] != null) {
|
|
632
|
-
const v = parseFloat(match[0]);
|
|
633
|
-
return isNaN(v) ? 0n : v;
|
|
634
|
-
}
|
|
635
|
-
else {
|
|
636
|
-
return BigInt(match[1]);
|
|
637
|
-
}
|
|
638
|
-
}
|
|
639
|
-
function parseBigInt(text) {
|
|
640
|
-
const match = /^\s*(\d+)/.exec(text);
|
|
641
|
-
if (!match) {
|
|
642
|
-
return 0n;
|
|
643
|
-
}
|
|
644
|
-
return BigInt(match[1]);
|
|
645
|
-
}
|
|
646
563
|
function isNumeric(a) {
|
|
647
564
|
return typeof a == 'number' || typeof a == 'bigint';
|
|
648
565
|
}
|