drizzle-orm 1.0.0-beta.1-34ee105 → 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.
Files changed (107) hide show
  1. package/column-builder.cjs.map +1 -1
  2. package/column-builder.d.cts +1 -1
  3. package/column-builder.d.ts +1 -1
  4. package/column-builder.js.map +1 -1
  5. package/mysql-core/db.cjs.map +1 -1
  6. package/mysql-core/db.js.map +1 -1
  7. package/mysql-core/dialect.cjs +3 -3
  8. package/mysql-core/dialect.cjs.map +1 -1
  9. package/mysql-core/dialect.d.cts +2 -2
  10. package/mysql-core/dialect.d.ts +2 -2
  11. package/mysql-core/dialect.js +3 -3
  12. package/mysql-core/dialect.js.map +1 -1
  13. package/mysql-core/query-builders/query.cjs.map +1 -1
  14. package/mysql-core/query-builders/query.d.cts +3 -2
  15. package/mysql-core/query-builders/query.d.ts +3 -2
  16. package/mysql-core/query-builders/query.js.map +1 -1
  17. package/package.json +13 -1
  18. package/relations.cjs +6 -1
  19. package/relations.cjs.map +1 -1
  20. package/relations.d.cts +6 -5
  21. package/relations.d.ts +6 -5
  22. package/relations.js +6 -1
  23. package/relations.js.map +1 -1
  24. package/singlestore/driver.cjs +9 -5
  25. package/singlestore/driver.cjs.map +1 -1
  26. package/singlestore/driver.d.cts +9 -8
  27. package/singlestore/driver.d.ts +9 -8
  28. package/singlestore/driver.js +9 -5
  29. package/singlestore/driver.js.map +1 -1
  30. package/singlestore/migrator.cjs.map +1 -1
  31. package/singlestore/migrator.d.cts +2 -1
  32. package/singlestore/migrator.d.ts +2 -1
  33. package/singlestore/migrator.js.map +1 -1
  34. package/singlestore/session.cjs +32 -2
  35. package/singlestore/session.cjs.map +1 -1
  36. package/singlestore/session.d.cts +12 -7
  37. package/singlestore/session.d.ts +12 -7
  38. package/singlestore/session.js +32 -2
  39. package/singlestore/session.js.map +1 -1
  40. package/singlestore-core/columns/float.cjs +4 -0
  41. package/singlestore-core/columns/float.cjs.map +1 -1
  42. package/singlestore-core/columns/float.d.cts +1 -0
  43. package/singlestore-core/columns/float.d.ts +1 -0
  44. package/singlestore-core/columns/float.js +4 -0
  45. package/singlestore-core/columns/float.js.map +1 -1
  46. package/singlestore-core/columns/vector.cjs +72 -3
  47. package/singlestore-core/columns/vector.cjs.map +1 -1
  48. package/singlestore-core/columns/vector.d.cts +32 -9
  49. package/singlestore-core/columns/vector.d.ts +32 -9
  50. package/singlestore-core/columns/vector.js +70 -3
  51. package/singlestore-core/columns/vector.js.map +1 -1
  52. package/singlestore-core/columns/year.cjs +4 -0
  53. package/singlestore-core/columns/year.cjs.map +1 -1
  54. package/singlestore-core/columns/year.d.cts +1 -0
  55. package/singlestore-core/columns/year.d.ts +1 -0
  56. package/singlestore-core/columns/year.js +4 -0
  57. package/singlestore-core/columns/year.js.map +1 -1
  58. package/singlestore-core/db.cjs +16 -5
  59. package/singlestore-core/db.cjs.map +1 -1
  60. package/singlestore-core/db.d.cts +10 -6
  61. package/singlestore-core/db.d.ts +10 -6
  62. package/singlestore-core/db.js +16 -5
  63. package/singlestore-core/db.js.map +1 -1
  64. package/singlestore-core/dialect.cjs +186 -2
  65. package/singlestore-core/dialect.cjs.map +1 -1
  66. package/singlestore-core/dialect.d.cts +24 -1
  67. package/singlestore-core/dialect.d.ts +24 -1
  68. package/singlestore-core/dialect.js +195 -4
  69. package/singlestore-core/dialect.js.map +1 -1
  70. package/singlestore-core/query-builders/_query.cjs +136 -0
  71. package/singlestore-core/query-builders/_query.cjs.map +1 -0
  72. package/singlestore-core/query-builders/_query.d.cts +42 -0
  73. package/singlestore-core/query-builders/_query.d.ts +42 -0
  74. package/singlestore-core/query-builders/_query.js +101 -0
  75. package/singlestore-core/query-builders/_query.js.map +1 -0
  76. package/singlestore-core/query-builders/query.cjs +12 -32
  77. package/singlestore-core/query-builders/query.cjs.map +1 -1
  78. package/singlestore-core/query-builders/query.d.cts +8 -11
  79. package/singlestore-core/query-builders/query.d.ts +8 -11
  80. package/singlestore-core/query-builders/query.js +14 -22
  81. package/singlestore-core/query-builders/query.js.map +1 -1
  82. package/singlestore-core/session.cjs +3 -2
  83. package/singlestore-core/session.cjs.map +1 -1
  84. package/singlestore-core/session.d.cts +8 -5
  85. package/singlestore-core/session.d.ts +8 -5
  86. package/singlestore-core/session.js +3 -2
  87. package/singlestore-core/session.js.map +1 -1
  88. package/singlestore-proxy/driver.cjs +3 -2
  89. package/singlestore-proxy/driver.cjs.map +1 -1
  90. package/singlestore-proxy/driver.d.cts +3 -2
  91. package/singlestore-proxy/driver.d.ts +3 -2
  92. package/singlestore-proxy/driver.js +3 -2
  93. package/singlestore-proxy/driver.js.map +1 -1
  94. package/singlestore-proxy/migrator.cjs.map +1 -1
  95. package/singlestore-proxy/migrator.d.cts +2 -1
  96. package/singlestore-proxy/migrator.d.ts +2 -1
  97. package/singlestore-proxy/migrator.js.map +1 -1
  98. package/singlestore-proxy/session.cjs +26 -2
  99. package/singlestore-proxy/session.cjs.map +1 -1
  100. package/singlestore-proxy/session.d.cts +12 -7
  101. package/singlestore-proxy/session.d.ts +12 -7
  102. package/singlestore-proxy/session.js +26 -2
  103. package/singlestore-proxy/session.js.map +1 -1
  104. package/version.cjs +1 -1
  105. package/version.d.cts +1 -1
  106. package/version.d.ts +1 -1
  107. package/version.js +1 -1
