@xata.io/drizzle 0.0.0-alpha.vcbc960002feb675b6f59ea45d064c1c778149c70 → 0.0.0-alpha.vcbe578a7194fc6d985f3aadd5fd3c9eb8062d1c0
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/.turbo/turbo-build.log +5 -5
- package/CHANGELOG.md +23 -2
- package/dist/index.cjs +10 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.mjs +12 -17
- package/dist/index.mjs.map +1 -1
- package/dist/pg.cjs +7 -10
- package/dist/pg.cjs.map +1 -1
- package/dist/pg.d.ts +3 -3
- package/dist/pg.mjs +8 -11
- package/dist/pg.mjs.map +1 -1
- package/package.json +5 -6
- package/test/drizzle.test.ts +18 -14
- package/test/core.schema.ts +0 -93
- package/test/core.test.ts +0 -3892
- package/test/relational.schema.ts +0 -85
- package/test/relational.test.ts +0 -6293
package/dist/pg.mjs
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { is, Column, SQL, getTableName,
|
1
|
+
import { is, Column, SQL, getTableName, entityKind, fillPlaceholders, NoopLogger, sql, DefaultLogger, extractTablesRelationalConfig, createTableRelationsHelpers } from 'drizzle-orm';
|
2
2
|
import { PgPreparedQuery, PgSession, PgTransaction, PgDialect, PgDatabase } from 'drizzle-orm/pg-core';
|
3
3
|
import { Pool } from 'pg';
|
4
4
|
|
@@ -45,8 +45,8 @@ function mapResultRow(columns, row, joinsNotNullableMap) {
|
|
45
45
|
return result;
|
46
46
|
}
|
47
47
|
|
48
|
-
var _a$1, _b, _c;
|
49
|
-
class XataPreparedQuery extends PgPreparedQuery {
|
48
|
+
var _a$1, _b, _c, _d, _e, _f;
|
49
|
+
class XataPreparedQuery extends (_b = PgPreparedQuery, _a$1 = entityKind, _b) {
|
50
50
|
constructor(client, queryString, params, logger, fields, name, _isResponseInArrayMode, customResultMapper) {
|
51
51
|
super({ sql: queryString, params });
|
52
52
|
this.client = client;
|
@@ -98,9 +98,8 @@ class XataPreparedQuery extends PgPreparedQuery {
|
|
98
98
|
return this._isResponseInArrayMode;
|
99
99
|
}
|
100
100
|
}
|
101
|
-
_a$1 = entityKind;
|
102
101
|
XataPreparedQuery[_a$1] = "XataPreparedQuery";
|
103
|
-
const _XataSession = class _XataSession extends PgSession {
|
102
|
+
const _XataSession = class _XataSession extends (_d = PgSession, _c = entityKind, _d) {
|
104
103
|
constructor(client, dialect, schema, options = {}) {
|
105
104
|
super(dialect);
|
106
105
|
this.client = client;
|
@@ -145,10 +144,9 @@ const _XataSession = class _XataSession extends PgSession {
|
|
145
144
|
}
|
146
145
|
}
|
147
146
|
};
|
148
|
-
|
149
|
-
_XataSession[_b] = "XataSession";
|
147
|
+
_XataSession[_c] = "XataSession";
|
150
148
|
let XataSession = _XataSession;
|
151
|
-
const _XataTransaction = class _XataTransaction extends PgTransaction {
|
149
|
+
const _XataTransaction = class _XataTransaction extends (_f = PgTransaction, _e = entityKind, _f) {
|
152
150
|
async transaction(transaction) {
|
153
151
|
const savepointName = `sp${this.nestedIndex + 1}`;
|
154
152
|
const tx = new _XataTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);
|
@@ -163,11 +161,11 @@ const _XataTransaction = class _XataTransaction extends PgTransaction {
|
|
163
161
|
}
|
164
162
|
}
|
165
163
|
};
|
166
|
-
|
167
|
-
_XataTransaction[_c] = "XataTransaction";
|
164
|
+
_XataTransaction[_e] = "XataTransaction";
|
168
165
|
let XataTransaction = _XataTransaction;
|
169
166
|
|
170
167
|
var _a;
|
168
|
+
_a = entityKind;
|
171
169
|
class XataDriver {
|
172
170
|
constructor(client, dialect, options = {}) {
|
173
171
|
this.client = client;
|
@@ -181,7 +179,6 @@ class XataDriver {
|
|
181
179
|
initMappers() {
|
182
180
|
}
|
183
181
|
}
|
184
|
-
_a = entityKind;
|
185
182
|
XataDriver[_a] = "XataDriver";
|
186
183
|
function drizzle(client, config = {}) {
|
187
184
|
const dialect = new PgDialect();
|
package/dist/pg.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pg.mjs","sources":["../src/shared/utils.ts","../src/pg/session.ts","../src/pg/driver.ts"],"sourcesContent":["import { AnyColumn, Column, DriverValueDecoder, SQL, SelectedFieldsOrdered, getTableName, is } from 'drizzle-orm';\n\nexport function mapResultRow<TResult>(\n columns: SelectedFieldsOrdered<AnyColumn>,\n row: unknown[],\n joinsNotNullableMap: Record<string, boolean> | undefined\n): TResult {\n // Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n const nullifyMap: Record<string, string | false> = {};\n\n const result = columns.reduce<Record<string, any>>((result, { path, field }, columnIndex) => {\n let decoder: DriverValueDecoder<unknown, unknown>;\n if (is(field, Column)) {\n decoder = field;\n } else if (is(field, SQL)) {\n decoder = (field as any).decoder;\n } else {\n decoder = (field.sql as any).decoder;\n }\n let node = result;\n for (const [pathChunkIndex, pathChunk] of path.entries()) {\n if (pathChunkIndex < path.length - 1) {\n if (!(pathChunk in node)) {\n node[pathChunk] = {};\n }\n node = node[pathChunk];\n } else {\n const rawValue = row[columnIndex]!;\n const value = (node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue));\n\n if (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n const objectName = path[0]!;\n if (!(objectName in nullifyMap)) {\n nullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n } else if (\n typeof nullifyMap[objectName] === 'string' &&\n nullifyMap[objectName] !== getTableName(field.table)\n ) {\n nullifyMap[objectName] = false;\n }\n }\n }\n }\n return result;\n }, {});\n\n // Nullify all nested objects from nullifyMap that are nullable\n if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n for (const [objectName, tableName] of Object.entries(nullifyMap)) {\n if (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n result[objectName] = null;\n }\n }\n }\n\n return result as TResult;\n}\n","import {\n Assume,\n Logger,\n NoopLogger,\n Query,\n RelationalSchemaConfig,\n SelectedFieldsOrdered,\n TablesRelationalConfig,\n entityKind,\n fillPlaceholders,\n sql\n} from 'drizzle-orm';\nimport {\n PgColumn,\n PgDialect,\n PgSession,\n PgTransaction,\n PgTransactionConfig,\n PgPreparedQuery,\n PreparedQueryConfig,\n QueryResultHKT\n} from 'drizzle-orm/pg-core';\nimport { Client, Pool, PoolClient, QueryArrayConfig, QueryConfig, QueryResult, QueryResultRow } from 'pg';\nimport { mapResultRow } from '../shared/utils';\n\nexport type XataClient = Pool | PoolClient | Client;\n\nexport class XataPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n static readonly [entityKind]: string = 'XataPreparedQuery';\n\n private rawQueryConfig: QueryConfig;\n private queryConfig: QueryArrayConfig;\n\n constructor(\n private client: XataClient,\n queryString: string,\n private params: unknown[],\n private logger: Logger,\n private fields: SelectedFieldsOrdered<PgColumn> | undefined,\n name: string | undefined,\n private _isResponseInArrayMode: boolean,\n private customResultMapper?: (rows: unknown[][]) => T['execute']\n ) {\n super({ sql: queryString, params });\n this.rawQueryConfig = {\n name,\n text: queryString\n };\n this.queryConfig = {\n name,\n text: queryString,\n rowMode: 'array'\n };\n }\n\n async execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n\n this.logger.logQuery(this.rawQueryConfig.text, params);\n\n const {\n fields,\n client,\n rawQueryConfig: rawQuery,\n queryConfig: query,\n // @ts-expect-error joinsNotNullableMap is internal\n joinsNotNullableMap,\n customResultMapper\n } = this;\n if (!fields && !customResultMapper) {\n return await client.query(rawQuery, params);\n }\n\n const result = await client.query(query, params);\n\n return customResultMapper\n ? customResultMapper(result.rows)\n : result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n }\n\n all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.rawQueryConfig.text, params);\n return this.client.query(this.rawQueryConfig, params).then((result) => result.rows);\n }\n\n values(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.rawQueryConfig.text, params);\n return this.client.query(this.queryConfig, params).then((result) => result.rows);\n }\n\n /** @internal */\n isResponseInArrayMode() {\n return this._isResponseInArrayMode;\n }\n}\n\nexport interface XataSessionOptions {\n logger?: Logger;\n}\n\nexport class XataSession<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgSession<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'XataSession';\n\n private logger: Logger;\n\n constructor(\n private client: XataClient,\n dialect: PgDialect,\n private schema: RelationalSchemaConfig<TSchema> | undefined,\n private options: XataSessionOptions = {}\n ) {\n super(dialect);\n this.logger = options.logger ?? new NoopLogger();\n }\n\n prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n query: Query,\n fields: SelectedFieldsOrdered<PgColumn> | undefined,\n name: string | undefined,\n isResponseInArrayMode: boolean,\n customResultMapper?: (rows: unknown[][]) => T['execute']\n ): PgPreparedQuery<T> {\n return new XataPreparedQuery(\n this.client,\n query.sql,\n query.params,\n this.logger,\n fields,\n name,\n isResponseInArrayMode,\n customResultMapper\n );\n }\n\n async query(query: string, params: unknown[]): Promise<QueryResult> {\n this.logger.logQuery(query, params);\n return await this.client.query({ rowMode: 'array', text: query, values: params });\n }\n\n async queryObjects<T extends QueryResultRow>(query: string, params: unknown[]): Promise<QueryResult<T>> {\n return await this.client.query<T>(query, params);\n }\n\n override async transaction<T>(\n transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>,\n config: PgTransactionConfig = {}\n ): Promise<T> {\n const session =\n this.client instanceof Pool\n ? new XataSession(await this.client.connect(), this.dialect, this.schema, this.options)\n : this;\n const tx = new XataTransaction(this.dialect, session, this.schema);\n // @ts-expect-error getTransactionConfigSQL is internal\n await tx.execute(sql`begin ${tx.getTransactionConfigSQL(config)}`);\n try {\n const result = await transaction(tx);\n await tx.execute(sql`commit`);\n return result;\n } catch (error) {\n await tx.execute(sql`rollback`);\n throw error;\n } finally {\n if (this.client instanceof Pool) {\n (session.client as PoolClient).release();\n }\n }\n }\n}\n\nexport class XataTransaction<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgTransaction<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'XataTransaction';\n\n override async transaction<T>(transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n const savepointName = `sp${this.nestedIndex + 1}`;\n // @ts-expect-error session and dialect are internal\n const tx = new XataTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n await tx.execute(sql.raw(`savepoint ${savepointName}`));\n try {\n const result = await transaction(tx);\n await tx.execute(sql.raw(`release savepoint ${savepointName}`));\n return result;\n } catch (e) {\n await tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n throw e;\n }\n }\n}\n\nexport interface XataQueryResultHKT extends QueryResultHKT {\n type: QueryResult<Assume<this['row'], QueryResultRow>>;\n}\n","import {\n DefaultLogger,\n DrizzleConfig,\n Logger,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n createTableRelationsHelpers,\n entityKind,\n extractTablesRelationalConfig\n} from 'drizzle-orm';\nimport type { XataClient, XataQueryResultHKT } from './session.js';\nimport { XataSession } from './session.js';\nimport { PgDatabase, PgDialect } from 'drizzle-orm/pg-core';\n\nexport interface XataDriverOptions {\n logger?: Logger;\n}\n\nexport class XataDriver {\n static readonly [entityKind]: string = 'XataDriver';\n\n constructor(private client: XataClient, private dialect: PgDialect, private options: XataDriverOptions = {}) {\n this.initMappers();\n }\n\n createSession(\n schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined\n ): XataSession<Record<string, unknown>, TablesRelationalConfig> {\n return new XataSession(this.client, this.dialect, schema, { logger: this.options.logger });\n }\n\n initMappers() {\n // TODO: Add custom type parsers\n }\n}\n\nexport type XataDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<\n XataQueryResultHKT,\n TSchema\n>;\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n client: XataClient,\n config: DrizzleConfig<TSchema> = {}\n): XataDatabase<TSchema> {\n const dialect = new PgDialect();\n let logger;\n if (config.logger === true) {\n logger = new DefaultLogger();\n } else if (config.logger !== false) {\n logger = config.logger;\n }\n\n let schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n if (config.schema) {\n const tablesConfig = extractTablesRelationalConfig(config.schema, createTableRelationsHelpers);\n schema = {\n fullSchema: config.schema,\n schema: tablesConfig.tables,\n tableNamesMap: tablesConfig.tableNamesMap\n };\n }\n\n const driver = new XataDriver(client, dialect, { logger });\n const session = driver.createSession(schema);\n return new PgDatabase(dialect, session, schema) as XataDatabase<TSchema>;\n}\n"],"names":["result","_a"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"pg.mjs","sources":["../src/shared/utils.ts","../src/pg/session.ts","../src/pg/driver.ts"],"sourcesContent":["import { AnyColumn, Column, DriverValueDecoder, SQL, SelectedFieldsOrdered, getTableName, is } from 'drizzle-orm';\n\nexport function mapResultRow<TResult>(\n columns: SelectedFieldsOrdered<AnyColumn>,\n row: unknown[],\n joinsNotNullableMap: Record<string, boolean> | undefined\n): TResult {\n // Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n const nullifyMap: Record<string, string | false> = {};\n\n const result = columns.reduce<Record<string, any>>((result, { path, field }, columnIndex) => {\n let decoder: DriverValueDecoder<unknown, unknown>;\n if (is(field, Column)) {\n decoder = field;\n } else if (is(field, SQL)) {\n decoder = (field as any).decoder;\n } else {\n decoder = (field.sql as any).decoder;\n }\n let node = result;\n for (const [pathChunkIndex, pathChunk] of path.entries()) {\n if (pathChunkIndex < path.length - 1) {\n if (!(pathChunk in node)) {\n node[pathChunk] = {};\n }\n node = node[pathChunk];\n } else {\n const rawValue = row[columnIndex]!;\n const value = (node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue));\n\n if (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n const objectName = path[0]!;\n if (!(objectName in nullifyMap)) {\n nullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n } else if (\n typeof nullifyMap[objectName] === 'string' &&\n nullifyMap[objectName] !== getTableName(field.table)\n ) {\n nullifyMap[objectName] = false;\n }\n }\n }\n }\n return result;\n }, {});\n\n // Nullify all nested objects from nullifyMap that are nullable\n if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n for (const [objectName, tableName] of Object.entries(nullifyMap)) {\n if (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n result[objectName] = null;\n }\n }\n }\n\n return result as TResult;\n}\n","import {\n Assume,\n Logger,\n NoopLogger,\n Query,\n RelationalSchemaConfig,\n SelectedFieldsOrdered,\n TablesRelationalConfig,\n entityKind,\n fillPlaceholders,\n sql\n} from 'drizzle-orm';\nimport {\n PgColumn,\n PgDialect,\n PgSession,\n PgTransaction,\n PgTransactionConfig,\n PgPreparedQuery,\n PreparedQueryConfig,\n PgQueryResultHKT\n} from 'drizzle-orm/pg-core';\nimport { Client, Pool, PoolClient, QueryArrayConfig, QueryConfig, QueryResult, QueryResultRow } from 'pg';\nimport { mapResultRow } from '../shared/utils';\n\nexport type XataClient = Pool | PoolClient | Client;\n\nexport class XataPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n static readonly [entityKind]: string = 'XataPreparedQuery';\n\n private rawQueryConfig: QueryConfig;\n private queryConfig: QueryArrayConfig;\n\n constructor(\n private client: XataClient,\n queryString: string,\n private params: unknown[],\n private logger: Logger,\n private fields: SelectedFieldsOrdered<PgColumn> | undefined,\n name: string | undefined,\n private _isResponseInArrayMode: boolean,\n private customResultMapper?: (rows: unknown[][]) => T['execute']\n ) {\n super({ sql: queryString, params });\n this.rawQueryConfig = {\n name,\n text: queryString\n };\n this.queryConfig = {\n name,\n text: queryString,\n rowMode: 'array'\n };\n }\n\n async execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n\n this.logger.logQuery(this.rawQueryConfig.text, params);\n\n const {\n fields,\n client,\n rawQueryConfig: rawQuery,\n queryConfig: query,\n // @ts-expect-error joinsNotNullableMap is internal\n joinsNotNullableMap,\n customResultMapper\n } = this;\n if (!fields && !customResultMapper) {\n return await client.query(rawQuery, params);\n }\n\n const result = await client.query(query, params);\n\n return customResultMapper\n ? customResultMapper(result.rows)\n : result.rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n }\n\n all(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['all']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.rawQueryConfig.text, params);\n return this.client.query(this.rawQueryConfig, params).then((result) => result.rows);\n }\n\n values(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['values']> {\n const params = fillPlaceholders(this.params, placeholderValues);\n this.logger.logQuery(this.rawQueryConfig.text, params);\n return this.client.query(this.queryConfig, params).then((result) => result.rows);\n }\n\n /** @internal */\n isResponseInArrayMode() {\n return this._isResponseInArrayMode;\n }\n}\n\nexport interface XataSessionOptions {\n logger?: Logger;\n}\n\nexport class XataSession<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgSession<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'XataSession';\n\n private logger: Logger;\n\n constructor(\n private client: XataClient,\n dialect: PgDialect,\n private schema: RelationalSchemaConfig<TSchema> | undefined,\n private options: XataSessionOptions = {}\n ) {\n super(dialect);\n this.logger = options.logger ?? new NoopLogger();\n }\n\n prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n query: Query,\n fields: SelectedFieldsOrdered<PgColumn> | undefined,\n name: string | undefined,\n isResponseInArrayMode: boolean,\n customResultMapper?: (rows: unknown[][]) => T['execute']\n ): PgPreparedQuery<T> {\n return new XataPreparedQuery(\n this.client,\n query.sql,\n query.params,\n this.logger,\n fields,\n name,\n isResponseInArrayMode,\n customResultMapper\n );\n }\n\n async query(query: string, params: unknown[]): Promise<QueryResult> {\n this.logger.logQuery(query, params);\n return await this.client.query({ rowMode: 'array', text: query, values: params });\n }\n\n async queryObjects<T extends QueryResultRow>(query: string, params: unknown[]): Promise<QueryResult<T>> {\n return await this.client.query<T>(query, params);\n }\n\n override async transaction<T>(\n transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>,\n config: PgTransactionConfig = {}\n ): Promise<T> {\n const session =\n this.client instanceof Pool\n ? new XataSession(await this.client.connect(), this.dialect, this.schema, this.options)\n : this;\n const tx = new XataTransaction<TFullSchema, TSchema>(this.dialect, session, this.schema);\n // @ts-expect-error getTransactionConfigSQL is internal\n await tx.execute(sql`begin ${tx.getTransactionConfigSQL(config)}`);\n try {\n const result = await transaction(tx);\n await tx.execute(sql`commit`);\n return result;\n } catch (error) {\n await tx.execute(sql`rollback`);\n throw error;\n } finally {\n if (this.client instanceof Pool) {\n (session.client as PoolClient).release();\n }\n }\n }\n}\n\nexport class XataTransaction<\n TFullSchema extends Record<string, unknown>,\n TSchema extends TablesRelationalConfig\n> extends PgTransaction<XataQueryResultHKT, TFullSchema, TSchema> {\n static readonly [entityKind]: string = 'XataTransaction';\n\n override async transaction<T>(transaction: (tx: XataTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n const savepointName = `sp${this.nestedIndex + 1}`;\n // @ts-expect-error session and dialect are internal\n const tx = new XataTransaction<TFullSchema, TSchema>(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n await tx.execute(sql.raw(`savepoint ${savepointName}`));\n try {\n const result = await transaction(tx);\n await tx.execute(sql.raw(`release savepoint ${savepointName}`));\n return result;\n } catch (e) {\n await tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n throw e;\n }\n }\n}\n\nexport interface XataQueryResultHKT extends PgQueryResultHKT {\n type: QueryResult<Assume<this['row'], QueryResultRow>>;\n}\n","import {\n DefaultLogger,\n DrizzleConfig,\n Logger,\n RelationalSchemaConfig,\n TablesRelationalConfig,\n createTableRelationsHelpers,\n entityKind,\n extractTablesRelationalConfig\n} from 'drizzle-orm';\nimport type { XataClient, XataQueryResultHKT } from './session.js';\nimport { XataSession } from './session.js';\nimport { PgDatabase, PgDialect } from 'drizzle-orm/pg-core';\n\nexport interface XataDriverOptions {\n logger?: Logger;\n}\n\nexport class XataDriver {\n static readonly [entityKind]: string = 'XataDriver';\n\n constructor(private client: XataClient, private dialect: PgDialect, private options: XataDriverOptions = {}) {\n this.initMappers();\n }\n\n createSession(\n schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined\n ): XataSession<Record<string, unknown>, TablesRelationalConfig> {\n return new XataSession(this.client, this.dialect, schema, { logger: this.options.logger });\n }\n\n initMappers() {\n // TODO: Add custom type parsers\n }\n}\n\nexport type XataDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<\n XataQueryResultHKT,\n TSchema\n>;\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n client: XataClient,\n config: DrizzleConfig<TSchema> = {}\n): XataDatabase<TSchema> {\n const dialect = new PgDialect();\n let logger;\n if (config.logger === true) {\n logger = new DefaultLogger();\n } else if (config.logger !== false) {\n logger = config.logger;\n }\n\n let schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n if (config.schema) {\n const tablesConfig = extractTablesRelationalConfig(config.schema, createTableRelationsHelpers);\n schema = {\n fullSchema: config.schema,\n schema: tablesConfig.tables,\n tableNamesMap: tablesConfig.tableNamesMap\n };\n }\n\n const driver = new XataDriver(client, dialect, { logger });\n const session = driver.createSession(schema);\n return new PgDatabase(dialect, session, schema) as XataDatabase<TSchema>;\n}\n"],"names":["result","_a"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@xata.io/drizzle",
|
3
|
-
"version": "0.0.0-alpha.
|
3
|
+
"version": "0.0.0-alpha.vcbe578a7194fc6d985f3aadd5fd3c9eb8062d1c0",
|
4
4
|
"description": "",
|
5
5
|
"main": "./dist/index.cjs",
|
6
6
|
"module": "./dist/index.mjs",
|
@@ -23,13 +23,12 @@
|
|
23
23
|
"url": "https://github.com/xataio/client-ts/issues"
|
24
24
|
},
|
25
25
|
"dependencies": {
|
26
|
-
"@xata.io/client": "0.0.0-alpha.
|
26
|
+
"@xata.io/client": "0.0.0-alpha.vcbe578a7194fc6d985f3aadd5fd3c9eb8062d1c0"
|
27
27
|
},
|
28
28
|
"devDependencies": {
|
29
|
-
"@types/pg": "^8.11.
|
30
|
-
"drizzle-orm": "^0.
|
31
|
-
"pg": "^8.
|
32
|
-
"uuid": "^9.0.1"
|
29
|
+
"@types/pg": "^8.11.6",
|
30
|
+
"drizzle-orm": "^0.32.2",
|
31
|
+
"pg": "^8.12.0"
|
33
32
|
},
|
34
33
|
"peerDependencies": {
|
35
34
|
"drizzle-orm": "*"
|
package/test/drizzle.test.ts
CHANGED
@@ -51,7 +51,7 @@ function getDomain(host: HostProvider) {
|
|
51
51
|
}
|
52
52
|
}
|
53
53
|
|
54
|
-
function getDrizzleClient(type: string, branch: string) {
|
54
|
+
function getDrizzleClient(type: string, database: string, branch: string) {
|
55
55
|
if (type === 'http') {
|
56
56
|
const xata = new BaseClient({
|
57
57
|
apiKey,
|
@@ -77,18 +77,19 @@ function getDrizzleClient(type: string, branch: string) {
|
|
77
77
|
}
|
78
78
|
|
79
79
|
describe.concurrent.each([{ type: 'pg' }, { type: 'http' }])('Drizzle $type', ({ type }) => {
|
80
|
+
const dbName = `${database}-${type}`;
|
81
|
+
|
80
82
|
beforeAll(async () => {
|
81
|
-
await api.
|
82
|
-
workspace,
|
83
|
-
|
84
|
-
data: { region, branchName: 'main' },
|
83
|
+
await api.databases.createDatabase({
|
84
|
+
pathParams: { workspaceId: workspace, dbName },
|
85
|
+
body: { region, branchName: 'main' },
|
85
86
|
headers: { 'X-Features': 'feat-pgroll-migrations=1' }
|
86
87
|
});
|
87
88
|
|
88
|
-
await waitForReplication();
|
89
|
+
await waitForReplication(dbName);
|
89
90
|
|
90
91
|
// For now, run the migrations via wire protocol
|
91
|
-
const { client, db } = getDrizzleClient('pg', 'main');
|
92
|
+
const { client, db } = getDrizzleClient('pg', dbName, 'main');
|
92
93
|
await client?.connect();
|
93
94
|
|
94
95
|
await db.execute(
|
@@ -155,14 +156,17 @@ describe.concurrent.each([{ type: 'pg' }, { type: 'http' }])('Drizzle $type', ({
|
|
155
156
|
});
|
156
157
|
|
157
158
|
afterAll(async () => {
|
158
|
-
await api.
|
159
|
+
await api.databases.deleteDatabase({ pathParams: { workspaceId: workspace, dbName } });
|
159
160
|
});
|
160
161
|
|
161
162
|
beforeEach(async (ctx) => {
|
162
163
|
ctx.branch = `test-${Math.random().toString(36).substring(7)}`;
|
163
|
-
await api.
|
164
|
+
await api.branch.createBranch({
|
165
|
+
pathParams: { workspace, region, dbBranchName: `${database}:${ctx.branch}` },
|
166
|
+
body: { from: 'main' }
|
167
|
+
});
|
164
168
|
|
165
|
-
const { db, client } = getDrizzleClient(type, ctx.branch);
|
169
|
+
const { db, client } = getDrizzleClient(type, dbName, ctx.branch);
|
166
170
|
await client?.connect();
|
167
171
|
|
168
172
|
ctx.db = db;
|
@@ -171,7 +175,7 @@ describe.concurrent.each([{ type: 'pg' }, { type: 'http' }])('Drizzle $type', ({
|
|
171
175
|
|
172
176
|
afterEach(async (ctx) => {
|
173
177
|
await ctx.client?.end();
|
174
|
-
await api.
|
178
|
+
await api.branch.deleteBranch({ pathParams: { workspace, region, dbBranchName: `${database}:${ctx.branch}` } });
|
175
179
|
});
|
176
180
|
|
177
181
|
/*
|
@@ -6282,12 +6286,12 @@ describe.concurrent.each([{ type: 'pg' }, { type: 'http' }])('Drizzle $type', ({
|
|
6282
6286
|
});
|
6283
6287
|
});
|
6284
6288
|
|
6285
|
-
async function waitForReplication(): Promise<void> {
|
6289
|
+
async function waitForReplication(dbName: string): Promise<void> {
|
6286
6290
|
try {
|
6287
6291
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
6288
|
-
await api.
|
6292
|
+
await api.branch.getBranchList({ pathParams: { workspace, dbName, region } });
|
6289
6293
|
} catch (error) {
|
6290
6294
|
console.log(`Replication not ready yet, retrying...`);
|
6291
|
-
return await waitForReplication();
|
6295
|
+
return await waitForReplication(dbName);
|
6292
6296
|
}
|
6293
6297
|
}
|
package/test/core.schema.ts
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
boolean,
|
3
|
-
char,
|
4
|
-
cidr,
|
5
|
-
inet,
|
6
|
-
integer,
|
7
|
-
jsonb,
|
8
|
-
macaddr,
|
9
|
-
macaddr8,
|
10
|
-
pgTable,
|
11
|
-
serial,
|
12
|
-
text,
|
13
|
-
timestamp
|
14
|
-
} from 'drizzle-orm/pg-core';
|
15
|
-
|
16
|
-
export const usersTable = pgTable('users', {
|
17
|
-
id: serial('id' as string).primaryKey(),
|
18
|
-
name: text('name').notNull(),
|
19
|
-
verified: boolean('verified').notNull().default(false),
|
20
|
-
jsonb: jsonb('jsonb').$type<string[]>(),
|
21
|
-
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow()
|
22
|
-
});
|
23
|
-
|
24
|
-
export const citiesTable = pgTable('cities', {
|
25
|
-
id: serial('id').primaryKey(),
|
26
|
-
name: text('name').notNull(),
|
27
|
-
state: char('state', { length: 2 })
|
28
|
-
});
|
29
|
-
|
30
|
-
export const cities2Table = pgTable('cities', {
|
31
|
-
id: serial('id').primaryKey(),
|
32
|
-
name: text('name').notNull()
|
33
|
-
});
|
34
|
-
|
35
|
-
export const users2Table = pgTable('users2', {
|
36
|
-
id: serial('id').primaryKey(),
|
37
|
-
name: text('name').notNull(),
|
38
|
-
cityId: integer('city_id').references(() => citiesTable.id)
|
39
|
-
});
|
40
|
-
|
41
|
-
export const coursesTable = pgTable('courses', {
|
42
|
-
id: serial('id').primaryKey(),
|
43
|
-
name: text('name').notNull(),
|
44
|
-
categoryId: integer('category_id').references(() => courseCategoriesTable.id)
|
45
|
-
});
|
46
|
-
|
47
|
-
export const courseCategoriesTable = pgTable('course_categories', {
|
48
|
-
id: serial('id').primaryKey(),
|
49
|
-
name: text('name').notNull()
|
50
|
-
});
|
51
|
-
|
52
|
-
export const orders = pgTable('orders', {
|
53
|
-
id: serial('id').primaryKey(),
|
54
|
-
region: text('region').notNull(),
|
55
|
-
product: text('product')
|
56
|
-
.notNull()
|
57
|
-
.$default(() => 'random_string'),
|
58
|
-
amount: integer('amount').notNull(),
|
59
|
-
quantity: integer('quantity').notNull()
|
60
|
-
});
|
61
|
-
|
62
|
-
export const network = pgTable('network_table', {
|
63
|
-
inet: inet('inet').notNull(),
|
64
|
-
cidr: cidr('cidr').notNull(),
|
65
|
-
macaddr: macaddr('macaddr').notNull(),
|
66
|
-
macaddr8: macaddr8('macaddr8').notNull()
|
67
|
-
});
|
68
|
-
|
69
|
-
export const salEmp = pgTable('sal_emp', {
|
70
|
-
name: text('name'),
|
71
|
-
payByQuarter: integer('pay_by_quarter').array(),
|
72
|
-
schedule: text('schedule').array().array()
|
73
|
-
});
|
74
|
-
|
75
|
-
export const _tictactoe = pgTable('tictactoe', {
|
76
|
-
squares: integer('squares').array(3).array(3)
|
77
|
-
});
|
78
|
-
|
79
|
-
export const usersMigratorTable = pgTable('users12', {
|
80
|
-
id: serial('id').primaryKey(),
|
81
|
-
name: text('name').notNull(),
|
82
|
-
email: text('email').notNull()
|
83
|
-
});
|
84
|
-
|
85
|
-
// To test aggregate functions
|
86
|
-
export const aggregateTable = pgTable('aggregate_table', {
|
87
|
-
id: serial('id').notNull(),
|
88
|
-
name: text('name').notNull(),
|
89
|
-
a: integer('a'),
|
90
|
-
b: integer('b'),
|
91
|
-
c: integer('c'),
|
92
|
-
nullOnly: integer('null_only')
|
93
|
-
});
|