@frictionless-ts/database 1.0.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/LICENSE.md +9 -0
- package/README.md +3 -0
- package/build/adapters/base.d.ts +20 -0
- package/build/adapters/base.js +66 -0
- package/build/adapters/create.d.ts +5 -0
- package/build/adapters/create.js +17 -0
- package/build/adapters/mysql.d.ts +10 -0
- package/build/adapters/mysql.js +90 -0
- package/build/adapters/mysql.spec.d.ts +1 -0
- package/build/adapters/mysql.spec.js +170 -0
- package/build/adapters/postgresql.d.ts +10 -0
- package/build/adapters/postgresql.js +100 -0
- package/build/adapters/postgresql.spec.d.ts +1 -0
- package/build/adapters/postgresql.spec.js +170 -0
- package/build/adapters/sqlite.bun.d.ts +2 -0
- package/build/adapters/sqlite.bun.js +7 -0
- package/build/adapters/sqlite.d.ts +11 -0
- package/build/adapters/sqlite.js +57 -0
- package/build/adapters/sqlite.node.d.ts +2 -0
- package/build/adapters/sqlite.node.js +43 -0
- package/build/adapters/sqlite.spec.d.ts +1 -0
- package/build/adapters/sqlite.spec.js +252 -0
- package/build/field/Field.d.ts +3 -0
- package/build/field/Field.js +2 -0
- package/build/field/Type.d.ts +2 -0
- package/build/field/Type.js +2 -0
- package/build/field/index.d.ts +2 -0
- package/build/field/index.js +2 -0
- package/build/index.d.ts +6 -0
- package/build/index.js +7 -0
- package/build/package/index.d.ts +2 -0
- package/build/package/index.js +3 -0
- package/build/package/load.d.ts +7 -0
- package/build/package/load.js +30 -0
- package/build/package/save.d.ts +10 -0
- package/build/package/save.js +28 -0
- package/build/plugin.d.ts +15 -0
- package/build/plugin.js +54 -0
- package/build/plugin.spec.d.ts +1 -0
- package/build/plugin.spec.js +328 -0
- package/build/resource/Format.d.ts +1 -0
- package/build/resource/Format.js +2 -0
- package/build/resource/index.d.ts +1 -0
- package/build/resource/index.js +2 -0
- package/build/schema/Schema.d.ts +4 -0
- package/build/schema/Schema.js +2 -0
- package/build/schema/index.d.ts +2 -0
- package/build/schema/index.js +2 -0
- package/build/schema/infer.d.ts +4 -0
- package/build/schema/infer.js +24 -0
- package/build/schema/infer.spec.d.ts +1 -0
- package/build/schema/infer.spec.js +25 -0
- package/build/table/index.d.ts +2 -0
- package/build/table/index.js +3 -0
- package/build/table/load.d.ts +6 -0
- package/build/table/load.js +29 -0
- package/build/table/load.spec.d.ts +1 -0
- package/build/table/load.spec.js +24 -0
- package/build/table/save.d.ts +4 -0
- package/build/table/save.js +57 -0
- package/build/table/save.spec.d.ts +1 -0
- package/build/table/save.spec.js +20 -0
- package/package.json +45 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright © `2025` `Evgeny Karev`
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# @frictionless-ts/database
|
|
2
|
+
|
|
3
|
+
frictionless-ts is a fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames. It supports various formats like CSV, JSON, and Parquet and integrates with data platforms such as CKAN, Zenodo, and GitHub. For more information, please read the [project's documentation](https://frictionlessdata.github.io/frictionless-ts/).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Field, FieldType, Schema } from "@frictionless-ts/metadata";
|
|
2
|
+
import type { Dialect } from "kysely";
|
|
3
|
+
import { Kysely } from "kysely";
|
|
4
|
+
import type { DatabaseField, DatabaseType } from "../field/index.ts";
|
|
5
|
+
import type { DatabaseSchema } from "../schema/index.ts";
|
|
6
|
+
export declare abstract class BaseAdapter {
|
|
7
|
+
abstract get nativeTypes(): FieldType[];
|
|
8
|
+
connectDatabase(path: string, options?: {
|
|
9
|
+
create?: boolean;
|
|
10
|
+
}): Promise<Kysely<any>>;
|
|
11
|
+
abstract createDialect(path: string, options?: {
|
|
12
|
+
create?: boolean;
|
|
13
|
+
}): Promise<Dialect>;
|
|
14
|
+
normalizeSchema(databaseSchema: DatabaseSchema): Schema;
|
|
15
|
+
normalizeField(databaseField: DatabaseField): Field;
|
|
16
|
+
abstract normalizeType(databaseType: DatabaseType): Field["type"];
|
|
17
|
+
denormalizeSchema(schema: Schema, tableName: string): DatabaseSchema;
|
|
18
|
+
denormalizeField(field: Field): DatabaseField;
|
|
19
|
+
abstract denormalizeType(fieldType: Field["type"]): DatabaseType;
|
|
20
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Kysely } from "kysely";
|
|
2
|
+
import { LRUCache } from "lru-cache";
|
|
3
|
+
// We cache database connections (only works in serverfull environments)
|
|
4
|
+
const databases = new LRUCache({
|
|
5
|
+
dispose: database => database.destroy(),
|
|
6
|
+
max: 10,
|
|
7
|
+
});
|
|
8
|
+
export class BaseAdapter {
|
|
9
|
+
async connectDatabase(path, options) {
|
|
10
|
+
const cachedDatabase = databases.get(path);
|
|
11
|
+
if (cachedDatabase) {
|
|
12
|
+
return cachedDatabase;
|
|
13
|
+
}
|
|
14
|
+
const dialect = await this.createDialect(path, options);
|
|
15
|
+
const database = new Kysely({ dialect });
|
|
16
|
+
databases.set(path, new Kysely({ dialect }));
|
|
17
|
+
return database;
|
|
18
|
+
}
|
|
19
|
+
normalizeSchema(databaseSchema) {
|
|
20
|
+
const schema = { fields: [] };
|
|
21
|
+
for (const databaseField of databaseSchema.columns) {
|
|
22
|
+
schema.fields.push(this.normalizeField(databaseField));
|
|
23
|
+
}
|
|
24
|
+
return schema;
|
|
25
|
+
}
|
|
26
|
+
normalizeField(databaseField) {
|
|
27
|
+
const field = {
|
|
28
|
+
name: databaseField.name,
|
|
29
|
+
type: this.normalizeType(databaseField.dataType),
|
|
30
|
+
};
|
|
31
|
+
if (!databaseField.isNullable) {
|
|
32
|
+
field.constraints ??= {};
|
|
33
|
+
field.constraints.required = true;
|
|
34
|
+
}
|
|
35
|
+
if (databaseField.comment) {
|
|
36
|
+
field.description = databaseField.comment;
|
|
37
|
+
}
|
|
38
|
+
return field;
|
|
39
|
+
}
|
|
40
|
+
denormalizeSchema(schema, tableName) {
|
|
41
|
+
const databaseSchema = {
|
|
42
|
+
name: tableName,
|
|
43
|
+
columns: [],
|
|
44
|
+
isView: false,
|
|
45
|
+
};
|
|
46
|
+
for (const field of schema.fields) {
|
|
47
|
+
databaseSchema.columns.push(this.denormalizeField(field));
|
|
48
|
+
}
|
|
49
|
+
if (schema.primaryKey) {
|
|
50
|
+
databaseSchema.primaryKey = schema.primaryKey;
|
|
51
|
+
}
|
|
52
|
+
return databaseSchema;
|
|
53
|
+
}
|
|
54
|
+
denormalizeField(field) {
|
|
55
|
+
const databaseField = {
|
|
56
|
+
name: field.name,
|
|
57
|
+
dataType: this.denormalizeType(field.type),
|
|
58
|
+
isNullable: !field.constraints?.required,
|
|
59
|
+
comment: field.description,
|
|
60
|
+
isAutoIncrementing: false,
|
|
61
|
+
hasDefaultValue: false,
|
|
62
|
+
};
|
|
63
|
+
return databaseField;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FkYXB0ZXJzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBSXBDLHdFQUF3RTtBQUN4RSxNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBc0I7SUFDbEQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUN2QyxHQUFHLEVBQUUsRUFBRTtDQUNSLENBQUMsQ0FBQTtBQUVGLE1BQU0sT0FBZ0IsV0FBVztJQUcvQixLQUFLLENBQUMsZUFBZSxDQUFDLElBQVksRUFBRSxPQUE4QjtRQUNoRSxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTyxjQUFjLENBQUE7UUFDdkIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzdDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBRWpELE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFPRCxlQUFlLENBQUMsY0FBOEI7UUFDNUMsTUFBTSxNQUFNLEdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUE7UUFFckMsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFRCxjQUFjLENBQUMsYUFBNEI7UUFDekMsTUFBTSxLQUFLLEdBQVU7WUFDbkIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7U0FDakQsQ0FBQTtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUE7WUFDeEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1FBQ25DLENBQUM7UUFFRCxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUE7UUFDM0MsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUlELGlCQUFpQixDQUFDLE1BQWMsRUFBRSxTQUFpQjtRQUNqRCxNQUFNLGNBQWMsR0FBbUI7WUFDckMsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsRUFBRTtZQUNYLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQTtRQUVELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN0QixjQUFjLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUE7UUFDL0MsQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFZO1FBQzNCLE1BQU0sYUFBYSxHQUFrQjtZQUNuQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUMxQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVE7WUFDeEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzFCLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQTtRQUVELE9BQU8sYUFBYSxDQUFBO0lBQ3RCLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGQsIEZpZWxkVHlwZSwgU2NoZW1hIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHR5cGUgeyBEaWFsZWN0IH0gZnJvbSBcImt5c2VseVwiXG5pbXBvcnQgeyBLeXNlbHkgfSBmcm9tIFwia3lzZWx5XCJcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcImxydS1jYWNoZVwiXG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlRmllbGQsIERhdGFiYXNlVHlwZSB9IGZyb20gXCIuLi9maWVsZC9pbmRleC50c1wiXG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlU2NoZW1hIH0gZnJvbSBcIi4uL3NjaGVtYS9pbmRleC50c1wiXG5cbi8vIFdlIGNhY2hlIGRhdGFiYXNlIGNvbm5lY3Rpb25zIChvbmx5IHdvcmtzIGluIHNlcnZlcmZ1bGwgZW52aXJvbm1lbnRzKVxuY29uc3QgZGF0YWJhc2VzID0gbmV3IExSVUNhY2hlPHN0cmluZywgS3lzZWx5PGFueT4+KHtcbiAgZGlzcG9zZTogZGF0YWJhc2UgPT4gZGF0YWJhc2UuZGVzdHJveSgpLFxuICBtYXg6IDEwLFxufSlcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBZGFwdGVyIHtcbiAgYWJzdHJhY3QgZ2V0IG5hdGl2ZVR5cGVzKCk6IEZpZWxkVHlwZVtdXG5cbiAgYXN5bmMgY29ubmVjdERhdGFiYXNlKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IHsgY3JlYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgY2FjaGVkRGF0YWJhc2UgPSBkYXRhYmFzZXMuZ2V0KHBhdGgpXG4gICAgaWYgKGNhY2hlZERhdGFiYXNlKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRGF0YWJhc2VcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsZWN0ID0gYXdhaXQgdGhpcy5jcmVhdGVEaWFsZWN0KHBhdGgsIG9wdGlvbnMpXG4gICAgY29uc3QgZGF0YWJhc2UgPSBuZXcgS3lzZWx5PGFueT4oeyBkaWFsZWN0IH0pXG4gICAgZGF0YWJhc2VzLnNldChwYXRoLCBuZXcgS3lzZWx5PGFueT4oeyBkaWFsZWN0IH0pKVxuXG4gICAgcmV0dXJuIGRhdGFiYXNlXG4gIH1cblxuICBhYnN0cmFjdCBjcmVhdGVEaWFsZWN0KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyBjcmVhdGU/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8RGlhbGVjdD5cblxuICBub3JtYWxpemVTY2hlbWEoZGF0YWJhc2VTY2hlbWE6IERhdGFiYXNlU2NoZW1hKSB7XG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7IGZpZWxkczogW10gfVxuXG4gICAgZm9yIChjb25zdCBkYXRhYmFzZUZpZWxkIG9mIGRhdGFiYXNlU2NoZW1hLmNvbHVtbnMpIHtcbiAgICAgIHNjaGVtYS5maWVsZHMucHVzaCh0aGlzLm5vcm1hbGl6ZUZpZWxkKGRhdGFiYXNlRmllbGQpKVxuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFcbiAgfVxuXG4gIG5vcm1hbGl6ZUZpZWxkKGRhdGFiYXNlRmllbGQ6IERhdGFiYXNlRmllbGQpIHtcbiAgICBjb25zdCBmaWVsZDogRmllbGQgPSB7XG4gICAgICBuYW1lOiBkYXRhYmFzZUZpZWxkLm5hbWUsXG4gICAgICB0eXBlOiB0aGlzLm5vcm1hbGl6ZVR5cGUoZGF0YWJhc2VGaWVsZC5kYXRhVHlwZSksXG4gICAgfVxuXG4gICAgaWYgKCFkYXRhYmFzZUZpZWxkLmlzTnVsbGFibGUpIHtcbiAgICAgIGZpZWxkLmNvbnN0cmFpbnRzID8/PSB7fVxuICAgICAgZmllbGQuY29uc3RyYWludHMucmVxdWlyZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKGRhdGFiYXNlRmllbGQuY29tbWVudCkge1xuICAgICAgZmllbGQuZGVzY3JpcHRpb24gPSBkYXRhYmFzZUZpZWxkLmNvbW1lbnRcbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGRcbiAgfVxuXG4gIGFic3RyYWN0IG5vcm1hbGl6ZVR5cGUoZGF0YWJhc2VUeXBlOiBEYXRhYmFzZVR5cGUpOiBGaWVsZFtcInR5cGVcIl1cblxuICBkZW5vcm1hbGl6ZVNjaGVtYShzY2hlbWE6IFNjaGVtYSwgdGFibGVOYW1lOiBzdHJpbmcpOiBEYXRhYmFzZVNjaGVtYSB7XG4gICAgY29uc3QgZGF0YWJhc2VTY2hlbWE6IERhdGFiYXNlU2NoZW1hID0ge1xuICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgY29sdW1uczogW10sXG4gICAgICBpc1ZpZXc6IGZhbHNlLFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZmllbGQgb2Ygc2NoZW1hLmZpZWxkcykge1xuICAgICAgZGF0YWJhc2VTY2hlbWEuY29sdW1ucy5wdXNoKHRoaXMuZGVub3JtYWxpemVGaWVsZChmaWVsZCkpXG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5wcmltYXJ5S2V5KSB7XG4gICAgICBkYXRhYmFzZVNjaGVtYS5wcmltYXJ5S2V5ID0gc2NoZW1hLnByaW1hcnlLZXlcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YWJhc2VTY2hlbWFcbiAgfVxuXG4gIGRlbm9ybWFsaXplRmllbGQoZmllbGQ6IEZpZWxkKTogRGF0YWJhc2VGaWVsZCB7XG4gICAgY29uc3QgZGF0YWJhc2VGaWVsZDogRGF0YWJhc2VGaWVsZCA9IHtcbiAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICBkYXRhVHlwZTogdGhpcy5kZW5vcm1hbGl6ZVR5cGUoZmllbGQudHlwZSksXG4gICAgICBpc051bGxhYmxlOiAhZmllbGQuY29uc3RyYWludHM/LnJlcXVpcmVkLFxuICAgICAgY29tbWVudDogZmllbGQuZGVzY3JpcHRpb24sXG4gICAgICBpc0F1dG9JbmNyZW1lbnRpbmc6IGZhbHNlLFxuICAgICAgaGFzRGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YWJhc2VGaWVsZFxuICB9XG5cbiAgYWJzdHJhY3QgZGVub3JtYWxpemVUeXBlKGZpZWxkVHlwZTogRmllbGRbXCJ0eXBlXCJdKTogRGF0YWJhc2VUeXBlXG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DatabaseFormat } from "../resource/index.ts";
|
|
2
|
+
import { MysqlAdapter } from "./mysql.ts";
|
|
3
|
+
import { PostgresqlAdapter } from "./postgresql.ts";
|
|
4
|
+
import { SqliteAdapter } from "./sqlite.ts";
|
|
5
|
+
export declare function createAdapter(format: DatabaseFormat): PostgresqlAdapter | MysqlAdapter | SqliteAdapter;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MysqlAdapter } from "./mysql.js";
|
|
2
|
+
import { PostgresqlAdapter } from "./postgresql.js";
|
|
3
|
+
import { SqliteAdapter } from "./sqlite.js";
|
|
4
|
+
// TODO: Enable SQLite support
|
|
5
|
+
export function createAdapter(format) {
|
|
6
|
+
switch (format) {
|
|
7
|
+
case "postgresql":
|
|
8
|
+
return new PostgresqlAdapter();
|
|
9
|
+
case "mysql":
|
|
10
|
+
return new MysqlAdapter();
|
|
11
|
+
case "sqlite":
|
|
12
|
+
return new SqliteAdapter();
|
|
13
|
+
default:
|
|
14
|
+
throw new Error(`Unsupported database format: "${format}"`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vYWRhcHRlcnMvY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyw4QkFBOEI7QUFFOUIsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFzQjtJQUNsRCxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxZQUFZO1lBQ2YsT0FBTyxJQUFJLGlCQUFpQixFQUFFLENBQUE7UUFDaEMsS0FBSyxPQUFPO1lBQ1YsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzNCLEtBQUssUUFBUTtZQUNYLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQTtRQUM1QjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDL0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFiYXNlRm9ybWF0IH0gZnJvbSBcIi4uL3Jlc291cmNlL2luZGV4LnRzXCJcbmltcG9ydCB7IE15c3FsQWRhcHRlciB9IGZyb20gXCIuL215c3FsLnRzXCJcbmltcG9ydCB7IFBvc3RncmVzcWxBZGFwdGVyIH0gZnJvbSBcIi4vcG9zdGdyZXNxbC50c1wiXG5pbXBvcnQgeyBTcWxpdGVBZGFwdGVyIH0gZnJvbSBcIi4vc3FsaXRlLnRzXCJcblxuLy8gVE9ETzogRW5hYmxlIFNRTGl0ZSBzdXBwb3J0XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGVyKGZvcm1hdDogRGF0YWJhc2VGb3JtYXQpIHtcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwicG9zdGdyZXNxbFwiOlxuICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc3FsQWRhcHRlcigpXG4gICAgY2FzZSBcIm15c3FsXCI6XG4gICAgICByZXR1cm4gbmV3IE15c3FsQWRhcHRlcigpXG4gICAgY2FzZSBcInNxbGl0ZVwiOlxuICAgICAgcmV0dXJuIG5ldyBTcWxpdGVBZGFwdGVyKClcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBkYXRhYmFzZSBmb3JtYXQ6IFwiJHtmb3JtYXR9XCJgKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FieldType } from "@frictionless-ts/metadata";
|
|
2
|
+
import { MysqlDialect } from "kysely";
|
|
3
|
+
import type { DatabaseType } from "../field/index.ts";
|
|
4
|
+
import { BaseAdapter } from "./base.ts";
|
|
5
|
+
export declare class MysqlAdapter extends BaseAdapter {
|
|
6
|
+
nativeTypes: ("string" | "number" | "boolean" | "integer" | "datetime" | "year")[];
|
|
7
|
+
createDialect(path: string): Promise<MysqlDialect>;
|
|
8
|
+
normalizeType(databaseType: DatabaseType): FieldType;
|
|
9
|
+
denormalizeType(fieldType: FieldType): DatabaseType;
|
|
10
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { MysqlDialect } from "kysely";
|
|
2
|
+
import { createPool } from "mysql2";
|
|
3
|
+
import { BaseAdapter } from "./base.js";
|
|
4
|
+
// TODO: Support more native types
|
|
5
|
+
export class MysqlAdapter extends BaseAdapter {
|
|
6
|
+
nativeTypes = [
|
|
7
|
+
"boolean",
|
|
8
|
+
"datetime",
|
|
9
|
+
"integer",
|
|
10
|
+
"number",
|
|
11
|
+
"string",
|
|
12
|
+
"year",
|
|
13
|
+
];
|
|
14
|
+
async createDialect(path) {
|
|
15
|
+
return new MysqlDialect({
|
|
16
|
+
pool: createPool({ uri: path }),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
normalizeType(databaseType) {
|
|
20
|
+
switch (databaseType.toLowerCase()) {
|
|
21
|
+
case "tinyint":
|
|
22
|
+
case "smallint":
|
|
23
|
+
case "mediumint":
|
|
24
|
+
case "int":
|
|
25
|
+
case "integer":
|
|
26
|
+
case "bigint":
|
|
27
|
+
return "integer";
|
|
28
|
+
case "decimal":
|
|
29
|
+
case "numeric":
|
|
30
|
+
case "float":
|
|
31
|
+
case "double":
|
|
32
|
+
case "real":
|
|
33
|
+
return "number";
|
|
34
|
+
case "bit":
|
|
35
|
+
case "bool":
|
|
36
|
+
case "boolean":
|
|
37
|
+
return "boolean";
|
|
38
|
+
case "char":
|
|
39
|
+
case "varchar":
|
|
40
|
+
case "tinytext":
|
|
41
|
+
case "text":
|
|
42
|
+
case "mediumtext":
|
|
43
|
+
case "longtext":
|
|
44
|
+
case "enum":
|
|
45
|
+
case "set":
|
|
46
|
+
return "string";
|
|
47
|
+
case "date":
|
|
48
|
+
return "date";
|
|
49
|
+
case "time":
|
|
50
|
+
return "time";
|
|
51
|
+
case "datetime":
|
|
52
|
+
case "timestamp":
|
|
53
|
+
return "datetime";
|
|
54
|
+
case "year":
|
|
55
|
+
return "year";
|
|
56
|
+
case "json":
|
|
57
|
+
return "object";
|
|
58
|
+
case "geometry":
|
|
59
|
+
case "point":
|
|
60
|
+
case "linestring":
|
|
61
|
+
case "polygon":
|
|
62
|
+
case "multipoint":
|
|
63
|
+
case "multilinestring":
|
|
64
|
+
case "multipolygon":
|
|
65
|
+
case "geometrycollection":
|
|
66
|
+
return "geojson";
|
|
67
|
+
default:
|
|
68
|
+
return "string";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
denormalizeType(fieldType) {
|
|
72
|
+
switch (fieldType) {
|
|
73
|
+
case "boolean":
|
|
74
|
+
return "boolean";
|
|
75
|
+
case "datetime":
|
|
76
|
+
return "datetime";
|
|
77
|
+
case "integer":
|
|
78
|
+
return "integer";
|
|
79
|
+
case "number":
|
|
80
|
+
return "double precision";
|
|
81
|
+
case "string":
|
|
82
|
+
return "text";
|
|
83
|
+
case "year":
|
|
84
|
+
return "integer";
|
|
85
|
+
default:
|
|
86
|
+
return "text";
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9hZGFwdGVycy9teXNxbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV2QyxrQ0FBa0M7QUFFbEMsTUFBTSxPQUFPLFlBQWEsU0FBUSxXQUFXO0lBQzNDLFdBQVcsR0FBRztRQUNaLFNBQVM7UUFDVCxVQUFVO1FBQ1YsU0FBUztRQUNULFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtLQUNlLENBQUE7SUFFdkIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZO1FBQzlCLE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDdEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNoQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLFlBQTBCO1FBQ3RDLFFBQVEsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDbkMsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxRQUFRO2dCQUNYLE9BQU8sU0FBUyxDQUFBO1lBQ2xCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxNQUFNO2dCQUNULE9BQU8sUUFBUSxDQUFBO1lBQ2pCLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxRQUFRLENBQUE7WUFDakIsS0FBSyxNQUFNO2dCQUNULE9BQU8sTUFBTSxDQUFBO1lBQ2YsS0FBSyxNQUFNO2dCQUNULE9BQU8sTUFBTSxDQUFBO1lBQ2YsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sVUFBVSxDQUFBO1lBQ25CLEtBQUssTUFBTTtnQkFDVCxPQUFPLE1BQU0sQ0FBQTtZQUNmLEtBQUssTUFBTTtnQkFDVCxPQUFPLFFBQVEsQ0FBQTtZQUNqQixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssWUFBWSxDQUFDO1lBQ2xCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxpQkFBaUIsQ0FBQztZQUN2QixLQUFLLGNBQWMsQ0FBQztZQUNwQixLQUFLLG9CQUFvQjtnQkFDdkIsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxRQUFRLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsU0FBb0I7UUFDbEMsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sVUFBVSxDQUFBO1lBQ25CLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxrQkFBa0IsQ0FBQTtZQUMzQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUE7WUFDZixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgTXlzcWxEaWFsZWN0IH0gZnJvbSBcImt5c2VseVwiXG5pbXBvcnQgeyBjcmVhdGVQb29sIH0gZnJvbSBcIm15c3FsMlwiXG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlVHlwZSB9IGZyb20gXCIuLi9maWVsZC9pbmRleC50c1wiXG5pbXBvcnQgeyBCYXNlQWRhcHRlciB9IGZyb20gXCIuL2Jhc2UudHNcIlxuXG4vLyBUT0RPOiBTdXBwb3J0IG1vcmUgbmF0aXZlIHR5cGVzXG5cbmV4cG9ydCBjbGFzcyBNeXNxbEFkYXB0ZXIgZXh0ZW5kcyBCYXNlQWRhcHRlciB7XG4gIG5hdGl2ZVR5cGVzID0gW1xuICAgIFwiYm9vbGVhblwiLFxuICAgIFwiZGF0ZXRpbWVcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcIm51bWJlclwiLFxuICAgIFwic3RyaW5nXCIsXG4gICAgXCJ5ZWFyXCIsXG4gIF0gc2F0aXNmaWVzIEZpZWxkVHlwZVtdXG5cbiAgYXN5bmMgY3JlYXRlRGlhbGVjdChwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IE15c3FsRGlhbGVjdCh7XG4gICAgICBwb29sOiBjcmVhdGVQb29sKHsgdXJpOiBwYXRoIH0pLFxuICAgIH0pXG4gIH1cblxuICBub3JtYWxpemVUeXBlKGRhdGFiYXNlVHlwZTogRGF0YWJhc2VUeXBlKTogRmllbGRUeXBlIHtcbiAgICBzd2l0Y2ggKGRhdGFiYXNlVHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlIFwidGlueWludFwiOlxuICAgICAgY2FzZSBcInNtYWxsaW50XCI6XG4gICAgICBjYXNlIFwibWVkaXVtaW50XCI6XG4gICAgICBjYXNlIFwiaW50XCI6XG4gICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICByZXR1cm4gXCJpbnRlZ2VyXCJcbiAgICAgIGNhc2UgXCJkZWNpbWFsXCI6XG4gICAgICBjYXNlIFwibnVtZXJpY1wiOlxuICAgICAgY2FzZSBcImZsb2F0XCI6XG4gICAgICBjYXNlIFwiZG91YmxlXCI6XG4gICAgICBjYXNlIFwicmVhbFwiOlxuICAgICAgICByZXR1cm4gXCJudW1iZXJcIlxuICAgICAgY2FzZSBcImJpdFwiOlxuICAgICAgY2FzZSBcImJvb2xcIjpcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIlxuICAgICAgY2FzZSBcImNoYXJcIjpcbiAgICAgIGNhc2UgXCJ2YXJjaGFyXCI6XG4gICAgICBjYXNlIFwidGlueXRleHRcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICBjYXNlIFwibWVkaXVtdGV4dFwiOlxuICAgICAgY2FzZSBcImxvbmd0ZXh0XCI6XG4gICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgY2FzZSBcInNldFwiOlxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIlxuICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiXG4gICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgICByZXR1cm4gXCJ0aW1lXCJcbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgY2FzZSBcInRpbWVzdGFtcFwiOlxuICAgICAgICByZXR1cm4gXCJkYXRldGltZVwiXG4gICAgICBjYXNlIFwieWVhclwiOlxuICAgICAgICByZXR1cm4gXCJ5ZWFyXCJcbiAgICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiXG4gICAgICBjYXNlIFwiZ2VvbWV0cnlcIjpcbiAgICAgIGNhc2UgXCJwb2ludFwiOlxuICAgICAgY2FzZSBcImxpbmVzdHJpbmdcIjpcbiAgICAgIGNhc2UgXCJwb2x5Z29uXCI6XG4gICAgICBjYXNlIFwibXVsdGlwb2ludFwiOlxuICAgICAgY2FzZSBcIm11bHRpbGluZXN0cmluZ1wiOlxuICAgICAgY2FzZSBcIm11bHRpcG9seWdvblwiOlxuICAgICAgY2FzZSBcImdlb21ldHJ5Y29sbGVjdGlvblwiOlxuICAgICAgICByZXR1cm4gXCJnZW9qc29uXCJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG5cbiAgZGVub3JtYWxpemVUeXBlKGZpZWxkVHlwZTogRmllbGRUeXBlKTogRGF0YWJhc2VUeXBlIHtcbiAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiXG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF0ZXRpbWVcIlxuICAgICAgY2FzZSBcImludGVnZXJcIjpcbiAgICAgICAgcmV0dXJuIFwiaW50ZWdlclwiXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiBcImRvdWJsZSBwcmVjaXNpb25cIlxuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gXCJ0ZXh0XCJcbiAgICAgIGNhc2UgXCJ5ZWFyXCI6XG4gICAgICAgIHJldHVybiBcImludGVnZXJcIlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwidGV4dFwiXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import * as pl from "nodejs-polars";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { useRecording } from "vitest-polly";
|
|
4
|
+
import { loadPackageFromDatabase } from "../package/index.js";
|
|
5
|
+
import { inferDatabaseSchema } from "../schema/index.js";
|
|
6
|
+
import { loadDatabaseTable, saveDatabaseTable } from "../table/index.js";
|
|
7
|
+
import { createAdapter } from "./create.js";
|
|
8
|
+
useRecording();
|
|
9
|
+
const path = process.env.DPKIT_MYSQL_URL;
|
|
10
|
+
// Vitest runs in-file tests sequentially so we can use the same table
|
|
11
|
+
const dialect = { table: "dpkit" };
|
|
12
|
+
const record1 = { id: 1, name: "english" };
|
|
13
|
+
const record2 = { id: 2, name: "中文" };
|
|
14
|
+
describe.skipIf(!path)("MysqlAdapter", () => {
|
|
15
|
+
if (!path)
|
|
16
|
+
return;
|
|
17
|
+
it("should infer schema", async () => {
|
|
18
|
+
const source = pl
|
|
19
|
+
.DataFrame([
|
|
20
|
+
pl.Series("string", ["string"], pl.Utf8),
|
|
21
|
+
pl.Series("integer", [1], pl.Int32),
|
|
22
|
+
pl.Series("number", [1.1], pl.Float64),
|
|
23
|
+
])
|
|
24
|
+
.lazy();
|
|
25
|
+
await saveDatabaseTable(source, {
|
|
26
|
+
path,
|
|
27
|
+
dialect,
|
|
28
|
+
format: "mysql",
|
|
29
|
+
overwrite: true,
|
|
30
|
+
});
|
|
31
|
+
const schema = await inferDatabaseSchema({
|
|
32
|
+
path,
|
|
33
|
+
dialect,
|
|
34
|
+
format: "mysql",
|
|
35
|
+
});
|
|
36
|
+
expect(schema).toEqual({
|
|
37
|
+
fields: [
|
|
38
|
+
{ name: "string", type: "string" },
|
|
39
|
+
{ name: "integer", type: "integer" },
|
|
40
|
+
{ name: "number", type: "number" },
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it("should save/load table", async () => {
|
|
45
|
+
const source = pl.DataFrame([record1, record2]).lazy();
|
|
46
|
+
await saveDatabaseTable(source, {
|
|
47
|
+
path,
|
|
48
|
+
dialect,
|
|
49
|
+
format: "mysql",
|
|
50
|
+
overwrite: true,
|
|
51
|
+
});
|
|
52
|
+
const target = await loadDatabaseTable({
|
|
53
|
+
path,
|
|
54
|
+
dialect,
|
|
55
|
+
format: "mysql",
|
|
56
|
+
});
|
|
57
|
+
expect((await target.collect()).toRecords()).toEqual([record1, record2]);
|
|
58
|
+
});
|
|
59
|
+
it("should save/load table with various data types", async () => {
|
|
60
|
+
const source = pl
|
|
61
|
+
.DataFrame([
|
|
62
|
+
pl.Series("array", ["[1, 2, 3]"], pl.String),
|
|
63
|
+
pl.Series("boolean", [true], pl.Bool),
|
|
64
|
+
pl.Series("date", [new Date(Date.UTC(2025, 0, 1))], pl.Date),
|
|
65
|
+
pl.Series("datetime", [new Date(Date.UTC(2025, 0, 1))], pl.Datetime),
|
|
66
|
+
pl.Series("duration", ["P23DT23H"], pl.String),
|
|
67
|
+
pl.Series("geojson", ['{"value": 1}'], pl.String),
|
|
68
|
+
pl.Series("geopoint", [[40.0, 50.0]], pl.List(pl.Float32)),
|
|
69
|
+
pl.Series("integer", [1], pl.Int32),
|
|
70
|
+
pl.Series("list", [[1.0, 2.0, 3.0]], pl.List(pl.Float32)),
|
|
71
|
+
pl.Series("number", [1.1], pl.Float64),
|
|
72
|
+
pl.Series("object", ['{"value": 1}']),
|
|
73
|
+
pl.Series("string", ["string"], pl.String),
|
|
74
|
+
pl.Series("time", [new Date(Date.UTC(2025, 0, 1))], pl.Time),
|
|
75
|
+
pl.Series("year", [2025], pl.Int32),
|
|
76
|
+
pl.Series("yearmonth", [[2025, 1]], pl.List(pl.Int16)),
|
|
77
|
+
])
|
|
78
|
+
.lazy();
|
|
79
|
+
await saveDatabaseTable(source, {
|
|
80
|
+
path,
|
|
81
|
+
dialect,
|
|
82
|
+
format: "mysql",
|
|
83
|
+
overwrite: true,
|
|
84
|
+
fieldTypes: {
|
|
85
|
+
geojson: "geojson",
|
|
86
|
+
geopoint: "geopoint",
|
|
87
|
+
list: "list",
|
|
88
|
+
object: "object",
|
|
89
|
+
// TODO: Remove time after:
|
|
90
|
+
// https://github.com/pola-rs/nodejs-polars/issues/364
|
|
91
|
+
time: "time",
|
|
92
|
+
year: "year",
|
|
93
|
+
yearmonth: "yearmonth",
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
const target = await loadDatabaseTable({ path, dialect, format: "mysql" }, { denormalized: true });
|
|
97
|
+
expect((await target.collect()).toRecords()).toEqual([
|
|
98
|
+
{
|
|
99
|
+
array: "[1, 2, 3]",
|
|
100
|
+
boolean: 1,
|
|
101
|
+
date: "2025-01-01",
|
|
102
|
+
datetime: new Date(Date.UTC(2025, 0, 1)),
|
|
103
|
+
duration: "P23DT23H",
|
|
104
|
+
geojson: '{"value": 1}',
|
|
105
|
+
geopoint: "40.0,50.0",
|
|
106
|
+
integer: 1,
|
|
107
|
+
list: "1.0,2.0,3.0",
|
|
108
|
+
number: 1.1,
|
|
109
|
+
object: '{"value": 1}',
|
|
110
|
+
string: "string",
|
|
111
|
+
time: "00:00:00",
|
|
112
|
+
year: 2025,
|
|
113
|
+
yearmonth: "2025-01",
|
|
114
|
+
},
|
|
115
|
+
]);
|
|
116
|
+
});
|
|
117
|
+
it("should load package from database", async () => {
|
|
118
|
+
const adapter = createAdapter("mysql");
|
|
119
|
+
const database = await adapter.connectDatabase(path);
|
|
120
|
+
await database.schema.dropTable("table1").ifExists().execute();
|
|
121
|
+
await database.schema
|
|
122
|
+
.createTable("table1")
|
|
123
|
+
.ifNotExists()
|
|
124
|
+
.addColumn("id", "integer", column => column.notNull())
|
|
125
|
+
.addColumn("name", "text")
|
|
126
|
+
.execute();
|
|
127
|
+
await database.schema.dropTable("table2").ifExists().execute();
|
|
128
|
+
await database.schema
|
|
129
|
+
.createTable("table2")
|
|
130
|
+
.ifNotExists()
|
|
131
|
+
.addColumn("id", "integer", column => column.notNull())
|
|
132
|
+
.addColumn("number", "numeric")
|
|
133
|
+
.addColumn("datetime", "datetime")
|
|
134
|
+
.execute();
|
|
135
|
+
const datapackage = await loadPackageFromDatabase(path, {
|
|
136
|
+
format: "mysql",
|
|
137
|
+
includeTables: ["table1", "table2"],
|
|
138
|
+
});
|
|
139
|
+
expect(datapackage).toEqual({
|
|
140
|
+
resources: [
|
|
141
|
+
{
|
|
142
|
+
path,
|
|
143
|
+
name: "table1",
|
|
144
|
+
format: "mysql",
|
|
145
|
+
dialect: { table: "table1" },
|
|
146
|
+
schema: {
|
|
147
|
+
fields: [
|
|
148
|
+
{ name: "id", type: "integer", constraints: { required: true } },
|
|
149
|
+
{ name: "name", type: "string" },
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
path,
|
|
155
|
+
name: "table2",
|
|
156
|
+
format: "mysql",
|
|
157
|
+
dialect: { table: "table2" },
|
|
158
|
+
schema: {
|
|
159
|
+
fields: [
|
|
160
|
+
{ name: "id", type: "integer", constraints: { required: true } },
|
|
161
|
+
{ name: "number", type: "number" },
|
|
162
|
+
{ name: "datetime", type: "datetime" },
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWwuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FkYXB0ZXJzL215c3FsLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUUzQyxZQUFZLEVBQUUsQ0FBQTtBQUVkLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFBO0FBRXhDLHNFQUFzRTtBQUN0RSxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUNsQyxNQUFNLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFBO0FBQzFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFFckMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDMUMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFNO0lBRWpCLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNuQyxNQUFNLE1BQU0sR0FBRyxFQUFFO2FBQ2QsU0FBUyxDQUFD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bCBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgdXNlUmVjb3JkaW5nIH0gZnJvbSBcInZpdGVzdC1wb2xseVwiXG5pbXBvcnQgeyBsb2FkUGFja2FnZUZyb21EYXRhYmFzZSB9IGZyb20gXCIuLi9wYWNrYWdlL2luZGV4LnRzXCJcbmltcG9ydCB7IGluZmVyRGF0YWJhc2VTY2hlbWEgfSBmcm9tIFwiLi4vc2NoZW1hL2luZGV4LnRzXCJcbmltcG9ydCB7IGxvYWREYXRhYmFzZVRhYmxlLCBzYXZlRGF0YWJhc2VUYWJsZSB9IGZyb20gXCIuLi90YWJsZS9pbmRleC50c1wiXG5pbXBvcnQgeyBjcmVhdGVBZGFwdGVyIH0gZnJvbSBcIi4vY3JlYXRlLnRzXCJcblxudXNlUmVjb3JkaW5nKClcblxuY29uc3QgcGF0aCA9IHByb2Nlc3MuZW52LkRQS0lUX01ZU1FMX1VSTFxuXG4vLyBWaXRlc3QgcnVucyBpbi1maWxlIHRlc3RzIHNlcXVlbnRpYWxseSBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIHRhYmxlXG5jb25zdCBkaWFsZWN0ID0geyB0YWJsZTogXCJkcGtpdFwiIH1cbmNvbnN0IHJlY29yZDEgPSB7IGlkOiAxLCBuYW1lOiBcImVuZ2xpc2hcIiB9XG5jb25zdCByZWNvcmQyID0geyBpZDogMiwgbmFtZTogXCLkuK3mlodcIiB9XG5cbmRlc2NyaWJlLnNraXBJZighcGF0aCkoXCJNeXNxbEFkYXB0ZXJcIiwgKCkgPT4ge1xuICBpZiAoIXBhdGgpIHJldHVyblxuXG4gIGl0KFwic2hvdWxkIGluZmVyIHNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGxcbiAgICAgIC5EYXRhRnJhbWUoW1xuICAgICAgICBwbC5TZXJpZXMoXCJzdHJpbmdcIiwgW1wic3RyaW5nXCJdLCBwbC5VdGY4KSxcbiAgICAgICAgcGwuU2VyaWVzKFwiaW50ZWdlclwiLCBbMV0sIHBsLkludDMyKSxcbiAgICAgICAgcGwuU2VyaWVzKFwibnVtYmVyXCIsIFsxLjFdLCBwbC5GbG9hdDY0KSxcbiAgICAgIF0pXG4gICAgICAubGF6eSgpXG5cbiAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcIm15c3FsXCIsXG4gICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IGluZmVyRGF0YWJhc2VTY2hlbWEoe1xuICAgICAgcGF0aCxcbiAgICAgIGRpYWxlY3QsXG4gICAgICBmb3JtYXQ6IFwibXlzcWxcIixcbiAgICB9KVxuXG4gICAgZXhwZWN0KHNjaGVtYSkudG9FcXVhbCh7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgeyBuYW1lOiBcInN0cmluZ1wiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIHsgbmFtZTogXCJpbnRlZ2VyXCIsIHR5cGU6IFwiaW50ZWdlclwiIH0sXG4gICAgICAgIHsgbmFtZTogXCJudW1iZXJcIiwgdHlwZTogXCJudW1iZXJcIiB9LFxuICAgICAgXSxcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUvbG9hZCB0YWJsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGwuRGF0YUZyYW1lKFtyZWNvcmQxLCByZWNvcmQyXSkubGF6eSgpXG5cbiAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcIm15c3FsXCIsXG4gICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgfSlcblxuICAgIGNvbnN0IHRhcmdldCA9IGF3YWl0IGxvYWREYXRhYmFzZVRhYmxlKHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcIm15c3FsXCIsXG4gICAgfSlcblxuICAgIGV4cGVjdCgoYXdhaXQgdGFyZ2V0LmNvbGxlY3QoKSkudG9SZWNvcmRzKCkpLnRvRXF1YWwoW3JlY29yZDEsIHJlY29yZDJdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHNhdmUvbG9hZCB0YWJsZSB3aXRoIHZhcmlvdXMgZGF0YSB0eXBlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGxcbiAgICAgIC5EYXRhRnJhbWUoW1xuICAgICAgICBwbC5TZXJpZXMoXCJhcnJheVwiLCBbXCJbMSwgMiwgM11cIl0sIHBsLlN0cmluZyksXG4gICAgICAgIHBsLlNlcmllcyhcImJvb2xlYW5cIiwgW3RydWVdLCBwbC5Cb29sKSxcbiAgICAgICAgcGwuU2VyaWVzKFwiZGF0ZVwiLCBbbmV3IERhdGUoRGF0ZS5VVEMoMjAyNSwgMCwgMSkpXSwgcGwuRGF0ZSksXG4gICAgICAgIHBsLlNlcmllcyhcImRhdGV0aW1lXCIsIFtuZXcgRGF0ZShEYXRlLlVUQygyMDI1LCAwLCAxKSldLCBwbC5EYXRldGltZSksXG4gICAgICAgIHBsLlNlcmllcyhcImR1cmF0aW9uXCIsIFtcIlAyM0RUMjNIXCJdLCBwbC5TdHJpbmcpLFxuICAgICAgICBwbC5TZXJpZXMoXCJnZW9qc29uXCIsIFsne1widmFsdWVcIjogMX0nXSwgcGwuU3RyaW5nKSxcbiAgICAgICAgcGwuU2VyaWVzKFwiZ2VvcG9pbnRcIiwgW1s0MC4wLCA1MC4wXV0sIHBsLkxpc3QocGwuRmxvYXQzMikpLFxuICAgICAgICBwbC5TZXJpZXMoXCJpbnRlZ2VyXCIsIFsxXSwgcGwuSW50MzIpLFxuICAgICAgICBwbC5TZXJpZXMoXCJsaXN0XCIsIFtbMS4wLCAyLjAsIDMuMF1dLCBwbC5MaXN0KHBsLkZsb2F0MzIpKSxcbiAgICAgICAgcGwuU2VyaWVzKFwibnVtYmVyXCIsIFsxLjFdLCBwbC5GbG9hdDY0KSxcbiAgICAgICAgcGwuU2VyaWVzKFwib2JqZWN0XCIsIFsne1widmFsdWVcIjogMX0nXSksXG4gICAgICAgIHBsLlNlcmllcyhcInN0cmluZ1wiLCBbXCJzdHJpbmdcIl0sIHBsLlN0cmluZyksXG4gICAgICAgIHBsLlNlcmllcyhcInRpbWVcIiwgW25ldyBEYXRlKERhdGUuVVRDKDIwMjUsIDAsIDEpKV0sIHBsLlRpbWUpLFxuICAgICAgICBwbC5TZXJpZXMoXCJ5ZWFyXCIsIFsyMDI1XSwgcGwuSW50MzIpLFxuICAgICAgICBwbC5TZXJpZXMoXCJ5ZWFybW9udGhcIiwgW1syMDI1LCAxXV0sIHBsLkxpc3QocGwuSW50MTYpKSxcbiAgICAgIF0pXG4gICAgICAubGF6eSgpXG5cbiAgICBhd2FpdCBzYXZlRGF0YWJhc2VUYWJsZShzb3VyY2UsIHtcbiAgICAgIHBhdGgsXG4gICAgICBkaWFsZWN0LFxuICAgICAgZm9ybWF0OiBcIm15c3FsXCIsXG4gICAgICBvdmVyd3JpdGU6IHRydWUsXG4gICAgICBmaWVsZFR5cGVzOiB7XG4gICAgICAgIGdlb2pzb246IFwiZ2VvanNvblwiLFxuICAgICAgICBnZW9wb2ludDogXCJnZW9wb2ludFwiLFxuICAgICAgICBsaXN0OiBcImxpc3RcIixcbiAgICAgICAgb2JqZWN0OiBcIm9iamVjdFwiLFxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGltZSBhZnRlcjpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvbGEtcnMvbm9kZWpzLXBvbGFycy9pc3N1ZXMvMzY0XG4gICAgICAgIHRpbWU6IFwidGltZVwiLFxuICAgICAgICB5ZWFyOiBcInllYXJcIixcbiAgICAgICAgeWVhcm1vbnRoOiBcInllYXJtb250aFwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gYXdhaXQgbG9hZERhdGFiYXNlVGFibGUoXG4gICAgICB7IHBhdGgsIGRpYWxlY3QsIGZvcm1hdDogXCJteXNxbFwiIH0sXG4gICAgICB7IGRlbm9ybWFsaXplZDogdHJ1ZSB9LFxuICAgIClcblxuICAgIGV4cGVjdCgoYXdhaXQgdGFyZ2V0LmNvbGxlY3QoKSkudG9SZWNvcmRzKCkpLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICBhcnJheTogXCJbMSwgMiwgM11cIixcbiAgICAgICAgYm9vbGVhbjogMSxcbiAgICAgICAgZGF0ZTogXCIyMDI1LTAxLTAxXCIsXG4gICAgICAgIGRhdGV0aW1lOiBuZXcgRGF0ZShEYXRlLlVUQygyMDI1LCAwLCAxKSksXG4gICAgICAgIGR1cmF0aW9uOiBcIlAyM0RUMjNIXCIsXG4gICAgICAgIGdlb2pzb246ICd7XCJ2YWx1ZVwiOiAxfScsXG4gICAgICAgIGdlb3BvaW50OiBcIjQwLjAsNTAuMFwiLFxuICAgICAgICBpbnRlZ2VyOiAxLFxuICAgICAgICBsaXN0OiBcIjEuMCwyLjAsMy4wXCIsXG4gICAgICAgIG51bWJlcjogMS4xLFxuICAgICAgICBvYmplY3Q6ICd7XCJ2YWx1ZVwiOiAxfScsXG4gICAgICAgIHN0cmluZzogXCJzdHJpbmdcIixcbiAgICAgICAgdGltZTogXCIwMDowMDowMFwiLFxuICAgICAgICB5ZWFyOiAyMDI1LFxuICAgICAgICB5ZWFybW9udGg6IFwiMjAyNS0wMVwiLFxuICAgICAgfSxcbiAgICBdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGxvYWQgcGFja2FnZSBmcm9tIGRhdGFiYXNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhZGFwdGVyID0gY3JlYXRlQWRhcHRlcihcIm15c3FsXCIpXG4gICAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCBhZGFwdGVyLmNvbm5lY3REYXRhYmFzZShwYXRoKVxuXG4gICAgYXdhaXQgZGF0YWJhc2Uuc2NoZW1hLmRyb3BUYWJsZShcInRhYmxlMVwiKS5pZkV4aXN0cygpLmV4ZWN1dGUoKVxuICAgIGF3YWl0IGRhdGFiYXNlLnNjaGVtYVxuICAgICAgLmNyZWF0ZVRhYmxlKFwidGFibGUxXCIpXG4gICAgICAuaWZOb3RFeGlzdHMoKVxuICAgICAgLmFkZENvbHVtbihcImlkXCIsIFwiaW50ZWdlclwiLCBjb2x1bW4gPT4gY29sdW1uLm5vdE51bGwoKSlcbiAgICAgIC5hZGRDb2x1bW4oXCJuYW1lXCIsIFwidGV4dFwiKVxuICAgICAgLmV4ZWN1dGUoKVxuXG4gICAgYXdhaXQgZGF0YWJhc2Uuc2NoZW1hLmRyb3BUYWJsZShcInRhYmxlMlwiKS5pZkV4aXN0cygpLmV4ZWN1dGUoKVxuICAgIGF3YWl0IGRhdGFiYXNlLnNjaGVtYVxuICAgICAgLmNyZWF0ZVRhYmxlKFwidGFibGUyXCIpXG4gICAgICAuaWZOb3RFeGlzdHMoKVxuICAgICAgLmFkZENvbHVtbihcImlkXCIsIFwiaW50ZWdlclwiLCBjb2x1bW4gPT4gY29sdW1uLm5vdE51bGwoKSlcbiAgICAgIC5hZGRDb2x1bW4oXCJudW1iZXJcIiwgXCJudW1lcmljXCIpXG4gICAgICAuYWRkQ29sdW1uKFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZVwiKVxuICAgICAgLmV4ZWN1dGUoKVxuXG4gICAgY29uc3QgZGF0YXBhY2thZ2UgPSBhd2FpdCBsb2FkUGFja2FnZUZyb21EYXRhYmFzZShwYXRoLCB7XG4gICAgICBmb3JtYXQ6IFwibXlzcWxcIixcbiAgICAgIGluY2x1ZGVUYWJsZXM6IFtcInRhYmxlMVwiLCBcInRhYmxlMlwiXSxcbiAgICB9KVxuXG4gICAgZXhwZWN0KGRhdGFwYWNrYWdlKS50b0VxdWFsKHtcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBuYW1lOiBcInRhYmxlMVwiLFxuICAgICAgICAgIGZvcm1hdDogXCJteXNxbFwiLFxuICAgICAgICAgIGRpYWxlY3Q6IHsgdGFibGU6IFwidGFibGUxXCIgfSxcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIGNvbnN0cmFpbnRzOiB7IHJlcXVpcmVkOiB0cnVlIH0gfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiBcIm5hbWVcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBuYW1lOiBcInRhYmxlMlwiLFxuICAgICAgICAgIGZvcm1hdDogXCJteXNxbFwiLFxuICAgICAgICAgIGRpYWxlY3Q6IHsgdGFibGU6IFwidGFibGUyXCIgfSxcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIGNvbnN0cmFpbnRzOiB7IHJlcXVpcmVkOiB0cnVlIH0gfSxcbiAgICAgICAgICAgICAgeyBuYW1lOiBcIm51bWJlclwiLCB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgICAgIHsgbmFtZTogXCJkYXRldGltZVwiLCB0eXBlOiBcImRhdGV0aW1lXCIgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FieldType } from "@frictionless-ts/metadata";
|
|
2
|
+
import { PostgresDialect } from "kysely";
|
|
3
|
+
import type { DatabaseType } from "../field/index.ts";
|
|
4
|
+
import { BaseAdapter } from "./base.ts";
|
|
5
|
+
export declare class PostgresqlAdapter extends BaseAdapter {
|
|
6
|
+
nativeTypes: ("string" | "number" | "boolean" | "integer" | "datetime" | "year")[];
|
|
7
|
+
createDialect(path: string): Promise<PostgresDialect>;
|
|
8
|
+
normalizeType(databaseType: DatabaseType): FieldType;
|
|
9
|
+
denormalizeType(fieldType: FieldType): DatabaseType;
|
|
10
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { PostgresDialect } from "kysely";
|
|
2
|
+
import { Pool } from "pg";
|
|
3
|
+
import { BaseAdapter } from "./base.js";
|
|
4
|
+
// TODO: Support more native types
|
|
5
|
+
export class PostgresqlAdapter extends BaseAdapter {
|
|
6
|
+
nativeTypes = [
|
|
7
|
+
"boolean",
|
|
8
|
+
"datetime",
|
|
9
|
+
"integer",
|
|
10
|
+
"number",
|
|
11
|
+
"string",
|
|
12
|
+
"year",
|
|
13
|
+
];
|
|
14
|
+
async createDialect(path) {
|
|
15
|
+
return new PostgresDialect({
|
|
16
|
+
pool: new Pool({ connectionString: path }),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
normalizeType(databaseType) {
|
|
20
|
+
switch (databaseType.toLowerCase()) {
|
|
21
|
+
case "smallint":
|
|
22
|
+
case "integer":
|
|
23
|
+
case "int":
|
|
24
|
+
case "int2":
|
|
25
|
+
case "int4":
|
|
26
|
+
case "int8":
|
|
27
|
+
case "bigint":
|
|
28
|
+
case "smallserial":
|
|
29
|
+
case "serial":
|
|
30
|
+
case "bigserial":
|
|
31
|
+
return "integer";
|
|
32
|
+
case "decimal":
|
|
33
|
+
case "numeric":
|
|
34
|
+
case "real":
|
|
35
|
+
case "float4":
|
|
36
|
+
case "double precision":
|
|
37
|
+
case "float8":
|
|
38
|
+
return "number";
|
|
39
|
+
case "boolean":
|
|
40
|
+
case "bool":
|
|
41
|
+
return "boolean";
|
|
42
|
+
case "char":
|
|
43
|
+
case "character":
|
|
44
|
+
case "varchar":
|
|
45
|
+
case "character varying":
|
|
46
|
+
case "text":
|
|
47
|
+
case "citext":
|
|
48
|
+
case "uuid":
|
|
49
|
+
return "string";
|
|
50
|
+
case "date":
|
|
51
|
+
return "date";
|
|
52
|
+
case "time":
|
|
53
|
+
case "time without time zone":
|
|
54
|
+
case "time with time zone":
|
|
55
|
+
case "timetz":
|
|
56
|
+
return "time";
|
|
57
|
+
case "timestamp":
|
|
58
|
+
case "timestamp without time zone":
|
|
59
|
+
case "timestamp with time zone":
|
|
60
|
+
case "timestamptz":
|
|
61
|
+
return "datetime";
|
|
62
|
+
case "interval":
|
|
63
|
+
return "duration";
|
|
64
|
+
case "json":
|
|
65
|
+
case "jsonb":
|
|
66
|
+
return "object";
|
|
67
|
+
case "point":
|
|
68
|
+
case "line":
|
|
69
|
+
case "lseg":
|
|
70
|
+
case "box":
|
|
71
|
+
case "path":
|
|
72
|
+
case "polygon":
|
|
73
|
+
case "circle":
|
|
74
|
+
case "geometry":
|
|
75
|
+
case "geography":
|
|
76
|
+
return "geojson";
|
|
77
|
+
default:
|
|
78
|
+
return "string";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
denormalizeType(fieldType) {
|
|
82
|
+
switch (fieldType) {
|
|
83
|
+
case "boolean":
|
|
84
|
+
return "boolean";
|
|
85
|
+
case "datetime":
|
|
86
|
+
return "timestamp";
|
|
87
|
+
case "integer":
|
|
88
|
+
return "integer";
|
|
89
|
+
case "number":
|
|
90
|
+
return "double precision";
|
|
91
|
+
case "string":
|
|
92
|
+
return "text";
|
|
93
|
+
case "year":
|
|
94
|
+
return "integer";
|
|
95
|
+
default:
|
|
96
|
+
return "text";
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXNxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2FkYXB0ZXJzL3Bvc3RncmVzcWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRXpCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFdkMsa0NBQWtDO0FBRWxDLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxXQUFXO0lBQ2hELFdBQVcsR0FBRztRQUNaLFNBQVM7UUFDVCxVQUFVO1FBQ1YsU0FBUztRQUNULFFBQVE7UUFDUixRQUFRO1FBQ1IsTUFBTTtLQUNlLENBQUE7SUFFdkIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZO1FBQzlCLE9BQU8sSUFBSSxlQUFlLENBQUM7WUFDekIsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDM0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUEwQjtRQUN0QyxRQUFRLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ25DLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssYUFBYSxDQUFDO1lBQ25CLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxXQUFXO2dCQUNkLE9BQU8sU0FBUyxDQUFBO1lBQ2xCLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxrQkFBa0IsQ0FBQztZQUN4QixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxRQUFRLENBQUE7WUFDakIsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssbUJBQW1CLENBQUM7WUFDekIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssTUFBTTtnQkFDVCxPQUFPLFFBQVEsQ0FBQTtZQUNqQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxNQUFNLENBQUE7WUFDZixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssd0JBQXdCLENBQUM7WUFDOUIsS0FBSyxxQkFBcUIsQ0FBQztZQUMzQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUE7WUFDZixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLDZCQUE2QixDQUFDO1lBQ25DLEtBQUssMEJBQTBCLENBQUM7WUFDaEMsS0FBSyxhQUFhO2dCQUNoQixPQUFPLFVBQVUsQ0FBQTtZQUNuQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxVQUFVLENBQUE7WUFDbkIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxRQUFRLENBQUE7WUFDakIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxRQUFRLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsU0FBb0I7UUFDbEMsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxTQUFTLENBQUE7WUFDbEIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sV0FBVyxDQUFBO1lBQ3BCLEtBQUssU0FBUztnQkFDWixPQUFPLFNBQVMsQ0FBQTtZQUNsQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxrQkFBa0IsQ0FBQTtZQUMzQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUE7WUFDZixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxTQUFTLENBQUE7WUFDbEI7Z0JBQ0UsT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmllbGRUeXBlIH0gZnJvbSBcIkBmcmljdGlvbmxlc3MtdHMvbWV0YWRhdGFcIlxuaW1wb3J0IHsgUG9zdGdyZXNEaWFsZWN0IH0gZnJvbSBcImt5c2VseVwiXG5pbXBvcnQgeyBQb29sIH0gZnJvbSBcInBnXCJcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VUeXBlIH0gZnJvbSBcIi4uL2ZpZWxkL2luZGV4LnRzXCJcbmltcG9ydCB7IEJhc2VBZGFwdGVyIH0gZnJvbSBcIi4vYmFzZS50c1wiXG5cbi8vIFRPRE86IFN1cHBvcnQgbW9yZSBuYXRpdmUgdHlwZXNcblxuZXhwb3J0IGNsYXNzIFBvc3RncmVzcWxBZGFwdGVyIGV4dGVuZHMgQmFzZUFkYXB0ZXIge1xuICBuYXRpdmVUeXBlcyA9IFtcbiAgICBcImJvb2xlYW5cIixcbiAgICBcImRhdGV0aW1lXCIsXG4gICAgXCJpbnRlZ2VyXCIsXG4gICAgXCJudW1iZXJcIixcbiAgICBcInN0cmluZ1wiLFxuICAgIFwieWVhclwiLFxuICBdIHNhdGlzZmllcyBGaWVsZFR5cGVbXVxuXG4gIGFzeW5jIGNyZWF0ZURpYWxlY3QocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc0RpYWxlY3Qoe1xuICAgICAgcG9vbDogbmV3IFBvb2woeyBjb25uZWN0aW9uU3RyaW5nOiBwYXRoIH0pLFxuICAgIH0pXG4gIH1cblxuICBub3JtYWxpemVUeXBlKGRhdGFiYXNlVHlwZTogRGF0YWJhc2VUeXBlKTogRmllbGRUeXBlIHtcbiAgICBzd2l0Y2ggKGRhdGFiYXNlVHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlIFwic21hbGxpbnRcIjpcbiAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICBjYXNlIFwiaW50XCI6XG4gICAgICBjYXNlIFwiaW50MlwiOlxuICAgICAgY2FzZSBcImludDRcIjpcbiAgICAgIGNhc2UgXCJpbnQ4XCI6XG4gICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICBjYXNlIFwic21hbGxzZXJpYWxcIjpcbiAgICAgIGNhc2UgXCJzZXJpYWxcIjpcbiAgICAgIGNhc2UgXCJiaWdzZXJpYWxcIjpcbiAgICAgICAgcmV0dXJuIFwiaW50ZWdlclwiXG4gICAgICBjYXNlIFwiZGVjaW1hbFwiOlxuICAgICAgY2FzZSBcIm51bWVyaWNcIjpcbiAgICAgIGNhc2UgXCJyZWFsXCI6XG4gICAgICBjYXNlIFwiZmxvYXQ0XCI6XG4gICAgICBjYXNlIFwiZG91YmxlIHByZWNpc2lvblwiOlxuICAgICAgY2FzZSBcImZsb2F0OFwiOlxuICAgICAgICByZXR1cm4gXCJudW1iZXJcIlxuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIGNhc2UgXCJib29sXCI6XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIlxuICAgICAgY2FzZSBcImNoYXJcIjpcbiAgICAgIGNhc2UgXCJjaGFyYWN0ZXJcIjpcbiAgICAgIGNhc2UgXCJ2YXJjaGFyXCI6XG4gICAgICBjYXNlIFwiY2hhcmFjdGVyIHZhcnlpbmdcIjpcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICBjYXNlIFwiY2l0ZXh0XCI6XG4gICAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIlxuICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgcmV0dXJuIFwiZGF0ZVwiXG4gICAgICBjYXNlIFwidGltZVwiOlxuICAgICAgY2FzZSBcInRpbWUgd2l0aG91dCB0aW1lIHpvbmVcIjpcbiAgICAgIGNhc2UgXCJ0aW1lIHdpdGggdGltZSB6b25lXCI6XG4gICAgICBjYXNlIFwidGltZXR6XCI6XG4gICAgICAgIHJldHVybiBcInRpbWVcIlxuICAgICAgY2FzZSBcInRpbWVzdGFtcFwiOlxuICAgICAgY2FzZSBcInRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZVwiOlxuICAgICAgY2FzZSBcInRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZVwiOlxuICAgICAgY2FzZSBcInRpbWVzdGFtcHR6XCI6XG4gICAgICAgIHJldHVybiBcImRhdGV0aW1lXCJcbiAgICAgIGNhc2UgXCJpbnRlcnZhbFwiOlxuICAgICAgICByZXR1cm4gXCJkdXJhdGlvblwiXG4gICAgICBjYXNlIFwianNvblwiOlxuICAgICAgY2FzZSBcImpzb25iXCI6XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiXG4gICAgICBjYXNlIFwicG9pbnRcIjpcbiAgICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgICBjYXNlIFwibHNlZ1wiOlxuICAgICAgY2FzZSBcImJveFwiOlxuICAgICAgY2FzZSBcInBhdGhcIjpcbiAgICAgIGNhc2UgXCJwb2x5Z29uXCI6XG4gICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICBjYXNlIFwiZ2VvbWV0cnlcIjpcbiAgICAgIGNhc2UgXCJnZW9ncmFwaHlcIjpcbiAgICAgICAgcmV0dXJuIFwiZ2VvanNvblwiXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIlxuICAgIH1cbiAgfVxuXG4gIGRlbm9ybWFsaXplVHlwZShmaWVsZFR5cGU6IEZpZWxkVHlwZSk6IERhdGFiYXNlVHlwZSB7XG4gICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBcImJvb2xlYW5cIlxuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIHJldHVybiBcInRpbWVzdGFtcFwiXG4gICAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgICByZXR1cm4gXCJpbnRlZ2VyXCJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIFwiZG91YmxlIHByZWNpc2lvblwiXG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiBcInRleHRcIlxuICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgcmV0dXJuIFwiaW50ZWdlclwiXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJ0ZXh0XCJcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|