@@ -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 JSON.stringify(value);
58
+ return `[${value.map((e) => e.toString()).join(",")}]`;
57
59
  }
58
60
  mapFromDriverValue(value) {
59
- return JSON.parse(value);
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 JSON.stringify(value);\n\t}\n\n\toverride mapFromDriverValue(value: string): Array<number> {\n\t\treturn JSON.parse(value);\n\t}\n}\n\ntype ElementType = 'I8' | 'I16' | 'I32' | 'I64' | 'F32' | 'F64';\n\nexport interface SingleStoreVectorConfig {\n\tdimensions: number;\n\telementType?: ElementType;\n}\n\nexport function vector(\n\tconfig: SingleStoreVectorConfig,\n): SingleStoreVectorBuilder;\nexport function vector(\n\tname: string,\n\tconfig: SingleStoreVectorConfig,\n): SingleStoreVectorBuilder;\nexport function vector(a: string | SingleStoreVectorConfig, b?: SingleStoreVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SingleStoreVectorConfig>(a, b);\n\treturn new SingleStoreVectorBuilder(name, config);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAA2B;AAG3B,mBAAuC;AACvC,oBAAmG;AAE5F,MAAM,iCAAiC,uCAMyB;AAAA,EACtE,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAAiC;AAC1D,UAAM,MAAM,gBAAgB,mBAAmB;AAC/C,SAAK,OAAO,SAAS,OAAO;AAC5B,SAAK,OAAO,cAAc,OAAO;AACjC,SAAK,OAAO,gBAAgB;AAAA,EAC7B;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA;AAAA,EAGS,kBAER,IAEA,QACyC;AACzC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AACD;AAEO,MAAM,0BACJ,gCACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEvC,cAAuC,KAAK,OAAO;AAAA,EAE5D,aAAqB;AACpB,WAAO,UAAU,KAAK,OAAO,MAAM,KAAK,KAAK,eAAe,KAAK;AAAA,EAClE;AAAA,EAES,iBAAiB,OAAsB;AAC/C,WAAO,KAAK,UAAU,KAAK;AAAA,EAC5B;AAAA,EAES,mBAAmB,OAA8B;AACzD,WAAO,KAAK,MAAM,KAAK;AAAA,EACxB;AACD;AAgBO,SAAS,OAAO,GAAqC,GAA6B;AACxF,QAAM,EAAE,MAAM,OAAO,QAAI,qCAAgD,GAAG,CAAC;AAC7E,SAAO,IAAI,yBAAyB,MAAM,MAAM;AACjD;","names":[]}
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":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAA2B;AAG3B,mBAAmD;AACnD,oBAAmG;AAE5F,MAAM,iCAAiC,uCAMyC;AAAA,EACtF,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAAiC;AAC1D,UAAM,MAAM,gBAAgB,mBAAmB;AAC/C,SAAK,OAAO,SAAS,OAAO;AAC5B,SAAK,OAAO,cAAc,OAAO;AACjC,SAAK,OAAO,gBAAgB;AAAA,EAC7B;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA;AAAA,EAGS,kBAER,IAEA,QACyC;AACzC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AACD;AAEO,MAAM,0BACJ,gCACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEvC,cAAuD,KAAK,OAAO;AAAA,EAE5E,aAAqB;AACpB,WAAO,UAAU,KAAK,OAAO,MAAM,KAAK,KAAK,eAAe,KAAK;AAAA,EAClE;AAAA,EAES,iBAAiB,OAA8B;AACvD,WAAO,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,EACpD;AAAA,EAES,mBAAmB,OAAuD;AAClF,QAAI,OAAO,UAAU,UAAU;AAC9B,UAAI,MAAM,WAAW,GAAG,EAAG,QAAO,MAAM,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AAE1E,cAAQ,OAAO,KAAK,OAAO,KAAK;AAAA,IACjC;AAEA,QAAI,OAAO,SAAS,KAAK,GAAG;AAC3B,YAAM,OAAO,KAAK,eAAe;AACjC,YAAM,UAAU,IAAI,WAAW,KAAK;AACpC,cAAQ,MAAM;AAAA,QACb,KAAK,MAAM;AAEV,iBAAO,MAAM,KAAK,IAAI,UAAU,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QACvE;AAAA,QACA,KAAK,OAAO;AAEX,iBAAO,MAAM,KAAK,IAAI,WAAW,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QACxE;AAAA,QACA,KAAK,OAAO;AAEX,iBAAO,MAAM,KAAK,IAAI,WAAW,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QACxE;AAAA,QACA,KAAK,OAAO;AAEX,iBAAO,MAAM,KAAK,IAAI,aAAa,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QAC1E;AAAA,QACA,KAAK,OAAO;AAEX,iBAAO,MAAM,KAAK,IAAI,aAAa,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QAC1E;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;AAEO,MAAM,uCAAuC,uCAMR;AAAA,EAC3C,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAAiC;AAC1D,UAAM,MAAM,qBAAqB,yBAAyB;AAC1D,SAAK,OAAO,SAAS,OAAO;AAC5B,SAAK,OAAO,gBAAgB;AAAA,EAC7B;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA;AAAA,EAGS,kBAER,IAEA,QACyC;AACzC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AACD;AAEO,MAAM,gCACJ,gCACT;AAAA,EACC,QAA0B,wBAAU,IAAY;AAAA,EAEvC,cAAc;AAAA,EAEvB,aAAqB;AACpB,WAAO,UAAU,KAAK,OAAO,MAAM,KAAK,KAAK,WAAW;AAAA,EACzD;AAAA,EAES,iBAAiB,OAA8B;AACvD,WAAO,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,EACpD;AAAA,EAES,mBAAmB,OAAuD;AAClF,QAAI,OAAO,UAAU,UAAU;AAC9B,UAAI,MAAM,WAAW,GAAG,EAAG,QAAO,MAAM,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AAE1E,cAAQ,OAAO,KAAK,OAAO,KAAK;AAAA,IACjC;AAEA,QAAI,OAAO,SAAS,KAAK,GAAG;AAC3B,YAAM,UAAU,IAAI,WAAW,KAAK;AAEpC,aAAO,MAAM,KAAK,IAAI,cAAc,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,IAC3E;AAEA,WAAO;AAAA,EACR;AACD;AAgBO,SAAS,OAAO,GAAqC,GAA6B;AACxF,QAAM,EAAE,MAAM,OAAO,QAAI,qCAAgD,GAAG,CAAC;AAC7E,SAAO,OAAO,gBAAgB,QAC3B,IAAI,+BAA+B,MAAM,MAAM,IAC/C,IAAI,yBAAyB,MAAM,MAAM;AAC7C;","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?: 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?: 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 JSON.stringify(value);
31
+ return `[${value.map((e) => e.toString()).join(",")}]`;
32
32
  }
