drizzle-orm 1.0.0-beta.1-94774b0 → 1.0.0-beta.1-69a2ca0
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/column-builder.cjs.map +1 -1
- package/column-builder.d.cts +1 -1
- package/column-builder.d.ts +1 -1
- package/column-builder.js.map +1 -1
- package/mysql-core/db.cjs.map +1 -1
- package/mysql-core/db.js.map +1 -1
- package/mysql-core/dialect.cjs +3 -3
- package/mysql-core/dialect.cjs.map +1 -1
- package/mysql-core/dialect.d.cts +2 -2
- package/mysql-core/dialect.d.ts +2 -2
- package/mysql-core/dialect.js +3 -3
- package/mysql-core/dialect.js.map +1 -1
- package/mysql-core/query-builders/query.cjs.map +1 -1
- package/mysql-core/query-builders/query.d.cts +3 -2
- package/mysql-core/query-builders/query.d.ts +3 -2
- package/mysql-core/query-builders/query.js.map +1 -1
- package/package.json +13 -1
- package/relations.cjs +69 -30
- package/relations.cjs.map +1 -1
- package/relations.d.cts +6 -5
- package/relations.d.ts +6 -5
- package/relations.js +69 -30
- package/relations.js.map +1 -1
- package/singlestore/driver.cjs +9 -5
- package/singlestore/driver.cjs.map +1 -1
- package/singlestore/driver.d.cts +9 -8
- package/singlestore/driver.d.ts +9 -8
- package/singlestore/driver.js +9 -5
- package/singlestore/driver.js.map +1 -1
- package/singlestore/migrator.cjs.map +1 -1
- package/singlestore/migrator.d.cts +2 -1
- package/singlestore/migrator.d.ts +2 -1
- package/singlestore/migrator.js.map +1 -1
- package/singlestore/session.cjs +32 -2
- package/singlestore/session.cjs.map +1 -1
- package/singlestore/session.d.cts +12 -7
- package/singlestore/session.d.ts +12 -7
- package/singlestore/session.js +32 -2
- package/singlestore/session.js.map +1 -1
- package/singlestore-core/columns/float.cjs +4 -0
- package/singlestore-core/columns/float.cjs.map +1 -1
- package/singlestore-core/columns/float.d.cts +1 -0
- package/singlestore-core/columns/float.d.ts +1 -0
- package/singlestore-core/columns/float.js +4 -0
- package/singlestore-core/columns/float.js.map +1 -1
- package/singlestore-core/columns/vector.cjs +72 -3
- package/singlestore-core/columns/vector.cjs.map +1 -1
- package/singlestore-core/columns/vector.d.cts +32 -9
- package/singlestore-core/columns/vector.d.ts +32 -9
- package/singlestore-core/columns/vector.js +70 -3
- package/singlestore-core/columns/vector.js.map +1 -1
- package/singlestore-core/columns/year.cjs +4 -0
- package/singlestore-core/columns/year.cjs.map +1 -1
- package/singlestore-core/columns/year.d.cts +1 -0
- package/singlestore-core/columns/year.d.ts +1 -0
- package/singlestore-core/columns/year.js +4 -0
- package/singlestore-core/columns/year.js.map +1 -1
- package/singlestore-core/db.cjs +16 -5
- package/singlestore-core/db.cjs.map +1 -1
- package/singlestore-core/db.d.cts +10 -6
- package/singlestore-core/db.d.ts +10 -6
- package/singlestore-core/db.js +16 -5
- package/singlestore-core/db.js.map +1 -1
- package/singlestore-core/dialect.cjs +186 -2
- package/singlestore-core/dialect.cjs.map +1 -1
- package/singlestore-core/dialect.d.cts +24 -1
- package/singlestore-core/dialect.d.ts +24 -1
- package/singlestore-core/dialect.js +195 -4
- package/singlestore-core/dialect.js.map +1 -1
- package/singlestore-core/query-builders/_query.cjs +136 -0
- package/singlestore-core/query-builders/_query.cjs.map +1 -0
- package/singlestore-core/query-builders/_query.d.cts +42 -0
- package/singlestore-core/query-builders/_query.d.ts +42 -0
- package/singlestore-core/query-builders/_query.js +101 -0
- package/singlestore-core/query-builders/_query.js.map +1 -0
- package/singlestore-core/query-builders/query.cjs +12 -32
- package/singlestore-core/query-builders/query.cjs.map +1 -1
- package/singlestore-core/query-builders/query.d.cts +8 -11
- package/singlestore-core/query-builders/query.d.ts +8 -11
- package/singlestore-core/query-builders/query.js +14 -22
- package/singlestore-core/query-builders/query.js.map +1 -1
- package/singlestore-core/session.cjs +3 -2
- package/singlestore-core/session.cjs.map +1 -1
- package/singlestore-core/session.d.cts +8 -5
- package/singlestore-core/session.d.ts +8 -5
- package/singlestore-core/session.js +3 -2
- package/singlestore-core/session.js.map +1 -1
- package/singlestore-proxy/driver.cjs +3 -2
- package/singlestore-proxy/driver.cjs.map +1 -1
- package/singlestore-proxy/driver.d.cts +3 -2
- package/singlestore-proxy/driver.d.ts +3 -2
- package/singlestore-proxy/driver.js +3 -2
- package/singlestore-proxy/driver.js.map +1 -1
- package/singlestore-proxy/migrator.cjs.map +1 -1
- package/singlestore-proxy/migrator.d.cts +2 -1
- package/singlestore-proxy/migrator.d.ts +2 -1
- package/singlestore-proxy/migrator.js.map +1 -1
- package/singlestore-proxy/session.cjs +26 -2
- package/singlestore-proxy/session.cjs.map +1 -1
- package/singlestore-proxy/session.d.cts +12 -7
- package/singlestore-proxy/session.d.ts +12 -7
- package/singlestore-proxy/session.js +26 -2
- package/singlestore-proxy/session.js.map +1 -1
- package/version.cjs +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
package/singlestore/session.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
import { fillPlaceholders, sql } from "../sql/sql.js";
|
|
12
12
|
import { mapResultRow } from "../utils.js";
|
|
13
13
|
class SingleStoreDriverPreparedQuery extends SingleStorePreparedQuery {
|
|
14
|
-
constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields, customResultMapper, generatedIds, returningIds) {
|
|
14
|
+
constructor(client, queryString, params, logger, cache, queryMetadata, cacheConfig, fields, customResultMapper, generatedIds, returningIds, isRqbV2Query) {
|
|
15
15
|
super(cache, queryMetadata, cacheConfig);
|
|
16
16
|
this.client = client;
|
|
17
17
|
this.params = params;
|
|
@@ -20,6 +20,7 @@ class SingleStoreDriverPreparedQuery extends SingleStorePreparedQuery {
|
|
|
20
20
|
this.customResultMapper = customResultMapper;
|
|
21
21
|
this.generatedIds = generatedIds;
|
|
22
22
|
this.returningIds = returningIds;
|
|
23
|
+
this.isRqbV2Query = isRqbV2Query;
|
|
23
24
|
this.rawQuery = {
|
|
24
25
|
sql: queryString,
|
|
25
26
|
// rowsAsArray: true,
|
|
@@ -45,6 +46,7 @@ class SingleStoreDriverPreparedQuery extends SingleStorePreparedQuery {
|
|
|
45
46
|
rawQuery;
|
|
46
47
|
query;
|
|
47
48
|
async execute(placeholderValues = {}) {
|
|
49
|
+
if (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);
|
|
48
50
|
const params = fillPlaceholders(this.params, placeholderValues);
|
|
49
51
|
this.logger.logQuery(this.rawQuery.sql, params);
|
|
50
52
|
const { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } = this;
|
|
@@ -84,6 +86,14 @@ class SingleStoreDriverPreparedQuery extends SingleStorePreparedQuery {
|
|
|
84
86
|
}
|
|
85
87
|
return rows.map((row) => mapResultRow(fields, row, joinsNotNullableMap));
|
|
86
88
|
}
|
|
89
|
+
async executeRqbV2(placeholderValues = {}) {
|
|
90
|
+
const params = fillPlaceholders(this.params, placeholderValues);
|
|
91
|
+
this.logger.logQuery(this.rawQuery.sql, params);
|
|
92
|
+
const { client, rawQuery, customResultMapper } = this;
|
|
93
|
+
const res = await client.query(rawQuery, params);
|
|
94
|
+
const rows = res[0];
|
|
95
|
+
return customResultMapper(rows);
|
|
96
|
+
}
|
|
87
97
|
async *iterator(placeholderValues = {}) {
|
|
88
98
|
const params = fillPlaceholders(this.params, placeholderValues);
|
|
89
99
|
const conn = (isPool(this.client) ? await this.client.getConnection() : this.client).connection;
|
|
@@ -127,9 +137,10 @@ class SingleStoreDriverPreparedQuery extends SingleStorePreparedQuery {
|
|
|
127
137
|
}
|
|
128
138
|
}
|
|
129
139
|
class SingleStoreDriverSession extends SingleStoreSession {
|
|
130
|
-
constructor(client, dialect, schema, options) {
|
|
140
|
+
constructor(client, dialect, relations, schema, options) {
|
|
131
141
|
super(dialect);
|
|
132
142
|
this.client = client;
|
|
143
|
+
this.relations = relations;
|
|
133
144
|
this.schema = schema;
|
|
134
145
|
this.options = options;
|
|
135
146
|
this.logger = options.logger ?? new NoopLogger();
|
|
@@ -153,6 +164,22 @@ class SingleStoreDriverSession extends SingleStoreSession {
|
|
|
153
164
|
returningIds
|
|
154
165
|
);
|
|
155
166
|
}
|
|
167
|
+
prepareRelationalQuery(query, fields, customResultMapper, generatedIds, returningIds) {
|
|
168
|
+
return new SingleStoreDriverPreparedQuery(
|
|
169
|
+
this.client,
|
|
170
|
+
query.sql,
|
|
171
|
+
query.params,
|
|
172
|
+
this.logger,
|
|
173
|
+
this.cache,
|
|
174
|
+
void 0,
|
|
175
|
+
void 0,
|
|
176
|
+
fields,
|
|
177
|
+
customResultMapper,
|
|
178
|
+
generatedIds,
|
|
179
|
+
returningIds,
|
|
180
|
+
true
|
|
181
|
+
);
|
|
182
|
+
}
|
|
156
183
|
/**
|
|
157
184
|
* @internal
|
|
158
185
|
* What is its purpose?
|
|
@@ -181,12 +208,14 @@ class SingleStoreDriverSession extends SingleStoreSession {
|
|
|
181
208
|
const session = isPool(this.client) ? new SingleStoreDriverSession(
|
|
182
209
|
await this.client.getConnection(),
|
|
183
210
|
this.dialect,
|
|
211
|
+
this.relations,
|
|
184
212
|
this.schema,
|
|
185
213
|
this.options
|
|
186
214
|
) : this;
|
|
187
215
|
const tx = new SingleStoreDriverTransaction(
|
|
188
216
|
this.dialect,
|
|
189
217
|
session,
|
|
218
|
+
this.relations,
|
|
190
219
|
this.schema,
|
|
191
220
|
0
|
|
192
221
|
);
|
|
@@ -221,6 +250,7 @@ class SingleStoreDriverTransaction extends SingleStoreTransaction {
|
|
|
221
250
|
const tx = new SingleStoreDriverTransaction(
|
|
222
251
|
this.dialect,
|
|
223
252
|
this.session,
|
|
253
|
+
this.relations,
|
|
224
254
|
this.schema,
|
|
225
255
|
this.nestedIndex + 1
|
|
226
256
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/singlestore/session.ts"],"sourcesContent":["import type { Connection as CallbackConnection } from 'mysql2';\nimport type {\n\tConnection,\n\tFieldPacket,\n\tOkPacket,\n\tPool,\n\tPoolConnection,\n\tQueryOptions,\n\tResultSetHeader,\n\tRowDataPacket,\n} from 'mysql2/promise';\nimport { once } from 'node:events';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { SingleStoreDialect } from '~/singlestore-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/singlestore-core/query-builders/select.types.ts';\nimport {\n\ttype PreparedQueryKind,\n\tSingleStorePreparedQuery,\n\ttype SingleStorePreparedQueryConfig,\n\ttype SingleStorePreparedQueryHKT,\n\ttype SingleStoreQueryResultHKT,\n\tSingleStoreSession,\n\tSingleStoreTransaction,\n\ttype SingleStoreTransactionConfig,\n} from '~/singlestore-core/session.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { fillPlaceholders, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type SingleStoreDriverClient = Pool | Connection;\n\nexport type SingleStoreRawQueryResult = [ResultSetHeader, FieldPacket[]];\nexport type SingleStoreQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;\nexport type SingleStoreQueryResult<\n\tT = any,\n> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];\n\nexport class SingleStoreDriverPreparedQuery<T extends SingleStorePreparedQueryConfig>\n\textends SingleStorePreparedQuery<T>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverPreparedQuery';\n\n\tprivate rawQuery: QueryOptions;\n\tprivate query: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\t// Keys that were used in $default and the value that was generated for them\n\t\tprivate generatedIds?: Record<string, unknown>[],\n\t\t// Keys that should be returned, it has the column with all properties + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper(cache, queryMetadata, cacheConfig);\n\t\tthis.rawQuery = {\n\t\t\tsql: queryString,\n\t\t\t// rowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t\tthis.query = {\n\t\t\tsql: queryString,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await this.queryWithCache(rawQuery.sql, params, async () => {\n\t\t\t\treturn await client.query<any>(rawQuery, params);\n\t\t\t});\n\t\t\tconst insertId = res[0].insertId;\n\t\t\tconst affectedRows = res[0].affectedRows;\n\t\t\t// for each row, I need to check keys from\n\t\t\tif (returningIds) {\n\t\t\t\tconst returningResponse = [];\n\t\t\t\tlet j = 0;\n\t\t\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\t\t\tfor (const column of returningIds) {\n\t\t\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tconst result = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await client.query<any[]>(query, params);\n\t\t});\n\t\tconst rows = result[0];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tasync *iterator(\n\t\tplaceholderValues: Record<string, unknown> = {},\n\t): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tconst conn = ((isPool(this.client) ? await this.client.getConnection() : this.client) as {} as {\n\t\t\tconnection: CallbackConnection;\n\t\t}).connection;\n\n\t\tconst { fields, query, rawQuery, joinsNotNullableMap, client, customResultMapper } = this;\n\t\tconst hasRowsMapper = Boolean(fields || customResultMapper);\n\t\tconst driverQuery = hasRowsMapper ? conn.query(query, params) : conn.query(rawQuery, params);\n\n\t\tconst stream = driverQuery.stream();\n\n\t\tfunction dataListener() {\n\t\t\tstream.pause();\n\t\t}\n\n\t\tstream.on('data', dataListener);\n\n\t\ttry {\n\t\t\tconst onEnd = once(stream, 'end');\n\t\t\tconst onError = once(stream, 'error');\n\n\t\t\twhile (true) {\n\t\t\t\tstream.resume();\n\t\t\t\tconst row = await Promise.race([onEnd, onError, new Promise((resolve) => stream.once('data', resolve))]);\n\t\t\t\tif (row === undefined || (Array.isArray(row) && row.length === 0)) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (row instanceof Error) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\tthrow row;\n\t\t\t\t} else {\n\t\t\t\t\tif (hasRowsMapper) {\n\t\t\t\t\t\tif (customResultMapper) {\n\t\t\t\t\t\t\tconst mappedRow = customResultMapper([row as unknown[]]);\n\t\t\t\t\t\t\tyield (Array.isArray(mappedRow) ? mappedRow[0] : mappedRow);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield mapResultRow(fields!, row as unknown[], joinsNotNullableMap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield row as T['execute'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tstream.off('data', dataListener);\n\t\t\tif (isPool(client)) {\n\t\t\t\tconn.end();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface SingleStoreDriverSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class SingleStoreDriverSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SingleStoreSession<SingleStoreQueryResultHKT, SingleStoreDriverPreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tdialect: SingleStoreDialect,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: SingleStoreDriverSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends SingleStorePreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): PreparedQueryKind<SingleStoreDriverPreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new SingleStoreDriverPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t) as PreparedQueryKind<SingleStoreDriverPreparedQueryHKT, T>;\n\t}\n\n\t/**\n\t * @internal\n\t * What is its purpose?\n\t */\n\tasync query(query: string, params: unknown[]): Promise<SingleStoreQueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\tsql: query,\n\t\t\tvalues: params,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t});\n\t\treturn result;\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\tconst querySql = this.dialect.sqlToQuery(query);\n\t\tthis.logger.logQuery(querySql.sql, querySql.params);\n\t\treturn this.client.execute(querySql.sql, querySql.params).then((result) => result[0]) as Promise<T[]>;\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SingleStoreDriverTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: SingleStoreTransactionConfig,\n\t): Promise<T> {\n\t\tconst session = isPool(this.client)\n\t\t\t? new SingleStoreDriverSession(\n\t\t\t\tawait this.client.getConnection(),\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t\t: this;\n\t\tconst tx = new SingleStoreDriverTransaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tsession as SingleStoreSession<any, any, any, any>,\n\t\t\tthis.schema,\n\t\t\t0,\n\t\t);\n\t\tif (config) {\n\t\t\tconst setTransactionConfigSql = this.getSetTransactionSQL(config);\n\t\t\tif (setTransactionConfigSql) {\n\t\t\t\tawait tx.execute(setTransactionConfigSql);\n\t\t\t}\n\t\t\tconst startTransactionSql = this.getStartTransactionSQL(config);\n\t\t\tawait (startTransactionSql ? tx.execute(startTransactionSql) : tx.execute(sql`begin`));\n\t\t} else {\n\t\t\tawait tx.execute(sql`begin`);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (isPool(this.client)) {\n\t\t\t\t(session.client as PoolConnection).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class SingleStoreDriverTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SingleStoreTransaction<\n\tSingleStoreDriverQueryResultHKT,\n\tSingleStoreDriverPreparedQueryHKT,\n\tTFullSchema,\n\tTSchema\n> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SingleStoreDriverTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SingleStoreDriverTransaction<TFullSchema, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction isPool(client: SingleStoreDriverClient): client is Pool {\n\treturn 'getConnection' in client;\n}\n\nexport interface SingleStoreDriverQueryResultHKT extends SingleStoreQueryResultHKT {\n\ttype: SingleStoreRawQueryResult;\n}\n\nexport interface SingleStoreDriverPreparedQueryHKT extends SingleStorePreparedQueryHKT {\n\ttype: SingleStoreDriverPreparedQuery<Assume<this['config'], SingleStorePreparedQueryConfig>>;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/singlestore/session.ts"],"sourcesContent":["import type { Connection as CallbackConnection } from 'mysql2';\nimport type {\n\tConnection,\n\tFieldPacket,\n\tOkPacket,\n\tPool,\n\tPoolConnection,\n\tQueryOptions,\n\tResultSetHeader,\n\tRowDataPacket,\n} from 'mysql2/promise';\nimport { once } from 'node:events';\nimport type * as V1 from '~/_relations.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport type { SingleStoreDialect } from '~/singlestore-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/singlestore-core/query-builders/select.types.ts';\nimport {\n\ttype PreparedQueryKind,\n\tSingleStorePreparedQuery,\n\ttype SingleStorePreparedQueryConfig,\n\ttype SingleStorePreparedQueryHKT,\n\ttype SingleStoreQueryResultHKT,\n\tSingleStoreSession,\n\tSingleStoreTransaction,\n\ttype SingleStoreTransactionConfig,\n} from '~/singlestore-core/session.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport { fillPlaceholders, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport type SingleStoreDriverClient = Pool | Connection;\n\nexport type SingleStoreRawQueryResult = [ResultSetHeader, FieldPacket[]];\nexport type SingleStoreQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;\nexport type SingleStoreQueryResult<\n\tT = any,\n> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];\n\nexport class SingleStoreDriverPreparedQuery<T extends SingleStorePreparedQueryConfig, TIsRqbV2 extends boolean = false>\n\textends SingleStorePreparedQuery<T>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverPreparedQuery';\n\n\tprivate rawQuery: QueryOptions;\n\tprivate query: QueryOptions;\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\tprivate customResultMapper?: (\n\t\t\trows: TIsRqbV2 extends true ? Record<string, unknown>[] : unknown[][],\n\t\t) => T['execute'],\n\t\t// Keys that were used in $default and the value that was generated for them\n\t\tprivate generatedIds?: Record<string, unknown>[],\n\t\t// Keys that should be returned, it has the column with all properties + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t\tprivate isRqbV2Query?: TIsRqbV2,\n\t) {\n\t\tsuper(cache, queryMetadata, cacheConfig);\n\t\tthis.rawQuery = {\n\t\t\tsql: queryString,\n\t\t\t// rowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t\tthis.query = {\n\t\t\tsql: queryString,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t};\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tif (this.isRqbV2Query) return this.executeRqbV2(placeholderValues);\n\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { fields, client, rawQuery, query, joinsNotNullableMap, customResultMapper, returningIds, generatedIds } =\n\t\t\tthis;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await this.queryWithCache(rawQuery.sql, params, async () => {\n\t\t\t\treturn await client.query<any>(rawQuery, params);\n\t\t\t});\n\n\t\t\tconst insertId = res[0].insertId;\n\t\t\tconst affectedRows = res[0].affectedRows;\n\t\t\t// for each row, I need to check keys from\n\t\t\tif (returningIds) {\n\t\t\t\tconst returningResponse = [];\n\t\t\t\tlet j = 0;\n\t\t\t\tfor (let i = insertId; i < insertId + affectedRows; i++) {\n\t\t\t\t\tfor (const column of returningIds) {\n\t\t\t\t\t\tconst key = returningIds[0]!.path[0]!;\n\t\t\t\t\t\tif (is(column.field, Column)) {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tif (column.field.primary && column.field.autoIncrement) {\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: i });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (column.field.defaultFn && generatedIds) {\n\t\t\t\t\t\t\t\t// generatedIds[rowIdx][key]\n\t\t\t\t\t\t\t\treturningResponse.push({ [key]: generatedIds[j]![key] });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tj++;\n\t\t\t\t}\n\n\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tconst result = await this.queryWithCache(query.sql, params, async () => {\n\t\t\treturn await client.query<any[]>(query, params);\n\t\t});\n\n\t\tconst rows = result[0];\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tprivate async executeRqbV2(placeholderValues: Record<string, unknown> = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.rawQuery.sql, params);\n\n\t\tconst { client, rawQuery, customResultMapper } = this;\n\t\tconst res = await client.query<any>(rawQuery, params);\n\n\t\tconst rows = res[0];\n\n\t\treturn (customResultMapper as (rows: Record<string, unknown>[]) => T['execute'])(rows);\n\t}\n\n\tasync *iterator(\n\t\tplaceholderValues: Record<string, unknown> = {},\n\t): AsyncGenerator<T['execute'] extends any[] ? T['execute'][number] : T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\t\tconst conn = ((isPool(this.client) ? await this.client.getConnection() : this.client) as {} as {\n\t\t\tconnection: CallbackConnection;\n\t\t}).connection;\n\n\t\tconst { fields, query, rawQuery, joinsNotNullableMap, client, customResultMapper } = this;\n\t\tconst hasRowsMapper = Boolean(fields || customResultMapper);\n\t\tconst driverQuery = hasRowsMapper ? conn.query(query, params) : conn.query(rawQuery, params);\n\n\t\tconst stream = driverQuery.stream();\n\n\t\tfunction dataListener() {\n\t\t\tstream.pause();\n\t\t}\n\n\t\tstream.on('data', dataListener);\n\n\t\ttry {\n\t\t\tconst onEnd = once(stream, 'end');\n\t\t\tconst onError = once(stream, 'error');\n\n\t\t\twhile (true) {\n\t\t\t\tstream.resume();\n\t\t\t\tconst row = await Promise.race([onEnd, onError, new Promise((resolve) => stream.once('data', resolve))]);\n\t\t\t\tif (row === undefined || (Array.isArray(row) && row.length === 0)) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else if (row instanceof Error) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\tthrow row;\n\t\t\t\t} else {\n\t\t\t\t\tif (hasRowsMapper) {\n\t\t\t\t\t\tif (customResultMapper) {\n\t\t\t\t\t\t\tconst mappedRow = (customResultMapper as (rows: unknown[][]) => T['execute'])([row as unknown[]]);\n\t\t\t\t\t\t\tyield (Array.isArray(mappedRow) ? mappedRow[0] : mappedRow);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tyield mapResultRow(fields!, row as unknown[], joinsNotNullableMap);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyield row as T['execute'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tstream.off('data', dataListener);\n\t\t\tif (isPool(client)) {\n\t\t\t\tconn.end();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface SingleStoreDriverSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\nexport class SingleStoreDriverSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SingleStoreSession<\n\tSingleStoreQueryResultHKT,\n\tSingleStoreDriverPreparedQueryHKT,\n\tTFullSchema,\n\tTRelations,\n\tTSchema\n> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverSession';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tdialect: SingleStoreDialect,\n\t\tprivate relations: TRelations,\n\t\tprivate schema: V1.RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: SingleStoreDriverSessionOptions,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery<T extends SingleStorePreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): PreparedQueryKind<SingleStoreDriverPreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new SingleStoreDriverPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t) as PreparedQueryKind<SingleStoreDriverPreparedQueryHKT, T>;\n\t}\n\n\tprepareRelationalQuery<T extends SingleStorePreparedQueryConfig>(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tcustomResultMapper: (rows: Record<string, unknown>[]) => T['execute'],\n\t\tgeneratedIds?: Record<string, unknown>[],\n\t\treturningIds?: SelectedFieldsOrdered,\n\t): PreparedQueryKind<SingleStorePreparedQueryHKT, T> {\n\t\t// Add returningId fields\n\t\t// Each driver gets them from response from database\n\t\treturn new SingleStoreDriverPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t\ttrue,\n\t\t) as any;\n\t}\n\n\t/**\n\t * @internal\n\t * What is its purpose?\n\t */\n\tasync query(query: string, params: unknown[]): Promise<SingleStoreQueryResult> {\n\t\tthis.logger.logQuery(query, params);\n\t\tconst result = await this.client.query({\n\t\t\tsql: query,\n\t\t\tvalues: params,\n\t\t\trowsAsArray: true,\n\t\t\ttypeCast: function(field: any, next: any) {\n\t\t\t\tif (field.type === 'TIMESTAMP' || field.type === 'DATETIME' || field.type === 'DATE') {\n\t\t\t\t\treturn field.string();\n\t\t\t\t}\n\t\t\t\treturn next();\n\t\t\t},\n\t\t});\n\t\treturn result;\n\t}\n\n\toverride all<T = unknown>(query: SQL): Promise<T[]> {\n\t\tconst querySql = this.dialect.sqlToQuery(query);\n\t\tthis.logger.logQuery(querySql.sql, querySql.params);\n\t\treturn this.client.execute(querySql.sql, querySql.params).then((result) => result[0]) as Promise<T[]>;\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SingleStoreDriverTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t\tconfig?: SingleStoreTransactionConfig,\n\t): Promise<T> {\n\t\tconst session = isPool(this.client)\n\t\t\t? new SingleStoreDriverSession(\n\t\t\t\tawait this.client.getConnection(),\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.relations,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t\t: this;\n\t\tconst tx = new SingleStoreDriverTransaction<TFullSchema, TRelations, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tsession as SingleStoreSession<any, any, any, any, any>,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\t0,\n\t\t);\n\t\tif (config) {\n\t\t\tconst setTransactionConfigSql = this.getSetTransactionSQL(config);\n\t\t\tif (setTransactionConfigSql) {\n\t\t\t\tawait tx.execute(setTransactionConfigSql);\n\t\t\t}\n\t\t\tconst startTransactionSql = this.getStartTransactionSQL(config);\n\t\t\tawait (startTransactionSql ? tx.execute(startTransactionSql) : tx.execute(sql`begin`));\n\t\t} else {\n\t\t\tawait tx.execute(sql`begin`);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql`rollback`);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (isPool(this.client)) {\n\t\t\t\t(session.client as PoolConnection).release();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class SingleStoreDriverTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTRelations extends AnyRelations,\n\tTSchema extends V1.TablesRelationalConfig,\n> extends SingleStoreTransaction<\n\tSingleStoreDriverQueryResultHKT,\n\tSingleStoreDriverPreparedQueryHKT,\n\tTFullSchema,\n\tTRelations,\n\tTSchema\n> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: SingleStoreDriverTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new SingleStoreDriverTransaction<TFullSchema, TRelations, TSchema>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis.relations,\n\t\t\tthis.schema,\n\t\t\tthis.nestedIndex + 1,\n\t\t);\n\t\tawait tx.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait tx.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait tx.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction isPool(client: SingleStoreDriverClient): client is Pool {\n\treturn 'getConnection' in client;\n}\n\nexport interface SingleStoreDriverQueryResultHKT extends SingleStoreQueryResultHKT {\n\ttype: SingleStoreRawQueryResult;\n}\n\nexport interface SingleStoreDriverPreparedQueryHKT extends SingleStorePreparedQueryHKT {\n\ttype: SingleStoreDriverPreparedQuery<Assume<this['config'], SingleStorePreparedQueryConfig>>;\n}\n"],"mappings":"AAWA,SAAS,YAAY;AAErB,SAAqB,iBAAiB;AAEtC,SAAS,cAAc;AACvB,SAAS,YAAY,UAAU;AAE/B,SAAS,kBAAkB;AAI3B;AAAA,EAEC;AAAA,EAIA;AAAA,EACA;AAAA,OAEM;AAEP,SAAS,kBAAkB,WAAW;AACtC,SAAsB,oBAAoB;AAUnC,MAAM,uCACJ,yBACT;AAAA,EAMC,YACS,QACR,aACQ,QACA,QACR,OACA,eAIA,aACQ,QACA,oBAIA,cAEA,cACA,cACP;AACD,UAAM,OAAO,eAAe,WAAW;AApB/B;AAEA;AACA;AAOA;AACA;AAIA;AAEA;AACA;AAGR,SAAK,WAAW;AAAA,MACf,KAAK;AAAA;AAAA,MAEL,UAAU,SAAS,OAAY,MAAW;AACzC,YAAI,MAAM,SAAS,eAAe,MAAM,SAAS,cAAc,MAAM,SAAS,QAAQ;AACrF,iBAAO,MAAM,OAAO;AAAA,QACrB;AACA,eAAO,KAAK;AAAA,MACb;AAAA,IACD;AACA,SAAK,QAAQ;AAAA,MACZ,KAAK;AAAA,MACL,aAAa;AAAA,MACb,UAAU,SAAS,OAAY,MAAW;AACzC,YAAI,MAAM,SAAS,eAAe,MAAM,SAAS,cAAc,MAAM,SAAS,QAAQ;AACrF,iBAAO,MAAM,OAAO;AAAA,QACrB;AACA,eAAO,KAAK;AAAA,MACb;AAAA,IACD;AAAA,EACD;AAAA,EA/CA,QAA0B,UAAU,IAAY;AAAA,EAExC;AAAA,EACA;AAAA,EA8CR,MAAM,QAAQ,oBAA6C,CAAC,GAA0B;AACrF,QAAI,KAAK,aAAc,QAAO,KAAK,aAAa,iBAAiB;AAEjE,UAAM,SAAS,iBAAiB,KAAK,QAAQ,iBAAiB;AAE9D,SAAK,OAAO,SAAS,KAAK,SAAS,KAAK,MAAM;AAE9C,UAAM,EAAE,QAAQ,QAAQ,UAAU,OAAO,qBAAqB,oBAAoB,cAAc,aAAa,IAC5G;AACD,QAAI,CAAC,UAAU,CAAC,oBAAoB;AACnC,YAAM,MAAM,MAAM,KAAK,eAAe,SAAS,KAAK,QAAQ,YAAY;AACvE,eAAO,MAAM,OAAO,MAAW,UAAU,MAAM;AAAA,MAChD,CAAC;AAED,YAAM,WAAW,IAAI,CAAC,EAAE;AACxB,YAAM,eAAe,IAAI,CAAC,EAAE;AAE5B,UAAI,cAAc;AACjB,cAAM,oBAAoB,CAAC;AAC3B,YAAI,IAAI;AACR,iBAAS,IAAI,UAAU,IAAI,WAAW,cAAc,KAAK;AACxD,qBAAW,UAAU,cAAc;AAClC,kBAAM,MAAM,aAAa,CAAC,EAAG,KAAK,CAAC;AACnC,gBAAI,GAAG,OAAO,OAAO,MAAM,GAAG;AAE7B,kBAAI,OAAO,MAAM,WAAW,OAAO,MAAM,eAAe;AACvD,kCAAkB,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;AAAA,cACpC;AACA,kBAAI,OAAO,MAAM,aAAa,cAAc;AAE3C,kCAAkB,KAAK,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,EAAG,GAAG,EAAE,CAAC;AAAA,cACxD;AAAA,YACD;AAAA,UACD;AACA;AAAA,QACD;AAEA,eAAO;AAAA,MACR;AACA,aAAO;AAAA,IACR;AAEA,UAAM,SAAS,MAAM,KAAK,eAAe,MAAM,KAAK,QAAQ,YAAY;AACvE,aAAO,MAAM,OAAO,MAAa,OAAO,MAAM;AAAA,IAC/C,CAAC;AAED,UAAM,OAAO,OAAO,CAAC;AAErB,QAAI,oBAAoB;AACvB,aAAO,mBAAmB,IAAI;AAAA,IAC/B;AAEA,WAAO,KAAK,IAAI,CAAC,QAAQ,aAA2B,QAAS,KAAK,mBAAmB,CAAC;AAAA,EACvF;AAAA,EAEA,MAAc,aAAa,oBAA6C,CAAC,GAA0B;AAClG,UAAM,SAAS,iBAAiB,KAAK,QAAQ,iBAAiB;AAE9D,SAAK,OAAO,SAAS,KAAK,SAAS,KAAK,MAAM;AAE9C,UAAM,EAAE,QAAQ,UAAU,mBAAmB,IAAI;AACjD,UAAM,MAAM,MAAM,OAAO,MAAW,UAAU,MAAM;AAEpD,UAAM,OAAO,IAAI,CAAC;AAElB,WAAQ,mBAAyE,IAAI;AAAA,EACtF;AAAA,EAEA,OAAO,SACN,oBAA6C,CAAC,GACqC;AACnF,UAAM,SAAS,iBAAiB,KAAK,QAAQ,iBAAiB;AAC9D,UAAM,QAAS,OAAO,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,cAAc,IAAI,KAAK,QAE3E;AAEH,UAAM,EAAE,QAAQ,OAAO,UAAU,qBAAqB,QAAQ,mBAAmB,IAAI;AACrF,UAAM,gBAAgB,QAAQ,UAAU,kBAAkB;AAC1D,UAAM,cAAc,gBAAgB,KAAK,MAAM,OAAO,MAAM,IAAI,KAAK,MAAM,UAAU,MAAM;AAE3F,UAAM,SAAS,YAAY,OAAO;AAElC,aAAS,eAAe;AACvB,aAAO,MAAM;AAAA,IACd;AAEA,WAAO,GAAG,QAAQ,YAAY;AAE9B,QAAI;AACH,YAAM,QAAQ,KAAK,QAAQ,KAAK;AAChC,YAAM,UAAU,KAAK,QAAQ,OAAO;AAEpC,aAAO,MAAM;AACZ,eAAO,OAAO;AACd,cAAM,MAAM,MAAM,QAAQ,KAAK,CAAC,OAAO,SAAS,IAAI,QAAQ,CAAC,YAAY,OAAO,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC;AACvG,YAAI,QAAQ,UAAc,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW,GAAI;AAClE;AAAA,QACD,WAAW,eAAe,OAAO;AAChC,gBAAM;AAAA,QACP,OAAO;AACN,cAAI,eAAe;AAClB,gBAAI,oBAAoB;AACvB,oBAAM,YAAa,mBAA2D,CAAC,GAAgB,CAAC;AAChG,oBAAO,MAAM,QAAQ,SAAS,IAAI,UAAU,CAAC,IAAI;AAAA,YAClD,OAAO;AACN,oBAAM,aAAa,QAAS,KAAkB,mBAAmB;AAAA,YAClE;AAAA,UACD,OAAO;AACN,kBAAM;AAAA,UACP;AAAA,QACD;AAAA,MACD;AAAA,IACD,UAAE;AACD,aAAO,IAAI,QAAQ,YAAY;AAC/B,UAAI,OAAO,MAAM,GAAG;AACnB,aAAK,IAAI;AAAA,MACV;AAAA,IACD;AAAA,EACD;AACD;AAOO,MAAM,iCAIH,mBAMR;AAAA,EAMD,YACS,QACR,SACQ,WACA,QACA,SACP;AACD,UAAM,OAAO;AANL;AAEA;AACA;AACA;AAGR,SAAK,SAAS,QAAQ,UAAU,IAAI,WAAW;AAC/C,SAAK,QAAQ,QAAQ,SAAS,IAAI,UAAU;AAAA,EAC7C;AAAA,EAfA,QAA0B,UAAU,IAAY;AAAA,EAExC;AAAA,EACA;AAAA,EAcR,aACC,OACA,QACA,oBACA,cACA,cACA,eAIA,aAC0D;AAG1D,WAAO,IAAI;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EAEA,uBACC,OACA,QACA,oBACA,cACA,cACoD;AAGpD,WAAO,IAAI;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAM,OAAe,QAAoD;AAC9E,SAAK,OAAO,SAAS,OAAO,MAAM;AAClC,UAAM,SAAS,MAAM,KAAK,OAAO,MAAM;AAAA,MACtC,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,UAAU,SAAS,OAAY,MAAW;AACzC,YAAI,MAAM,SAAS,eAAe,MAAM,SAAS,cAAc,MAAM,SAAS,QAAQ;AACrF,iBAAO,MAAM,OAAO;AAAA,QACrB;AACA,eAAO,KAAK;AAAA,MACb;AAAA,IACD,CAAC;AACD,WAAO;AAAA,EACR;AAAA,EAES,IAAiB,OAA0B;AACnD,UAAM,WAAW,KAAK,QAAQ,WAAW,KAAK;AAC9C,SAAK,OAAO,SAAS,SAAS,KAAK,SAAS,MAAM;AAClD,WAAO,KAAK,OAAO,QAAQ,SAAS,KAAK,SAAS,MAAM,EAAE,KAAK,CAAC,WAAW,OAAO,CAAC,CAAC;AAAA,EACrF;AAAA,EAEA,MAAe,YACd,aACA,QACa;AACb,UAAM,UAAU,OAAO,KAAK,MAAM,IAC/B,IAAI;AAAA,MACL,MAAM,KAAK,OAAO,cAAc;AAAA,MAChC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACN,IACE;AACH,UAAM,KAAK,IAAI;AAAA,MACd,KAAK;AAAA,MACL;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,IACD;AACA,QAAI,QAAQ;AACX,YAAM,0BAA0B,KAAK,qBAAqB,MAAM;AAChE,UAAI,yBAAyB;AAC5B,cAAM,GAAG,QAAQ,uBAAuB;AAAA,MACzC;AACA,YAAM,sBAAsB,KAAK,uBAAuB,MAAM;AAC9D,aAAO,sBAAsB,GAAG,QAAQ,mBAAmB,IAAI,GAAG,QAAQ,UAAU;AAAA,IACrF,OAAO;AACN,YAAM,GAAG,QAAQ,UAAU;AAAA,IAC5B;AACA,QAAI;AACH,YAAM,SAAS,MAAM,YAAY,EAAE;AACnC,YAAM,GAAG,QAAQ,WAAW;AAC5B,aAAO;AAAA,IACR,SAAS,KAAK;AACb,YAAM,GAAG,QAAQ,aAAa;AAC9B,YAAM;AAAA,IACP,UAAE;AACD,UAAI,OAAO,KAAK,MAAM,GAAG;AACxB,QAAC,QAAQ,OAA0B,QAAQ;AAAA,MAC5C;AAAA,IACD;AAAA,EACD;AACD;AAEO,MAAM,qCAIH,uBAMR;AAAA,EACD,QAA0B,UAAU,IAAY;AAAA,EAEhD,MAAe,YACd,aACa;AACb,UAAM,gBAAgB,KAAK,KAAK,cAAc,CAAC;AAC/C,UAAM,KAAK,IAAI;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,cAAc;AAAA,IACpB;AACA,UAAM,GAAG,QAAQ,IAAI,IAAI,aAAa,aAAa,EAAE,CAAC;AACtD,QAAI;AACH,YAAM,SAAS,MAAM,YAAY,EAAE;AACnC,YAAM,GAAG,QAAQ,IAAI,IAAI,qBAAqB,aAAa,EAAE,CAAC;AAC9D,aAAO;AAAA,IACR,SAAS,KAAK;AACb,YAAM,GAAG,QAAQ,IAAI,IAAI,yBAAyB,aAAa,EAAE,CAAC;AAClE,YAAM;AAAA,IACP;AAAA,EACD;AACD;AAEA,SAAS,OAAO,QAAiD;AAChE,SAAO,mBAAmB;AAC3B;","names":[]}
|
|
@@ -58,6 +58,10 @@ class SingleStoreFloat extends import_common.SingleStoreColumnWithAutoIncrement
|
|
|
58
58
|
}
|
|
59
59
|
return this.unsigned ? `${type} unsigned` : type;
|
|
60
60
|
}
|
|
61
|
+
mapFromDriverValue(value) {
|
|
62
|
+
if (typeof value !== "number") return Number(value);
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
61
65
|
}
|
|
62
66
|
function float(a, b) {
|
|
63
67
|
const { name, config } = (0, import_utils.getColumnNameAndConfig)(a, b);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/singlestore-core/columns/float.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SingleStoreColumnBuilderWithAutoIncrement, SingleStoreColumnWithAutoIncrement } from './common.ts';\n\nexport class SingleStoreFloatBuilder<TUnsigned extends boolean | undefined>\n\textends SingleStoreColumnBuilderWithAutoIncrement<{\n\t\tname: string;\n\t\tdataType: Equal<TUnsigned, true> extends true ? 'number ufloat' : 'number float';\n\t\tdata: number;\n\t\tdriverParam: number | string;\n\t}, SingleStoreFloatConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreFloatBuilder';\n\n\tconstructor(name: string, config: SingleStoreFloatConfig | undefined) {\n\t\tsuper(name, config?.unsigned ? 'number ufloat' : 'number float' as any, 'SingleStoreFloat');\n\t\tthis.config.precision = config?.precision;\n\t\tthis.config.scale = config?.scale;\n\t\tthis.config.unsigned = config?.unsigned;\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreFloat(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreFloat<T extends ColumnBaseConfig<'number float' | 'number ufloat'>>\n\textends SingleStoreColumnWithAutoIncrement<T, SingleStoreFloatConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreFloat';\n\n\treadonly precision: number | undefined = this.config.precision;\n\treadonly scale: number | undefined = this.config.scale;\n\treadonly unsigned: boolean | undefined = this.config.unsigned;\n\n\tgetSQLType(): string {\n\t\tlet type = '';\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\ttype += `float(${this.precision},${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\ttype += 'float';\n\t\t} else {\n\t\t\ttype += `float(${this.precision},0)`;\n\t\t}\n\t\treturn this.unsigned ? `${type} unsigned` : type;\n\t}\n}\n\nexport interface SingleStoreFloatConfig<TUnsigned extends boolean | undefined = boolean | undefined> {\n\tprecision?: number;\n\tscale?: number;\n\tunsigned?: TUnsigned;\n}\n\nexport function float<TUnsigned extends boolean | undefined>(\n\tconfig?: SingleStoreFloatConfig<TUnsigned>,\n): SingleStoreFloatBuilder<TUnsigned>;\nexport function float<TUnsigned extends boolean | undefined>(\n\tname: string,\n\tconfig?: SingleStoreFloatConfig<TUnsigned>,\n): SingleStoreFloatBuilder<TUnsigned>;\nexport function float(a?: string | SingleStoreFloatConfig, b?: SingleStoreFloatConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SingleStoreFloatConfig>(a, b);\n\treturn new SingleStoreFloatBuilder(name, config);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA2B;AAE3B,mBAAmD;AACnD,oBAA8F;AAEvF,MAAM,gCACJ,wDAMT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAA4C;AACrE,UAAM,MAAM,QAAQ,WAAW,kBAAkB,gBAAuB,kBAAkB;AAC1F,SAAK,OAAO,YAAY,QAAQ;AAChC,SAAK,OAAO,QAAQ,QAAQ;AAC5B,SAAK,OAAO,WAAW,QAAQ;AAAA,EAChC;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,yBACJ,iDACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEvC,YAAgC,KAAK,OAAO;AAAA,EAC5C,QAA4B,KAAK,OAAO;AAAA,EACxC,WAAgC,KAAK,OAAO;AAAA,EAErD,aAAqB;AACpB,QAAI,OAAO;AACX,QAAI,KAAK,cAAc,UAAa,KAAK,UAAU,QAAW;AAC7D,cAAQ,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK;AAAA,IAC9C,WAAW,KAAK,cAAc,QAAW;AACxC,cAAQ;AAAA,IACT,OAAO;AACN,cAAQ,SAAS,KAAK,SAAS;AAAA,IAChC;AACA,WAAO,KAAK,WAAW,GAAG,IAAI,cAAc;AAAA,EAC7C;AACD;AAeO,SAAS,MAAM,GAAqC,GAA4B;AACtF,QAAM,EAAE,MAAM,OAAO,QAAI,qCAA+C,GAAG,CAAC;AAC5E,SAAO,IAAI,wBAAwB,MAAM,MAAM;AAChD;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/singlestore-core/columns/float.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SingleStoreColumnBuilderWithAutoIncrement, SingleStoreColumnWithAutoIncrement } from './common.ts';\n\nexport class SingleStoreFloatBuilder<TUnsigned extends boolean | undefined>\n\textends SingleStoreColumnBuilderWithAutoIncrement<{\n\t\tname: string;\n\t\tdataType: Equal<TUnsigned, true> extends true ? 'number ufloat' : 'number float';\n\t\tdata: number;\n\t\tdriverParam: number | string;\n\t}, SingleStoreFloatConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreFloatBuilder';\n\n\tconstructor(name: string, config: SingleStoreFloatConfig | undefined) {\n\t\tsuper(name, config?.unsigned ? 'number ufloat' : 'number float' as any, 'SingleStoreFloat');\n\t\tthis.config.precision = config?.precision;\n\t\tthis.config.scale = config?.scale;\n\t\tthis.config.unsigned = config?.unsigned;\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreFloat(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreFloat<T extends ColumnBaseConfig<'number float' | 'number ufloat'>>\n\textends SingleStoreColumnWithAutoIncrement<T, SingleStoreFloatConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreFloat';\n\n\treadonly precision: number | undefined = this.config.precision;\n\treadonly scale: number | undefined = this.config.scale;\n\treadonly unsigned: boolean | undefined = this.config.unsigned;\n\n\tgetSQLType(): string {\n\t\tlet type = '';\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\ttype += `float(${this.precision},${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\ttype += 'float';\n\t\t} else {\n\t\t\ttype += `float(${this.precision},0)`;\n\t\t}\n\t\treturn this.unsigned ? `${type} unsigned` : type;\n\t}\n\n\toverride mapFromDriverValue(value: unknown): number {\n\t\tif (typeof value !== 'number') return Number(value);\n\n\t\treturn value;\n\t}\n}\n\nexport interface SingleStoreFloatConfig<TUnsigned extends boolean | undefined = boolean | undefined> {\n\tprecision?: number;\n\tscale?: number;\n\tunsigned?: TUnsigned;\n}\n\nexport function float<TUnsigned extends boolean | undefined>(\n\tconfig?: SingleStoreFloatConfig<TUnsigned>,\n): SingleStoreFloatBuilder<TUnsigned>;\nexport function float<TUnsigned extends boolean | undefined>(\n\tname: string,\n\tconfig?: SingleStoreFloatConfig<TUnsigned>,\n): SingleStoreFloatBuilder<TUnsigned>;\nexport function float(a?: string | SingleStoreFloatConfig, b?: SingleStoreFloatConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SingleStoreFloatConfig>(a, b);\n\treturn new SingleStoreFloatBuilder(name, config);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA2B;AAE3B,mBAAmD;AACnD,oBAA8F;AAEvF,MAAM,gCACJ,wDAMT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAA4C;AACrE,UAAM,MAAM,QAAQ,WAAW,kBAAkB,gBAAuB,kBAAkB;AAC1F,SAAK,OAAO,YAAY,QAAQ;AAChC,SAAK,OAAO,QAAQ,QAAQ;AAC5B,SAAK,OAAO,WAAW,QAAQ;AAAA,EAChC;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,yBACJ,iDACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEvC,YAAgC,KAAK,OAAO;AAAA,EAC5C,QAA4B,KAAK,OAAO;AAAA,EACxC,WAAgC,KAAK,OAAO;AAAA,EAErD,aAAqB;AACpB,QAAI,OAAO;AACX,QAAI,KAAK,cAAc,UAAa,KAAK,UAAU,QAAW;AAC7D,cAAQ,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK;AAAA,IAC9C,WAAW,KAAK,cAAc,QAAW;AACxC,cAAQ;AAAA,IACT,OAAO;AACN,cAAQ,SAAS,KAAK,SAAS;AAAA,IAChC;AACA,WAAO,KAAK,WAAW,GAAG,IAAI,cAAc;AAAA,EAC7C;AAAA,EAES,mBAAmB,OAAwB;AACnD,QAAI,OAAO,UAAU,SAAU,QAAO,OAAO,KAAK;AAElD,WAAO;AAAA,EACR;AACD;AAeO,SAAS,MAAM,GAAqC,GAA4B;AACtF,QAAM,EAAE,MAAM,OAAO,QAAI,qCAA+C,GAAG,CAAC;AAC5E,SAAO,IAAI,wBAAwB,MAAM,MAAM;AAChD;","names":[]}
|
|
@@ -17,6 +17,7 @@ export declare class SingleStoreFloat<T extends ColumnBaseConfig<'number float'
|
|
|
17
17
|
readonly scale: number | undefined;
|
|
18
18
|
readonly unsigned: boolean | undefined;
|
|
19
19
|
getSQLType(): string;
|
|
20
|
+
mapFromDriverValue(value: unknown): number;
|
|
20
21
|
}
|
|
21
22
|
export interface SingleStoreFloatConfig<TUnsigned extends boolean | undefined = boolean | undefined> {
|
|
22
23
|
precision?: number;
|
|
@@ -17,6 +17,7 @@ export declare class SingleStoreFloat<T extends ColumnBaseConfig<'number float'
|
|
|
17
17
|
readonly scale: number | undefined;
|
|
18
18
|
readonly unsigned: boolean | undefined;
|
|
19
19
|
getSQLType(): string;
|
|
20
|
+
mapFromDriverValue(value: unknown): number;
|
|
20
21
|
}
|
|
21
22
|
export interface SingleStoreFloatConfig<TUnsigned extends boolean | undefined = boolean | undefined> {
|
|
22
23
|
precision?: number;
|
|
@@ -33,6 +33,10 @@ class SingleStoreFloat extends SingleStoreColumnWithAutoIncrement {
|
|
|
33
33
|
}
|
|
34
34
|
return this.unsigned ? `${type} unsigned` : type;
|
|
35
35
|
}
|
|
36
|
+
mapFromDriverValue(value) {
|
|
37
|
+
if (typeof value !== "number") return Number(value);
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
36
40
|
}
|
|
37
41
|
function float(a, b) {
|
|
38
42
|
const { name, config } = getColumnNameAndConfig(a, b);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/singlestore-core/columns/float.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SingleStoreColumnBuilderWithAutoIncrement, SingleStoreColumnWithAutoIncrement } from './common.ts';\n\nexport class SingleStoreFloatBuilder<TUnsigned extends boolean | undefined>\n\textends SingleStoreColumnBuilderWithAutoIncrement<{\n\t\tname: string;\n\t\tdataType: Equal<TUnsigned, true> extends true ? 'number ufloat' : 'number float';\n\t\tdata: number;\n\t\tdriverParam: number | string;\n\t}, SingleStoreFloatConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreFloatBuilder';\n\n\tconstructor(name: string, config: SingleStoreFloatConfig | undefined) {\n\t\tsuper(name, config?.unsigned ? 'number ufloat' : 'number float' as any, 'SingleStoreFloat');\n\t\tthis.config.precision = config?.precision;\n\t\tthis.config.scale = config?.scale;\n\t\tthis.config.unsigned = config?.unsigned;\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreFloat(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreFloat<T extends ColumnBaseConfig<'number float' | 'number ufloat'>>\n\textends SingleStoreColumnWithAutoIncrement<T, SingleStoreFloatConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreFloat';\n\n\treadonly precision: number | undefined = this.config.precision;\n\treadonly scale: number | undefined = this.config.scale;\n\treadonly unsigned: boolean | undefined = this.config.unsigned;\n\n\tgetSQLType(): string {\n\t\tlet type = '';\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\ttype += `float(${this.precision},${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\ttype += 'float';\n\t\t} else {\n\t\t\ttype += `float(${this.precision},0)`;\n\t\t}\n\t\treturn this.unsigned ? `${type} unsigned` : type;\n\t}\n}\n\nexport interface SingleStoreFloatConfig<TUnsigned extends boolean | undefined = boolean | undefined> {\n\tprecision?: number;\n\tscale?: number;\n\tunsigned?: TUnsigned;\n}\n\nexport function float<TUnsigned extends boolean | undefined>(\n\tconfig?: SingleStoreFloatConfig<TUnsigned>,\n): SingleStoreFloatBuilder<TUnsigned>;\nexport function float<TUnsigned extends boolean | undefined>(\n\tname: string,\n\tconfig?: SingleStoreFloatConfig<TUnsigned>,\n): SingleStoreFloatBuilder<TUnsigned>;\nexport function float(a?: string | SingleStoreFloatConfig, b?: SingleStoreFloatConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SingleStoreFloatConfig>(a, b);\n\treturn new SingleStoreFloatBuilder(name, config);\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAE3B,SAAqB,8BAA8B;AACnD,SAAS,2CAA2C,0CAA0C;AAEvF,MAAM,gCACJ,0CAMT;AAAA,EACC,QAA0B,UAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAA4C;AACrE,UAAM,MAAM,QAAQ,WAAW,kBAAkB,gBAAuB,kBAAkB;AAC1F,SAAK,OAAO,YAAY,QAAQ;AAChC,SAAK,OAAO,QAAQ,QAAQ;AAC5B,SAAK,OAAO,WAAW,QAAQ;AAAA,EAChC;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,yBACJ,mCACT;AAAA,EACC,QAA0B,UAAU,IAAY;AAAA,EAEvC,YAAgC,KAAK,OAAO;AAAA,EAC5C,QAA4B,KAAK,OAAO;AAAA,EACxC,WAAgC,KAAK,OAAO;AAAA,EAErD,aAAqB;AACpB,QAAI,OAAO;AACX,QAAI,KAAK,cAAc,UAAa,KAAK,UAAU,QAAW;AAC7D,cAAQ,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK;AAAA,IAC9C,WAAW,KAAK,cAAc,QAAW;AACxC,cAAQ;AAAA,IACT,OAAO;AACN,cAAQ,SAAS,KAAK,SAAS;AAAA,IAChC;AACA,WAAO,KAAK,WAAW,GAAG,IAAI,cAAc;AAAA,EAC7C;AACD;AAeO,SAAS,MAAM,GAAqC,GAA4B;AACtF,QAAM,EAAE,MAAM,OAAO,IAAI,uBAA+C,GAAG,CAAC;AAC5E,SAAO,IAAI,wBAAwB,MAAM,MAAM;AAChD;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/singlestore-core/columns/float.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SingleStoreColumnBuilderWithAutoIncrement, SingleStoreColumnWithAutoIncrement } from './common.ts';\n\nexport class SingleStoreFloatBuilder<TUnsigned extends boolean | undefined>\n\textends SingleStoreColumnBuilderWithAutoIncrement<{\n\t\tname: string;\n\t\tdataType: Equal<TUnsigned, true> extends true ? 'number ufloat' : 'number float';\n\t\tdata: number;\n\t\tdriverParam: number | string;\n\t}, SingleStoreFloatConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreFloatBuilder';\n\n\tconstructor(name: string, config: SingleStoreFloatConfig | undefined) {\n\t\tsuper(name, config?.unsigned ? 'number ufloat' : 'number float' as any, 'SingleStoreFloat');\n\t\tthis.config.precision = config?.precision;\n\t\tthis.config.scale = config?.scale;\n\t\tthis.config.unsigned = config?.unsigned;\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreFloat(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreFloat<T extends ColumnBaseConfig<'number float' | 'number ufloat'>>\n\textends SingleStoreColumnWithAutoIncrement<T, SingleStoreFloatConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreFloat';\n\n\treadonly precision: number | undefined = this.config.precision;\n\treadonly scale: number | undefined = this.config.scale;\n\treadonly unsigned: boolean | undefined = this.config.unsigned;\n\n\tgetSQLType(): string {\n\t\tlet type = '';\n\t\tif (this.precision !== undefined && this.scale !== undefined) {\n\t\t\ttype += `float(${this.precision},${this.scale})`;\n\t\t} else if (this.precision === undefined) {\n\t\t\ttype += 'float';\n\t\t} else {\n\t\t\ttype += `float(${this.precision},0)`;\n\t\t}\n\t\treturn this.unsigned ? `${type} unsigned` : type;\n\t}\n\n\toverride mapFromDriverValue(value: unknown): number {\n\t\tif (typeof value !== 'number') return Number(value);\n\n\t\treturn value;\n\t}\n}\n\nexport interface SingleStoreFloatConfig<TUnsigned extends boolean | undefined = boolean | undefined> {\n\tprecision?: number;\n\tscale?: number;\n\tunsigned?: TUnsigned;\n}\n\nexport function float<TUnsigned extends boolean | undefined>(\n\tconfig?: SingleStoreFloatConfig<TUnsigned>,\n): SingleStoreFloatBuilder<TUnsigned>;\nexport function float<TUnsigned extends boolean | undefined>(\n\tname: string,\n\tconfig?: SingleStoreFloatConfig<TUnsigned>,\n): SingleStoreFloatBuilder<TUnsigned>;\nexport function float(a?: string | SingleStoreFloatConfig, b?: SingleStoreFloatConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SingleStoreFloatConfig>(a, b);\n\treturn new SingleStoreFloatBuilder(name, config);\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAE3B,SAAqB,8BAA8B;AACnD,SAAS,2CAA2C,0CAA0C;AAEvF,MAAM,gCACJ,0CAMT;AAAA,EACC,QAA0B,UAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAA4C;AACrE,UAAM,MAAM,QAAQ,WAAW,kBAAkB,gBAAuB,kBAAkB;AAC1F,SAAK,OAAO,YAAY,QAAQ;AAChC,SAAK,OAAO,QAAQ,QAAQ;AAC5B,SAAK,OAAO,WAAW,QAAQ;AAAA,EAChC;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,yBACJ,mCACT;AAAA,EACC,QAA0B,UAAU,IAAY;AAAA,EAEvC,YAAgC,KAAK,OAAO;AAAA,EAC5C,QAA4B,KAAK,OAAO;AAAA,EACxC,WAAgC,KAAK,OAAO;AAAA,EAErD,aAAqB;AACpB,QAAI,OAAO;AACX,QAAI,KAAK,cAAc,UAAa,KAAK,UAAU,QAAW;AAC7D,cAAQ,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK;AAAA,IAC9C,WAAW,KAAK,cAAc,QAAW;AACxC,cAAQ;AAAA,IACT,OAAO;AACN,cAAQ,SAAS,KAAK,SAAS;AAAA,IAChC;AACA,WAAO,KAAK,WAAW,GAAG,IAAI,cAAc;AAAA,EAC7C;AAAA,EAES,mBAAmB,OAAwB;AACnD,QAAI,OAAO,UAAU,SAAU,QAAO,OAAO,KAAK;AAElD,WAAO;AAAA,EACR;AACD;AAeO,SAAS,MAAM,GAAqC,GAA4B;AACtF,QAAM,EAAE,MAAM,OAAO,IAAI,uBAA+C,GAAG,CAAC;AAC5E,SAAO,IAAI,wBAAwB,MAAM,MAAM;AAChD;","names":[]}
|
|
@@ -18,6 +18,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var vector_exports = {};
|
|
20
20
|
__export(vector_exports, {
|
|
21
|
+
SingleStoreBigIntVector: () => SingleStoreBigIntVector,
|
|
22
|
+
SingleStoreBigIntVectorBuilder: () => SingleStoreBigIntVectorBuilder,
|
|
21
23
|
SingleStoreVector: () => SingleStoreVector,
|
|
22
24
|
SingleStoreVectorBuilder: () => SingleStoreVectorBuilder,
|
|
23
25
|
vector: () => vector
|
|
@@ -53,18 +55,85 @@ class SingleStoreVector extends import_common.SingleStoreColumn {
|
|
|
53
55
|
return `vector(${this.config.length}, ${this.elementType || "F32"})`;
|
|
54
56
|
}
|
|
55
57
|
mapToDriverValue(value) {
|
|
56
|
-
return
|
|
58
|
+
return `[${value.map((e) => e.toString()).join(",")}]`;
|
|
57
59
|
}
|
|
58
60
|
mapFromDriverValue(value) {
|
|
59
|
-
|
|
61
|
+
if (typeof value === "string") {
|
|
62
|
+
if (value.startsWith("[")) return value.slice(1, -1).split(",").map(Number);
|
|
63
|
+
value = Buffer.from(value, "hex");
|
|
64
|
+
}
|
|
65
|
+
if (Buffer.isBuffer(value)) {
|
|
66
|
+
const type = this.elementType || "F32";
|
|
67
|
+
const bytearr = new Uint8Array(value);
|
|
68
|
+
switch (type) {
|
|
69
|
+
case "I8": {
|
|
70
|
+
return Array.from(new Int8Array(bytearr.buffer, 0, bytearr.length / 1));
|
|
71
|
+
}
|
|
72
|
+
case "I16": {
|
|
73
|
+
return Array.from(new Int16Array(bytearr.buffer, 0, bytearr.length / 2));
|
|
74
|
+
}
|
|
75
|
+
case "I32": {
|
|
76
|
+
return Array.from(new Int32Array(bytearr.buffer, 0, bytearr.length / 4));
|
|
77
|
+
}
|
|
78
|
+
case "F32": {
|
|
79
|
+
return Array.from(new Float32Array(bytearr.buffer, 0, bytearr.length / 4));
|
|
80
|
+
}
|
|
81
|
+
case "F64": {
|
|
82
|
+
return Array.from(new Float64Array(bytearr.buffer, 0, bytearr.length / 8));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
class SingleStoreBigIntVectorBuilder extends import_common.SingleStoreColumnBuilder {
|
|
90
|
+
static [import_entity.entityKind] = "SingleStoreBigIntVectorBuilder";
|
|
91
|
+
constructor(name, config) {
|
|
92
|
+
super(name, "array int64vector", "SingleStoreBigIntVector");
|
|
93
|
+
this.config.length = config.dimensions;
|
|
94
|
+
this.config.isLengthExact = true;
|
|
95
|
+
}
|
|
96
|
+
/** @internal */
|
|
97
|
+
build(table) {
|
|
98
|
+
return new SingleStoreBigIntVector(
|
|
99
|
+
table,
|
|
100
|
+
this.config
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
/** @internal */
|
|
104
|
+
generatedAlwaysAs(as, config) {
|
|
105
|
+
throw new Error("Method not implemented.");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
class SingleStoreBigIntVector extends import_common.SingleStoreColumn {
|
|
109
|
+
static [import_entity.entityKind] = "SingleStoreBigIntVector";
|
|
110
|
+
elementType = "I64";
|
|
111
|
+
getSQLType() {
|
|
112
|
+
return `vector(${this.config.length}, ${this.elementType}})`;
|
|
113
|
+
}
|
|
114
|
+
mapToDriverValue(value) {
|
|
115
|
+
return `[${value.map((e) => e.toString()).join(",")}]`;
|
|
116
|
+
}
|
|
117
|
+
mapFromDriverValue(value) {
|
|
118
|
+
if (typeof value === "string") {
|
|
119
|
+
if (value.startsWith("[")) return value.slice(1, -1).split(",").map(BigInt);
|
|
120
|
+
value = Buffer.from(value, "hex");
|
|
121
|
+
}
|
|
122
|
+
if (Buffer.isBuffer(value)) {
|
|
123
|
+
const bytearr = new Uint8Array(value);
|
|
124
|
+
return Array.from(new BigInt64Array(bytearr.buffer, 0, bytearr.length / 8));
|
|
125
|
+
}
|
|
126
|
+
return value;
|
|
60
127
|
}
|
|
61
128
|
}
|
|
62
129
|
function vector(a, b) {
|
|
63
130
|
const { name, config } = (0, import_utils.getColumnNameAndConfig)(a, b);
|
|
64
|
-
return new SingleStoreVectorBuilder(name, config);
|
|
131
|
+
return config.elementType === "I64" ? new SingleStoreBigIntVectorBuilder(name, config) : new SingleStoreVectorBuilder(name, config);
|
|
65
132
|
}
|
|
66
133
|
// Annotate the CommonJS export names for ESM import in node:
|
|
67
134
|
0 && (module.exports = {
|
|
135
|
+
SingleStoreBigIntVector,
|
|
136
|
+
SingleStoreBigIntVectorBuilder,
|
|
68
137
|
SingleStoreVector,
|
|
69
138
|
SingleStoreVectorBuilder,
|
|
70
139
|
vector
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/singlestore-core/columns/vector.ts"],"sourcesContent":["import type { HasGenerated } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { getColumnNameAndConfig } from '~/utils.ts';\nimport { SingleStoreColumn, SingleStoreColumnBuilder, type SingleStoreGeneratedColumnConfig } from './common.ts';\n\nexport class SingleStoreVectorBuilder extends SingleStoreColumnBuilder<{\n\tname: string;\n\tdataType: 'array vector';\n\tdata: Array<number>;\n\tdriverParam: string;\n\tisLengthExact: true;\n}, { length: number; isLengthExact: true; elementType?: ElementType }> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreVectorBuilder';\n\n\tconstructor(name: string, config: SingleStoreVectorConfig) {\n\t\tsuper(name, 'array vector', 'SingleStoreVector');\n\t\tthis.config.length = config.dimensions;\n\t\tthis.config.elementType = config.elementType;\n\t\tthis.config.isLengthExact = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreVector(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n\n\t/** @internal */\n\toverride generatedAlwaysAs(\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tas: SQL | (() => SQL) | this['_']['data'],\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tconfig?: Partial<SingleStoreGeneratedColumnConfig>,\n\t): HasGenerated<this, { type: 'always' }> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n}\n\nexport class SingleStoreVector<T extends ColumnBaseConfig<'array vector'>>\n\textends SingleStoreColumn<T, { length: number; elementType?: ElementType }>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreVector';\n\n\treadonly elementType: ElementType | undefined = this.config.elementType;\n\n\tgetSQLType(): string {\n\t\treturn `vector(${this.config.length}, ${this.elementType || 'F32'})`;\n\t}\n\n\toverride mapToDriverValue(value: Array<number>) {\n\t\treturn
|
|
1
|
+
{"version":3,"sources":["../../../src/singlestore-core/columns/vector.ts"],"sourcesContent":["import type { HasGenerated } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SingleStoreColumn, SingleStoreColumnBuilder, type SingleStoreGeneratedColumnConfig } from './common.ts';\n\nexport class SingleStoreVectorBuilder extends SingleStoreColumnBuilder<{\n\tname: string;\n\tdataType: 'array vector';\n\tdata: Array<number>;\n\tdriverParam: string | Buffer;\n\tisLengthExact: true;\n}, { length: number; isLengthExact: true; elementType?: Exclude<ElementType, 'I64'> }> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreVectorBuilder';\n\n\tconstructor(name: string, config: SingleStoreVectorConfig) {\n\t\tsuper(name, 'array vector', 'SingleStoreVector');\n\t\tthis.config.length = config.dimensions;\n\t\tthis.config.elementType = config.elementType as Exclude<ElementType, 'I64'> | undefined;\n\t\tthis.config.isLengthExact = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreVector(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n\n\t/** @internal */\n\toverride generatedAlwaysAs(\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tas: SQL | (() => SQL) | this['_']['data'],\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tconfig?: Partial<SingleStoreGeneratedColumnConfig>,\n\t): HasGenerated<this, { type: 'always' }> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n}\n\nexport class SingleStoreVector<T extends ColumnBaseConfig<'array vector'>>\n\textends SingleStoreColumn<T, { length: number; elementType?: Exclude<ElementType, 'I64'> }>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreVector';\n\n\treadonly elementType: Exclude<ElementType, 'I64'> | undefined = this.config.elementType;\n\n\tgetSQLType(): string {\n\t\treturn `vector(${this.config.length}, ${this.elementType || 'F32'})`;\n\t}\n\n\toverride mapToDriverValue(value: Array<number>): string {\n\t\treturn `[${value.map((e) => e.toString()).join(',')}]`;\n\t}\n\n\toverride mapFromDriverValue(value: string | Buffer | Array<number>): Array<number> {\n\t\tif (typeof value === 'string') {\n\t\t\tif (value.startsWith('[')) return value.slice(1, -1).split(',').map(Number);\n\n\t\t\tvalue = Buffer.from(value, 'hex');\n\t\t}\n\n\t\tif (Buffer.isBuffer(value)) {\n\t\t\tconst type = this.elementType || 'F32';\n\t\t\tconst bytearr = new Uint8Array(value);\n\t\t\tswitch (type) {\n\t\t\t\tcase 'I8': {\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-spread\n\t\t\t\t\treturn Array.from(new Int8Array(bytearr.buffer, 0, bytearr.length / 1));\n\t\t\t\t}\n\t\t\t\tcase 'I16': {\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-spread\n\t\t\t\t\treturn Array.from(new Int16Array(bytearr.buffer, 0, bytearr.length / 2));\n\t\t\t\t}\n\t\t\t\tcase 'I32': {\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-spread\n\t\t\t\t\treturn Array.from(new Int32Array(bytearr.buffer, 0, bytearr.length / 4));\n\t\t\t\t}\n\t\t\t\tcase 'F32': {\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-spread\n\t\t\t\t\treturn Array.from(new Float32Array(bytearr.buffer, 0, bytearr.length / 4));\n\t\t\t\t}\n\t\t\t\tcase 'F64': {\n\t\t\t\t\t// eslint-disable-next-line unicorn/prefer-spread\n\t\t\t\t\treturn Array.from(new Float64Array(bytearr.buffer, 0, bytearr.length / 8));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n}\n\nexport class SingleStoreBigIntVectorBuilder extends SingleStoreColumnBuilder<{\n\tname: string;\n\tdataType: 'array int64vector';\n\tdata: Array<bigint>;\n\tdriverParam: string | Buffer;\n\tisLengthExact: true;\n}, { length: number; isLengthExact: true }> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreBigIntVectorBuilder';\n\n\tconstructor(name: string, config: SingleStoreVectorConfig) {\n\t\tsuper(name, 'array int64vector', 'SingleStoreBigIntVector');\n\t\tthis.config.length = config.dimensions;\n\t\tthis.config.isLengthExact = true;\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreBigIntVector(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n\n\t/** @internal */\n\toverride generatedAlwaysAs(\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tas: SQL | (() => SQL) | this['_']['data'],\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tconfig?: Partial<SingleStoreGeneratedColumnConfig>,\n\t): HasGenerated<this, { type: 'always' }> {\n\t\tthrow new Error('Method not implemented.');\n\t}\n}\n\nexport class SingleStoreBigIntVector<T extends ColumnBaseConfig<'array int64vector'>>\n\textends SingleStoreColumn<T, { length: number }>\n{\n\tstatic override readonly [entityKind]: string = 'SingleStoreBigIntVector';\n\n\treadonly elementType = 'I64';\n\n\tgetSQLType(): string {\n\t\treturn `vector(${this.config.length}, ${this.elementType}})`;\n\t}\n\n\toverride mapToDriverValue(value: Array<bigint>): string {\n\t\treturn `[${value.map((e) => e.toString()).join(',')}]`;\n\t}\n\n\toverride mapFromDriverValue(value: string | Buffer | Array<bigint>): Array<bigint> {\n\t\tif (typeof value === 'string') {\n\t\t\tif (value.startsWith('[')) return value.slice(1, -1).split(',').map(BigInt);\n\n\t\t\tvalue = Buffer.from(value, 'hex');\n\t\t}\n\n\t\tif (Buffer.isBuffer(value)) {\n\t\t\tconst bytearr = new Uint8Array(value);\n\t\t\t// eslint-disable-next-line unicorn/prefer-spread\n\t\t\treturn Array.from(new BigInt64Array(bytearr.buffer, 0, bytearr.length / 8));\n\t\t}\n\n\t\treturn value;\n\t}\n}\n\ntype ElementType = 'I8' | 'I16' | 'I32' | 'I64' | 'F32' | 'F64';\n\nexport interface SingleStoreVectorConfig<TType extends ElementType | undefined = ElementType | undefined> {\n\tdimensions: number;\n\telementType?: TType;\n}\n\nexport function vector<TType extends ElementType | undefined>(\n\tconfig: SingleStoreVectorConfig<TType>,\n): Equal<TType, 'I64'> extends true ? SingleStoreBigIntVectorBuilder : SingleStoreVectorBuilder;\nexport function vector<TType extends ElementType | undefined>(\n\tname: string,\n\tconfig: SingleStoreVectorConfig<TType>,\n): Equal<TType, 'I64'> extends true ? SingleStoreBigIntVectorBuilder : SingleStoreVectorBuilder;\nexport function vector(a: string | SingleStoreVectorConfig, b?: SingleStoreVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SingleStoreVectorConfig>(a, b);\n\treturn config.elementType === 'I64'\n\t\t? new SingleStoreBigIntVectorBuilder(name, config)\n\t\t: new SingleStoreVectorBuilder(name, config);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,35 +1,58 @@
|
|
|
1
1
|
import type { ColumnBaseConfig } from "../../column.cjs";
|
|
2
2
|
import { entityKind } from "../../entity.cjs";
|
|
3
|
+
import { type Equal } from "../../utils.cjs";
|
|
3
4
|
import { SingleStoreColumn, SingleStoreColumnBuilder } from "./common.cjs";
|
|
4
5
|
export declare class SingleStoreVectorBuilder extends SingleStoreColumnBuilder<{
|
|
5
6
|
name: string;
|
|
6
7
|
dataType: 'array vector';
|
|
7
8
|
data: Array<number>;
|
|
8
|
-
driverParam: string;
|
|
9
|
+
driverParam: string | Buffer;
|
|
9
10
|
isLengthExact: true;
|
|
10
11
|
}, {
|
|
11
12
|
length: number;
|
|
12
13
|
isLengthExact: true;
|
|
13
|
-
elementType?: ElementType
|
|
14
|
+
elementType?: Exclude<ElementType, 'I64'>;
|
|
14
15
|
}> {
|
|
15
16
|
static readonly [entityKind]: string;
|
|
16
17
|
constructor(name: string, config: SingleStoreVectorConfig);
|
|
17
18
|
}
|
|
18
19
|
export declare class SingleStoreVector<T extends ColumnBaseConfig<'array vector'>> extends SingleStoreColumn<T, {
|
|
19
20
|
length: number;
|
|
20
|
-
elementType?: ElementType
|
|
21
|
+
elementType?: Exclude<ElementType, 'I64'>;
|
|
21
22
|
}> {
|
|
22
23
|
static readonly [entityKind]: string;
|
|
23
|
-
readonly elementType: ElementType | undefined;
|
|
24
|
+
readonly elementType: Exclude<ElementType, 'I64'> | undefined;
|
|
24
25
|
getSQLType(): string;
|
|
25
26
|
mapToDriverValue(value: Array<number>): string;
|
|
26
|
-
mapFromDriverValue(value: string): Array<number>;
|
|
27
|
+
mapFromDriverValue(value: string | Buffer | Array<number>): Array<number>;
|
|
28
|
+
}
|
|
29
|
+
export declare class SingleStoreBigIntVectorBuilder extends SingleStoreColumnBuilder<{
|
|
30
|
+
name: string;
|
|
31
|
+
dataType: 'array int64vector';
|
|
32
|
+
data: Array<bigint>;
|
|
33
|
+
driverParam: string | Buffer;
|
|
34
|
+
isLengthExact: true;
|
|
35
|
+
}, {
|
|
36
|
+
length: number;
|
|
37
|
+
isLengthExact: true;
|
|
38
|
+
}> {
|
|
39
|
+
static readonly [entityKind]: string;
|
|
40
|
+
constructor(name: string, config: SingleStoreVectorConfig);
|
|
41
|
+
}
|
|
42
|
+
export declare class SingleStoreBigIntVector<T extends ColumnBaseConfig<'array int64vector'>> extends SingleStoreColumn<T, {
|
|
43
|
+
length: number;
|
|
44
|
+
}> {
|
|
45
|
+
static readonly [entityKind]: string;
|
|
46
|
+
readonly elementType = "I64";
|
|
47
|
+
getSQLType(): string;
|
|
48
|
+
mapToDriverValue(value: Array<bigint>): string;
|
|
49
|
+
mapFromDriverValue(value: string | Buffer | Array<bigint>): Array<bigint>;
|
|
27
50
|
}
|
|
28
51
|
type ElementType = 'I8' | 'I16' | 'I32' | 'I64' | 'F32' | 'F64';
|
|
29
|
-
export interface SingleStoreVectorConfig {
|
|
52
|
+
export interface SingleStoreVectorConfig<TType extends ElementType | undefined = ElementType | undefined> {
|
|
30
53
|
dimensions: number;
|
|
31
|
-
elementType?:
|
|
54
|
+
elementType?: TType;
|
|
32
55
|
}
|
|
33
|
-
export declare function vector(config: SingleStoreVectorConfig): SingleStoreVectorBuilder;
|
|
34
|
-
export declare function vector(name: string, config: SingleStoreVectorConfig): SingleStoreVectorBuilder;
|
|
56
|
+
export declare function vector<TType extends ElementType | undefined>(config: SingleStoreVectorConfig<TType>): Equal<TType, 'I64'> extends true ? SingleStoreBigIntVectorBuilder : SingleStoreVectorBuilder;
|
|
57
|
+
export declare function vector<TType extends ElementType | undefined>(name: string, config: SingleStoreVectorConfig<TType>): Equal<TType, 'I64'> extends true ? SingleStoreBigIntVectorBuilder : SingleStoreVectorBuilder;
|
|
35
58
|
export {};
|
|
@@ -1,35 +1,58 @@
|
|
|
1
1
|
import type { ColumnBaseConfig } from "../../column.js";
|
|
2
2
|
import { entityKind } from "../../entity.js";
|
|
3
|
+
import { type Equal } from "../../utils.js";
|
|
3
4
|
import { SingleStoreColumn, SingleStoreColumnBuilder } from "./common.js";
|
|
4
5
|
export declare class SingleStoreVectorBuilder extends SingleStoreColumnBuilder<{
|
|
5
6
|
name: string;
|
|
6
7
|
dataType: 'array vector';
|
|
7
8
|
data: Array<number>;
|
|
8
|
-
driverParam: string;
|
|
9
|
+
driverParam: string | Buffer;
|
|
9
10
|
isLengthExact: true;
|
|
10
11
|
}, {
|
|
11
12
|
length: number;
|
|
12
13
|
isLengthExact: true;
|
|
13
|
-
elementType?: ElementType
|
|
14
|
+
elementType?: Exclude<ElementType, 'I64'>;
|
|
14
15
|
}> {
|
|
15
16
|
static readonly [entityKind]: string;
|
|
16
17
|
constructor(name: string, config: SingleStoreVectorConfig);
|
|
17
18
|
}
|
|
18
19
|
export declare class SingleStoreVector<T extends ColumnBaseConfig<'array vector'>> extends SingleStoreColumn<T, {
|
|
19
20
|
length: number;
|
|
20
|
-
elementType?: ElementType
|
|
21
|
+
elementType?: Exclude<ElementType, 'I64'>;
|
|
21
22
|
}> {
|
|
22
23
|
static readonly [entityKind]: string;
|
|
23
|
-
readonly elementType: ElementType | undefined;
|
|
24
|
+
readonly elementType: Exclude<ElementType, 'I64'> | undefined;
|
|
24
25
|
getSQLType(): string;
|
|
25
26
|
mapToDriverValue(value: Array<number>): string;
|
|
26
|
-
mapFromDriverValue(value: string): Array<number>;
|
|
27
|
+
mapFromDriverValue(value: string | Buffer | Array<number>): Array<number>;
|
|
28
|
+
}
|
|
29
|
+
export declare class SingleStoreBigIntVectorBuilder extends SingleStoreColumnBuilder<{
|
|
30
|
+
name: string;
|
|
31
|
+
dataType: 'array int64vector';
|
|
32
|
+
data: Array<bigint>;
|
|
33
|
+
driverParam: string | Buffer;
|
|
34
|
+
isLengthExact: true;
|
|
35
|
+
}, {
|
|
36
|
+
length: number;
|
|
37
|
+
isLengthExact: true;
|
|
38
|
+
}> {
|
|
39
|
+
static readonly [entityKind]: string;
|
|
40
|
+
constructor(name: string, config: SingleStoreVectorConfig);
|
|
41
|
+
}
|
|
42
|
+
export declare class SingleStoreBigIntVector<T extends ColumnBaseConfig<'array int64vector'>> extends SingleStoreColumn<T, {
|
|
43
|
+
length: number;
|
|
44
|
+
}> {
|
|
45
|
+
static readonly [entityKind]: string;
|
|
46
|
+
readonly elementType = "I64";
|
|
47
|
+
getSQLType(): string;
|
|
48
|
+
mapToDriverValue(value: Array<bigint>): string;
|
|
49
|
+
mapFromDriverValue(value: string | Buffer | Array<bigint>): Array<bigint>;
|
|
27
50
|
}
|
|
28
51
|
type ElementType = 'I8' | 'I16' | 'I32' | 'I64' | 'F32' | 'F64';
|
|
29
|
-
export interface SingleStoreVectorConfig {
|
|
52
|
+
export interface SingleStoreVectorConfig<TType extends ElementType | undefined = ElementType | undefined> {
|
|
30
53
|
dimensions: number;
|
|
31
|
-
elementType?:
|
|
54
|
+
elementType?: TType;
|
|
32
55
|
}
|
|
33
|
-
export declare function vector(config: SingleStoreVectorConfig): SingleStoreVectorBuilder;
|
|
34
|
-
export declare function vector(name: string, config: SingleStoreVectorConfig): SingleStoreVectorBuilder;
|
|
56
|
+
export declare function vector<TType extends ElementType | undefined>(config: SingleStoreVectorConfig<TType>): Equal<TType, 'I64'> extends true ? SingleStoreBigIntVectorBuilder : SingleStoreVectorBuilder;
|
|
57
|
+
export declare function vector<TType extends ElementType | undefined>(name: string, config: SingleStoreVectorConfig<TType>): Equal<TType, 'I64'> extends true ? SingleStoreBigIntVectorBuilder : SingleStoreVectorBuilder;
|
|
35
58
|
export {};
|
|
@@ -28,17 +28,84 @@ class SingleStoreVector extends SingleStoreColumn {
|
|
|
28
28
|
return `vector(${this.config.length}, ${this.elementType || "F32"})`;
|
|
29
29
|
}
|
|
30
30
|
mapToDriverValue(value) {
|
|
31
|
-
return
|
|
31
|
+
return `[${value.map((e) => e.toString()).join(",")}]`;
|
|
32
32
|
}
|
|
33
33
|
mapFromDriverValue(value) {
|
|
34
|
-
|
|
34
|
+
if (typeof value === "string") {
|
|
35
|
+
if (value.startsWith("[")) return value.slice(1, -1).split(",").map(Number);
|
|
36
|
+
value = Buffer.from(value, "hex");
|
|
37
|
+
}
|
|
38
|
+
if (Buffer.isBuffer(value)) {
|
|
39
|
+
const type = this.elementType || "F32";
|
|
40
|
+
const bytearr = new Uint8Array(value);
|
|
41
|
+
switch (type) {
|
|
42
|
+
case "I8": {
|
|
43
|
+
return Array.from(new Int8Array(bytearr.buffer, 0, bytearr.length / 1));
|
|
44
|
+
}
|
|
45
|
+
case "I16": {
|
|
46
|
+
return Array.from(new Int16Array(bytearr.buffer, 0, bytearr.length / 2));
|
|
47
|
+
}
|
|
48
|
+
case "I32": {
|
|
49
|
+
return Array.from(new Int32Array(bytearr.buffer, 0, bytearr.length / 4));
|
|
50
|
+
}
|
|
51
|
+
case "F32": {
|
|
52
|
+
return Array.from(new Float32Array(bytearr.buffer, 0, bytearr.length / 4));
|
|
53
|
+
}
|
|
54
|
+
case "F64": {
|
|
55
|
+
return Array.from(new Float64Array(bytearr.buffer, 0, bytearr.length / 8));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
class SingleStoreBigIntVectorBuilder extends SingleStoreColumnBuilder {
|
|
63
|
+
static [entityKind] = "SingleStoreBigIntVectorBuilder";
|
|
64
|
+
constructor(name, config) {
|
|
65
|
+
super(name, "array int64vector", "SingleStoreBigIntVector");
|
|
66
|
+
this.config.length = config.dimensions;
|
|
67
|
+
this.config.isLengthExact = true;
|
|
68
|
+
}
|
|
69
|
+
/** @internal */
|
|
70
|
+
build(table) {
|
|
71
|
+
return new SingleStoreBigIntVector(
|
|
72
|
+
table,
|
|
73
|
+
this.config
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
/** @internal */
|
|
77
|
+
generatedAlwaysAs(as, config) {
|
|
78
|
+
throw new Error("Method not implemented.");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
class SingleStoreBigIntVector extends SingleStoreColumn {
|
|
82
|
+
static [entityKind] = "SingleStoreBigIntVector";
|
|
83
|
+
elementType = "I64";
|
|
84
|
+
getSQLType() {
|
|
85
|
+
return `vector(${this.config.length}, ${this.elementType}})`;
|
|
86
|
+
}
|
|
87
|
+
mapToDriverValue(value) {
|
|
88
|
+
return `[${value.map((e) => e.toString()).join(",")}]`;
|
|
89
|
+
}
|
|
90
|
+
mapFromDriverValue(value) {
|
|
91
|
+
if (typeof value === "string") {
|
|
92
|
+
if (value.startsWith("[")) return value.slice(1, -1).split(",").map(BigInt);
|
|
93
|
+
value = Buffer.from(value, "hex");
|
|
94
|
+
}
|
|
95
|
+
if (Buffer.isBuffer(value)) {
|
|
96
|
+
const bytearr = new Uint8Array(value);
|
|
97
|
+
return Array.from(new BigInt64Array(bytearr.buffer, 0, bytearr.length / 8));
|
|
98
|
+
}
|
|
99
|
+
return value;
|
|
35
100
|
}
|
|
36
101
|
}
|
|
37
102
|
function vector(a, b) {
|
|
38
103
|
const { name, config } = getColumnNameAndConfig(a, b);
|
|
39
|
-
return new SingleStoreVectorBuilder(name, config);
|
|
104
|
+
return config.elementType === "I64" ? new SingleStoreBigIntVectorBuilder(name, config) : new SingleStoreVectorBuilder(name, config);
|
|
40
105
|
}
|
|
41
106
|
export {
|
|
107
|
+
SingleStoreBigIntVector,
|
|
108
|
+
SingleStoreBigIntVectorBuilder,
|
|
42
109
|
SingleStoreVector,
|
|
43
110
|
SingleStoreVectorBuilder,
|
|
44
111
|
vector
|