33
33
  mapFromDriverValue(value) {
34
- return JSON.parse(value);
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
@@ -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 JSON.stringify(value);\n\t}\n\n\toverride mapFromDriverValue(value: string): Array<number> {\n\t\treturn JSON.parse(value);\n\t}\n}\n\ntype ElementType = 'I8' | 'I16' | 'I32' | 'I64' | 'F32' | 'F64';\n\nexport interface SingleStoreVectorConfig {\n\tdimensions: number;\n\telementType?: ElementType;\n}\n\nexport function vector(\n\tconfig: SingleStoreVectorConfig,\n): SingleStoreVectorBuilder;\nexport function vector(\n\tname: string,\n\tconfig: SingleStoreVectorConfig,\n): SingleStoreVectorBuilder;\nexport function vector(a: string | SingleStoreVectorConfig, b?: SingleStoreVectorConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SingleStoreVectorConfig>(a, b);\n\treturn new SingleStoreVectorBuilder(name, config);\n}\n"],"mappings":"AAEA,SAAS,kBAAkB;AAG3B,SAAS,8BAA8B;AACvC,SAAS,mBAAmB,gCAAuE;AAE5F,MAAM,iCAAiC,yBAMyB;AAAA,EACtE,QAA0B,UAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAAiC;AAC1D,UAAM,MAAM,gBAAgB,mBAAmB;AAC/C,SAAK,OAAO,SAAS,OAAO;AAC5B,SAAK,OAAO,cAAc,OAAO;AACjC,SAAK,OAAO,gBAAgB;AAAA,EAC7B;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA;AAAA,EAGS,kBAER,IAEA,QACyC;AACzC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AACD;AAEO,MAAM,0BACJ,kBACT;AAAA,EACC,QAA0B,UAAU,IAAY;AAAA,EAEvC,cAAuC,KAAK,OAAO;AAAA,EAE5D,aAAqB;AACpB,WAAO,UAAU,KAAK,OAAO,MAAM,KAAK,KAAK,eAAe,KAAK;AAAA,EAClE;AAAA,EAES,iBAAiB,OAAsB;AAC/C,WAAO,KAAK,UAAU,KAAK;AAAA,EAC5B;AAAA,EAES,mBAAmB,OAA8B;AACzD,WAAO,KAAK,MAAM,KAAK;AAAA,EACxB;AACD;AAgBO,SAAS,OAAO,GAAqC,GAA6B;AACxF,QAAM,EAAE,MAAM,OAAO,IAAI,uBAAgD,GAAG,CAAC;AAC7E,SAAO,IAAI,yBAAyB,MAAM,MAAM;AACjD;","names":[]}
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":"AAEA,SAAS,kBAAkB;AAG3B,SAAqB,8BAA8B;AACnD,SAAS,mBAAmB,gCAAuE;AAE5F,MAAM,iCAAiC,yBAMyC;AAAA,EACtF,QAA0B,UAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAAiC;AAC1D,UAAM,MAAM,gBAAgB,mBAAmB;AAC/C,SAAK,OAAO,SAAS,OAAO;AAC5B,SAAK,OAAO,cAAc,OAAO;AACjC,SAAK,OAAO,gBAAgB;AAAA,EAC7B;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA;AAAA,EAGS,kBAER,IAEA,QACyC;AACzC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AACD;AAEO,MAAM,0BACJ,kBACT;AAAA,EACC,QAA0B,UAAU,IAAY;AAAA,EAEvC,cAAuD,KAAK,OAAO;AAAA,EAE5E,aAAqB;AACpB,WAAO,UAAU,KAAK,OAAO,MAAM,KAAK,KAAK,eAAe,KAAK;AAAA,EAClE;AAAA,EAES,iBAAiB,OAA8B;AACvD,WAAO,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,EACpD;AAAA,EAES,mBAAmB,OAAuD;AAClF,QAAI,OAAO,UAAU,UAAU;AAC9B,UAAI,MAAM,WAAW,GAAG,EAAG,QAAO,MAAM,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AAE1E,cAAQ,OAAO,KAAK,OAAO,KAAK;AAAA,IACjC;AAEA,QAAI,OAAO,SAAS,KAAK,GAAG;AAC3B,YAAM,OAAO,KAAK,eAAe;AACjC,YAAM,UAAU,IAAI,WAAW,KAAK;AACpC,cAAQ,MAAM;AAAA,QACb,KAAK,MAAM;AAEV,iBAAO,MAAM,KAAK,IAAI,UAAU,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QACvE;AAAA,QACA,KAAK,OAAO;AAEX,iBAAO,MAAM,KAAK,IAAI,WAAW,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QACxE;AAAA,QACA,KAAK,OAAO;AAEX,iBAAO,MAAM,KAAK,IAAI,WAAW,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QACxE;AAAA,QACA,KAAK,OAAO;AAEX,iBAAO,MAAM,KAAK,IAAI,aAAa,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QAC1E;AAAA,QACA,KAAK,OAAO;AAEX,iBAAO,MAAM,KAAK,IAAI,aAAa,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,QAC1E;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;AAEO,MAAM,uCAAuC,yBAMR;AAAA,EAC3C,QAA0B,UAAU,IAAY;AAAA,EAEhD,YAAY,MAAc,QAAiC;AAC1D,UAAM,MAAM,qBAAqB,yBAAyB;AAC1D,SAAK,OAAO,SAAS,OAAO;AAC5B,SAAK,OAAO,gBAAgB;AAAA,EAC7B;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AAAA;AAAA,EAGS,kBAER,IAEA,QACyC;AACzC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AACD;AAEO,MAAM,gCACJ,kBACT;AAAA,EACC,QAA0B,UAAU,IAAY;AAAA,EAEvC,cAAc;AAAA,EAEvB,aAAqB;AACpB,WAAO,UAAU,KAAK,OAAO,MAAM,KAAK,KAAK,WAAW;AAAA,EACzD;AAAA,EAES,iBAAiB,OAA8B;AACvD,WAAO,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,EACpD;AAAA,EAES,mBAAmB,OAAuD;AAClF,QAAI,OAAO,UAAU,UAAU;AAC9B,UAAI,MAAM,WAAW,GAAG,EAAG,QAAO,MAAM,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AAE1E,cAAQ,OAAO,KAAK,OAAO,KAAK;AAAA,IACjC;AAEA,QAAI,OAAO,SAAS,KAAK,GAAG;AAC3B,YAAM,UAAU,IAAI,WAAW,KAAK;AAEpC,aAAO,MAAM,KAAK,IAAI,cAAc,QAAQ,QAAQ,GAAG,QAAQ,SAAS,CAAC,CAAC;AAAA,IAC3E;AAEA,WAAO;AAAA,EACR;AACD;AAgBO,SAAS,OAAO,GAAqC,GAA6B;AACxF,QAAM,EAAE,MAAM,OAAO,IAAI,uBAAgD,GAAG,CAAC;AAC7E,SAAO,OAAO,gBAAgB,QAC3B,IAAI,+BAA+B,MAAM,MAAM,IAC/C,IAAI,yBAAyB,MAAM,MAAM;AAC7C;","names":[]}
@@ -43,6 +43,10 @@ class SingleStoreYear extends import_common.SingleStoreColumn {
43
43
  getSQLType() {
44
44
  return `year`;
45
45
  }
46
+ mapFromDriverValue(value) {
47
+ if (typeof value !== "number") return Number(value);
48
+ return value;
49
+ }
46
50
  }
47
51
  function year(name) {
48
52
  return new SingleStoreYearBuilder(name ?? "");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/singlestore-core/columns/year.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport { SingleStoreColumn, SingleStoreColumnBuilder } from './common.ts';\n\nexport class SingleStoreYearBuilder extends SingleStoreColumnBuilder<{\n\tname: string;\n\tdataType: 'number year';\n\tdata: number;\n\tdriverParam: number;\n}> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreYearBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number year', 'SingleStoreYear');\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreYear(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreYear<\n\tT extends ColumnBaseConfig<'number year'>,\n> extends SingleStoreColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreYear';\n\n\tgetSQLType(): string {\n\t\treturn `year`;\n\t}\n}\n\nexport function year(name?: string): SingleStoreYearBuilder {\n\treturn new SingleStoreYearBuilder(name ?? '');\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA2B;AAE3B,oBAA4D;AAErD,MAAM,+BAA+B,uCAKzC;AAAA,EACF,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAc;AACzB,UAAM,MAAM,eAAe,iBAAiB;AAAA,EAC7C;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,wBAEH,gCAAqB;AAAA,EAC9B,QAA0B,wBAAU,IAAY;AAAA,EAEhD,aAAqB;AACpB,WAAO;AAAA,EACR;AACD;AAEO,SAAS,KAAK,MAAuC;AAC3D,SAAO,IAAI,uBAAuB,QAAQ,EAAE;AAC7C;","names":[]}
1
+ {"version":3,"sources":["../../../src/singlestore-core/columns/year.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport { SingleStoreColumn, SingleStoreColumnBuilder } from './common.ts';\n\nexport class SingleStoreYearBuilder extends SingleStoreColumnBuilder<{\n\tname: string;\n\tdataType: 'number year';\n\tdata: number;\n\tdriverParam: number;\n}> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreYearBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number year', 'SingleStoreYear');\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreYear(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreYear<\n\tT extends ColumnBaseConfig<'number year'>,\n> extends SingleStoreColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreYear';\n\n\tgetSQLType(): string {\n\t\treturn `year`;\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 function year(name?: string): SingleStoreYearBuilder {\n\treturn new SingleStoreYearBuilder(name ?? '');\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA2B;AAE3B,oBAA4D;AAErD,MAAM,+BAA+B,uCAKzC;AAAA,EACF,QAA0B,wBAAU,IAAY;AAAA,EAEhD,YAAY,MAAc;AACzB,UAAM,MAAM,eAAe,iBAAiB;AAAA,EAC7C;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,wBAEH,gCAAqB;AAAA,EAC9B,QAA0B,wBAAU,IAAY;AAAA,EAEhD,aAAqB;AACpB,WAAO;AAAA,EACR;AAAA,EAES,mBAAmB,OAAwB;AACnD,QAAI,OAAO,UAAU,SAAU,QAAO,OAAO,KAAK;AAElD,WAAO;AAAA,EACR;AACD;AAEO,SAAS,KAAK,MAAuC;AAC3D,SAAO,IAAI,uBAAuB,QAAQ,EAAE;AAC7C;","names":[]}
@@ -13,5 +13,6 @@ export declare class SingleStoreYearBuilder extends SingleStoreColumnBuilder<{
13
13
  export declare class SingleStoreYear<T extends ColumnBaseConfig<'number year'>> extends SingleStoreColumn<T> {
14
14
  static readonly [entityKind]: string;
15
15
  getSQLType(): string;
16
+ mapFromDriverValue(value: unknown): number;
16
17
  }
17
18
  export declare function year(name?: string): SingleStoreYearBuilder;
@@ -13,5 +13,6 @@ export declare class SingleStoreYearBuilder extends SingleStoreColumnBuilder<{
13
13
  export declare class SingleStoreYear<T extends ColumnBaseConfig<'number year'>> extends SingleStoreColumn<T> {
14
14
  static readonly [entityKind]: string;
15
15
  getSQLType(): string;
16
+ mapFromDriverValue(value: unknown): number;
16
17
  }
17
18
  export declare function year(name?: string): SingleStoreYearBuilder;
@@ -18,6 +18,10 @@ class SingleStoreYear extends SingleStoreColumn {
18
18
  getSQLType() {
19
19
  return `year`;
20
20
  }
21
+ mapFromDriverValue(value) {
22
+ if (typeof value !== "number") return Number(value);
23
+ return value;
24
+ }
21
25
  }
22
26
  function year(name) {
23
27
  return new SingleStoreYearBuilder(name ?? "");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/singlestore-core/columns/year.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport { SingleStoreColumn, SingleStoreColumnBuilder } from './common.ts';\n\nexport class SingleStoreYearBuilder extends SingleStoreColumnBuilder<{\n\tname: string;\n\tdataType: 'number year';\n\tdata: number;\n\tdriverParam: number;\n}> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreYearBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number year', 'SingleStoreYear');\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreYear(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreYear<\n\tT extends ColumnBaseConfig<'number year'>,\n> extends SingleStoreColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreYear';\n\n\tgetSQLType(): string {\n\t\treturn `year`;\n\t}\n}\n\nexport function year(name?: string): SingleStoreYearBuilder {\n\treturn new SingleStoreYearBuilder(name ?? '');\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAE3B,SAAS,mBAAmB,gCAAgC;AAErD,MAAM,+BAA+B,yBAKzC;AAAA,EACF,QAA0B,UAAU,IAAY;AAAA,EAEhD,YAAY,MAAc;AACzB,UAAM,MAAM,eAAe,iBAAiB;AAAA,EAC7C;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,wBAEH,kBAAqB;AAAA,EAC9B,QAA0B,UAAU,IAAY;AAAA,EAEhD,aAAqB;AACpB,WAAO;AAAA,EACR;AACD;AAEO,SAAS,KAAK,MAAuC;AAC3D,SAAO,IAAI,uBAAuB,QAAQ,EAAE;AAC7C;","names":[]}
1
+ {"version":3,"sources":["../../../src/singlestore-core/columns/year.ts"],"sourcesContent":["import type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SingleStoreTable } from '~/singlestore-core/table.ts';\nimport { SingleStoreColumn, SingleStoreColumnBuilder } from './common.ts';\n\nexport class SingleStoreYearBuilder extends SingleStoreColumnBuilder<{\n\tname: string;\n\tdataType: 'number year';\n\tdata: number;\n\tdriverParam: number;\n}> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreYearBuilder';\n\n\tconstructor(name: string) {\n\t\tsuper(name, 'number year', 'SingleStoreYear');\n\t}\n\n\t/** @internal */\n\toverride build(table: SingleStoreTable) {\n\t\treturn new SingleStoreYear(\n\t\t\ttable,\n\t\t\tthis.config as any,\n\t\t);\n\t}\n}\n\nexport class SingleStoreYear<\n\tT extends ColumnBaseConfig<'number year'>,\n> extends SingleStoreColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreYear';\n\n\tgetSQLType(): string {\n\t\treturn `year`;\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 function year(name?: string): SingleStoreYearBuilder {\n\treturn new SingleStoreYearBuilder(name ?? '');\n}\n"],"mappings":"AACA,SAAS,kBAAkB;AAE3B,SAAS,mBAAmB,gCAAgC;AAErD,MAAM,+BAA+B,yBAKzC;AAAA,EACF,QAA0B,UAAU,IAAY;AAAA,EAEhD,YAAY,MAAc;AACzB,UAAM,MAAM,eAAe,iBAAiB;AAAA,EAC7C;AAAA;AAAA,EAGS,MAAM,OAAyB;AACvC,WAAO,IAAI;AAAA,MACV;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD;AACD;AAEO,MAAM,wBAEH,kBAAqB;AAAA,EAC9B,QAA0B,UAAU,IAAY;AAAA,EAEhD,aAAqB;AACpB,WAAO;AAAA,EACR;AAAA,EAES,mBAAmB,OAAwB;AACnD,QAAI,OAAO,UAAU,SAAU,QAAO,OAAO,KAAK;AAElD,WAAO;AAAA,EACR;AACD;AAEO,SAAS,KAAK,MAAuC;AAC3D,SAAO,IAAI,uBAAuB,QAAQ,EAAE;AAC7C;","names":[]}
@@ -28,26 +28,37 @@ var import_sql = require("../sql/sql.cjs");
28
28
  var import_subquery = require("../subquery.cjs");
29
29
  var import_count = require("./query-builders/count.cjs");
30
30
  var import_query_builders = require("./query-builders/index.cjs");
31
+ var import_query = require("./query-builders/query.cjs");
31
32
  class SingleStoreDatabase {
32
- constructor(dialect, session, schema) {
33
+ constructor(dialect, session, relations, schema) {
33
34
  this.dialect = dialect;
34
35
  this.session = session;
35
36
  this._ = schema ? {
36
37
  schema: schema.schema,
37
38
  fullSchema: schema.fullSchema,
38
- tableNamesMap: schema.tableNamesMap
39
+ tableNamesMap: schema.tableNamesMap,
40
+ relations
39
41
  } : {
40
42
  schema: void 0,
41
43
  fullSchema: {},
42
- tableNamesMap: {}
44
+ tableNamesMap: {},
45
+ relations
43
46
  };
44
47
  this.query = {};
48
+ for (const [tableName, relation] of Object.entries(relations)) {
49
+ this.query[tableName] = new import_query.RelationalQueryBuilder(
50
+ relations,
51
+ relations[relation.name].table,
52
+ relation,
53
+ dialect,
54
+ session
55
+ );
56
+ }
45
57
  this.$cache = { invalidate: async (_params) => {
46
58
  } };
47
59
  }
48
60
  static [import_entity.entityKind] = "SingleStoreDatabase";
49
- // We are waiting for SingleStore support for `json_array` function
50
- /**@inrernal */
61
+ // TO-DO: Figure out how to pass DrizzleTypeError without breaking withReplicas
51
62
  query;
52
63
  /**
53
64
  * Creates a subquery that defines a temporary named result set as a CTE.