drizzle-orm 0.41.0 → 0.43.0-e2b296d

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 (164) hide show
  1. package/gel-core/dialect.cjs +7 -22
  2. package/gel-core/dialect.cjs.map +1 -1
  3. package/gel-core/dialect.d.cts +1 -0
  4. package/gel-core/dialect.d.ts +1 -0
  5. package/gel-core/dialect.js +7 -22
  6. package/gel-core/dialect.js.map +1 -1
  7. package/gel-core/expressions.cjs +3 -3
  8. package/gel-core/expressions.cjs.map +1 -1
  9. package/gel-core/expressions.d.cts +1 -1
  10. package/gel-core/expressions.d.ts +1 -1
  11. package/gel-core/expressions.js +2 -2
  12. package/gel-core/expressions.js.map +1 -1
  13. package/gel-core/query-builders/select.cjs +80 -14
  14. package/gel-core/query-builders/select.cjs.map +1 -1
  15. package/gel-core/query-builders/select.d.cts +78 -13
  16. package/gel-core/query-builders/select.d.ts +78 -13
  17. package/gel-core/query-builders/select.js +80 -14
  18. package/gel-core/query-builders/select.js.map +1 -1
  19. package/gel-core/query-builders/select.types.cjs.map +1 -1
  20. package/gel-core/query-builders/select.types.d.cts +1 -1
  21. package/gel-core/query-builders/select.types.d.ts +1 -1
  22. package/index.cjs +0 -2
  23. package/index.cjs.map +1 -1
  24. package/index.d.cts +0 -1
  25. package/index.d.ts +0 -1
  26. package/index.js +0 -1
  27. package/index.js.map +1 -1
  28. package/mysql-core/columns/enum.cjs +40 -5
  29. package/mysql-core/columns/enum.cjs.map +1 -1
  30. package/mysql-core/columns/enum.d.cts +25 -2
  31. package/mysql-core/columns/enum.d.ts +25 -2
  32. package/mysql-core/columns/enum.js +38 -5
  33. package/mysql-core/columns/enum.js.map +1 -1
  34. package/mysql-core/dialect.cjs +5 -4
  35. package/mysql-core/dialect.cjs.map +1 -1
  36. package/mysql-core/dialect.js +5 -4
  37. package/mysql-core/dialect.js.map +1 -1
  38. package/mysql-core/expressions.cjs +3 -3
  39. package/mysql-core/expressions.cjs.map +1 -1
  40. package/mysql-core/expressions.d.cts +1 -1
  41. package/mysql-core/expressions.d.ts +1 -1
  42. package/mysql-core/expressions.js +2 -2
  43. package/mysql-core/expressions.js.map +1 -1
  44. package/mysql-core/query-builders/select.cjs +72 -34
  45. package/mysql-core/query-builders/select.cjs.map +1 -1
  46. package/mysql-core/query-builders/select.d.cts +66 -25
  47. package/mysql-core/query-builders/select.d.ts +66 -25
  48. package/mysql-core/query-builders/select.js +72 -34
  49. package/mysql-core/query-builders/select.js.map +1 -1
  50. package/mysql-core/query-builders/select.types.cjs.map +1 -1
  51. package/mysql-core/query-builders/select.types.d.cts +5 -4
  52. package/mysql-core/query-builders/select.types.d.ts +5 -4
  53. package/operations.cjs.map +1 -1
  54. package/operations.d.cts +5 -1
  55. package/operations.d.ts +5 -1
  56. package/package.json +55 -65
  57. package/pg-core/columns/enum.cjs +46 -2
  58. package/pg-core/columns/enum.cjs.map +1 -1
  59. package/pg-core/columns/enum.d.cts +39 -1
  60. package/pg-core/columns/enum.d.ts +39 -1
  61. package/pg-core/columns/enum.js +43 -2
  62. package/pg-core/columns/enum.js.map +1 -1
  63. package/pg-core/columns/text.cjs.map +1 -1
  64. package/pg-core/columns/text.d.cts +1 -2
  65. package/pg-core/columns/text.d.ts +1 -2
  66. package/pg-core/columns/text.js.map +1 -1
  67. package/pg-core/dialect.cjs +4 -3
  68. package/pg-core/dialect.cjs.map +1 -1
  69. package/pg-core/dialect.js +4 -3
  70. package/pg-core/dialect.js.map +1 -1
  71. package/pg-core/expressions.cjs +3 -3
  72. package/pg-core/expressions.cjs.map +1 -1
  73. package/pg-core/expressions.d.cts +1 -1
  74. package/pg-core/expressions.d.ts +1 -1
  75. package/pg-core/expressions.js +2 -2
  76. package/pg-core/expressions.js.map +1 -1
  77. package/pg-core/query-builders/select.cjs +80 -14
  78. package/pg-core/query-builders/select.cjs.map +1 -1
  79. package/pg-core/query-builders/select.d.cts +78 -13
  80. package/pg-core/query-builders/select.d.ts +78 -13
  81. package/pg-core/query-builders/select.js +80 -14
  82. package/pg-core/query-builders/select.js.map +1 -1
  83. package/pg-core/query-builders/select.types.cjs.map +1 -1
  84. package/pg-core/query-builders/select.types.d.cts +1 -1
  85. package/pg-core/query-builders/select.types.d.ts +1 -1
  86. package/pg-core/schema.cjs +6 -2
  87. package/pg-core/schema.cjs.map +1 -1
  88. package/pg-core/schema.d.cts +1 -2
  89. package/pg-core/schema.d.ts +1 -2
  90. package/pg-core/schema.js +7 -3
  91. package/pg-core/schema.js.map +1 -1
  92. package/planetscale-serverless/session.cjs.map +1 -1
  93. package/planetscale-serverless/session.js.map +1 -1
  94. package/query-builders/select.types.cjs.map +1 -1
  95. package/query-builders/select.types.d.cts +3 -1
  96. package/query-builders/select.types.d.ts +3 -1
  97. package/relations.d.cts +6 -6
  98. package/relations.d.ts +6 -6
  99. package/singlestore/driver.cjs +24 -2
  100. package/singlestore/driver.cjs.map +1 -1
  101. package/singlestore/driver.d.cts +3 -5
  102. package/singlestore/driver.d.ts +3 -5
  103. package/singlestore/driver.js +24 -2
  104. package/singlestore/driver.js.map +1 -1
  105. package/singlestore-core/dialect.cjs +5 -4
  106. package/singlestore-core/dialect.cjs.map +1 -1
  107. package/singlestore-core/dialect.js +5 -4
  108. package/singlestore-core/dialect.js.map +1 -1
  109. package/singlestore-core/expressions.cjs +3 -3
  110. package/singlestore-core/expressions.cjs.map +1 -1
  111. package/singlestore-core/expressions.d.cts +1 -1
  112. package/singlestore-core/expressions.d.ts +1 -1
  113. package/singlestore-core/expressions.js +2 -2
  114. package/singlestore-core/expressions.js.map +1 -1
  115. package/singlestore-core/query-builders/select.cjs +80 -14
  116. package/singlestore-core/query-builders/select.cjs.map +1 -1
  117. package/singlestore-core/query-builders/select.d.cts +78 -13
  118. package/singlestore-core/query-builders/select.d.ts +78 -13
  119. package/singlestore-core/query-builders/select.js +80 -14
  120. package/singlestore-core/query-builders/select.js.map +1 -1
  121. package/singlestore-core/query-builders/select.types.cjs.map +1 -1
  122. package/singlestore-core/query-builders/select.types.d.cts +1 -2
  123. package/singlestore-core/query-builders/select.types.d.ts +1 -2
  124. package/sql/expressions/conditions.cjs.map +1 -1
  125. package/sql/expressions/conditions.d.cts +2 -2
  126. package/sql/expressions/conditions.d.ts +2 -2
  127. package/sql/expressions/conditions.js.map +1 -1
  128. package/sqlite-core/dialect.cjs +3 -2
  129. package/sqlite-core/dialect.cjs.map +1 -1
  130. package/sqlite-core/dialect.js +3 -2
  131. package/sqlite-core/dialect.js.map +1 -1
  132. package/sqlite-core/expressions.cjs +3 -3
  133. package/sqlite-core/expressions.cjs.map +1 -1
  134. package/sqlite-core/expressions.d.cts +1 -1
  135. package/sqlite-core/expressions.d.ts +1 -1
  136. package/sqlite-core/expressions.js +2 -2
  137. package/sqlite-core/expressions.js.map +1 -1
  138. package/sqlite-core/query-builders/select.cjs +36 -8
  139. package/sqlite-core/query-builders/select.cjs.map +1 -1
  140. package/sqlite-core/query-builders/select.d.cts +40 -13
  141. package/sqlite-core/query-builders/select.d.ts +40 -13
  142. package/sqlite-core/query-builders/select.js +36 -8
  143. package/sqlite-core/query-builders/select.js.map +1 -1
  144. package/sqlite-core/query-builders/select.types.cjs.map +1 -1
  145. package/sqlite-core/query-builders/select.types.d.cts +1 -1
  146. package/sqlite-core/query-builders/select.types.d.ts +1 -1
  147. package/table.cjs.map +1 -1
  148. package/table.d.cts +3 -0
  149. package/table.d.ts +3 -0
  150. package/table.js.map +1 -1
  151. package/utils.cjs.map +1 -1
  152. package/utils.d.cts +1 -0
  153. package/utils.d.ts +1 -0
  154. package/utils.js.map +1 -1
  155. package/version.cjs +1 -1
  156. package/version.d.cts +1 -1
  157. package/version.d.ts +1 -1
  158. package/version.js +1 -1
  159. package/expressions.cjs +0 -23
  160. package/expressions.cjs.map +0 -1
  161. package/expressions.d.cts +0 -1
  162. package/expressions.d.ts +0 -1
  163. package/expressions.js +0 -2
  164. package/expressions.js.map +0 -1
package/pg-core/schema.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { entityKind, is } from "../entity.js";
2
2
  import { SQL, sql } from "../sql/sql.js";
3
- import { pgEnumWithSchema } from "./columns/enum.js";
3
+ import { pgEnumObjectWithSchema, pgEnumWithSchema } from "./columns/enum.js";
4
4
  import { pgSequenceWithSchema } from "./sequence.js";
5
5
  import { pgTableWithSchema } from "./table.js";
6
6
  import { pgMaterializedViewWithSchema, pgViewWithSchema } from "./view.js";
@@ -18,8 +18,12 @@ class PgSchema {
18
18
  materializedView = (name, columns) => {
19
19
  return pgMaterializedViewWithSchema(name, columns, this.schemaName);
20
20
  };
21
- enum = (name, values) => {
22
- return pgEnumWithSchema(name, values, this.schemaName);
21
+ enum = (enumName, input) => {
22
+ return Array.isArray(input) ? pgEnumWithSchema(
23
+ enumName,
24
+ [...input],
25
+ this.schemaName
26
+ ) : pgEnumObjectWithSchema(enumName, input, this.schemaName);
23
27
  };
24
28
  sequence = (name, options) => {
25
29
  return pgSequenceWithSchema(name, options, this.schemaName);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/pg-core/schema.ts"],"sourcesContent":["import { entityKind, is } from '~/entity.ts';\nimport { SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { pgEnum } from './columns/enum.ts';\nimport { pgEnumWithSchema } from './columns/enum.ts';\nimport { type pgSequence, pgSequenceWithSchema } from './sequence.ts';\nimport { type PgTableFn, pgTableWithSchema } from './table.ts';\nimport { type pgMaterializedView, pgMaterializedViewWithSchema, type pgView, pgViewWithSchema } from './view.ts';\n\nexport class PgSchema<TName extends string = string> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'PgSchema';\n\tconstructor(\n\t\tpublic readonly schemaName: TName,\n\t) {}\n\n\ttable: PgTableFn<TName> = ((name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(name, columns, extraConfig, this.schemaName);\n\t});\n\n\tview = ((name, columns) => {\n\t\treturn pgViewWithSchema(name, columns, this.schemaName);\n\t}) as typeof pgView;\n\n\tmaterializedView = ((name, columns) => {\n\t\treturn pgMaterializedViewWithSchema(name, columns, this.schemaName);\n\t}) as typeof pgMaterializedView;\n\n\tenum: typeof pgEnum = ((name, values) => {\n\t\treturn pgEnumWithSchema(name, values, this.schemaName);\n\t});\n\n\tsequence: typeof pgSequence = ((name, options) => {\n\t\treturn pgSequenceWithSchema(name, options, this.schemaName);\n\t});\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([sql.identifier(this.schemaName)]);\n\t}\n\n\tshouldOmitSQLParens(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport function isPgSchema(obj: unknown): obj is PgSchema {\n\treturn is(obj, PgSchema);\n}\n\nexport function pgSchema<T extends string>(name: T) {\n\tif (name === 'public') {\n\t\tthrow new Error(\n\t\t\t`You can't specify 'public' as schema name. Postgres is using public schema by default. If you want to use 'public' schema, just use pgTable() instead of creating a schema`,\n\t\t);\n\t}\n\n\treturn new PgSchema(name);\n}\n"],"mappings":"AAAA,SAAS,YAAY,UAAU;AAC/B,SAAS,KAAK,WAA4B;AAE1C,SAAS,wBAAwB;AACjC,SAA0B,4BAA4B;AACtD,SAAyB,yBAAyB;AAClD,SAAkC,8BAA2C,wBAAwB;AAE9F,MAAM,SAA8D;AAAA,EAE1E,YACiB,YACf;AADe;AAAA,EACd;AAAA,EAHH,QAAiB,UAAU,IAAY;AAAA,EAKvC,QAA2B,CAAC,MAAM,SAAS,gBAAgB;AAC1D,WAAO,kBAAkB,MAAM,SAAS,aAAa,KAAK,UAAU;AAAA,EACrE;AAAA,EAEA,OAAQ,CAAC,MAAM,YAAY;AAC1B,WAAO,iBAAiB,MAAM,SAAS,KAAK,UAAU;AAAA,EACvD;AAAA,EAEA,mBAAoB,CAAC,MAAM,YAAY;AACtC,WAAO,6BAA6B,MAAM,SAAS,KAAK,UAAU;AAAA,EACnE;AAAA,EAEA,OAAuB,CAAC,MAAM,WAAW;AACxC,WAAO,iBAAiB,MAAM,QAAQ,KAAK,UAAU;AAAA,EACtD;AAAA,EAEA,WAA+B,CAAC,MAAM,YAAY;AACjD,WAAO,qBAAqB,MAAM,SAAS,KAAK,UAAU;AAAA,EAC3D;AAAA,EAEA,SAAc;AACb,WAAO,IAAI,IAAI,CAAC,IAAI,WAAW,KAAK,UAAU,CAAC,CAAC;AAAA,EACjD;AAAA,EAEA,sBAA+B;AAC9B,WAAO;AAAA,EACR;AACD;AAEO,SAAS,WAAW,KAA+B;AACzD,SAAO,GAAG,KAAK,QAAQ;AACxB;AAEO,SAAS,SAA2B,MAAS;AACnD,MAAI,SAAS,UAAU;AACtB,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,SAAO,IAAI,SAAS,IAAI;AACzB;","names":[]}
1
+ {"version":3,"sources":["../../src/pg-core/schema.ts"],"sourcesContent":["import { entityKind, is } from '~/entity.ts';\nimport { SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport { pgEnumObjectWithSchema, pgEnumWithSchema } from './columns/enum.ts';\nimport { type pgSequence, pgSequenceWithSchema } from './sequence.ts';\nimport { type PgTableFn, pgTableWithSchema } from './table.ts';\nimport { type pgMaterializedView, pgMaterializedViewWithSchema, type pgView, pgViewWithSchema } from './view.ts';\n\nexport class PgSchema<TName extends string = string> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'PgSchema';\n\tconstructor(\n\t\tpublic readonly schemaName: TName,\n\t) {}\n\n\ttable: PgTableFn<TName> = ((name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(name, columns, extraConfig, this.schemaName);\n\t});\n\n\tview = ((name, columns) => {\n\t\treturn pgViewWithSchema(name, columns, this.schemaName);\n\t}) as typeof pgView;\n\n\tmaterializedView = ((name, columns) => {\n\t\treturn pgMaterializedViewWithSchema(name, columns, this.schemaName);\n\t}) as typeof pgMaterializedView;\n\n\tpublic enum = ((enumName: any, input: any) => {\n\t\treturn Array.isArray(input)\n\t\t\t? pgEnumWithSchema(\n\t\t\t\tenumName,\n\t\t\t\t[...input] as [string, ...string[]],\n\t\t\t\tthis.schemaName,\n\t\t\t)\n\t\t\t: pgEnumObjectWithSchema(enumName, input, this.schemaName);\n\t}) as any;\n\n\tsequence: typeof pgSequence = ((name, options) => {\n\t\treturn pgSequenceWithSchema(name, options, this.schemaName);\n\t});\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([sql.identifier(this.schemaName)]);\n\t}\n\n\tshouldOmitSQLParens(): boolean {\n\t\treturn true;\n\t}\n}\n\nexport function isPgSchema(obj: unknown): obj is PgSchema {\n\treturn is(obj, PgSchema);\n}\n\nexport function pgSchema<T extends string>(name: T) {\n\tif (name === 'public') {\n\t\tthrow new Error(\n\t\t\t`You can't specify 'public' as schema name. Postgres is using public schema by default. If you want to use 'public' schema, just use pgTable() instead of creating a schema`,\n\t\t);\n\t}\n\n\treturn new PgSchema(name);\n}\n"],"mappings":"AAAA,SAAS,YAAY,UAAU;AAC/B,SAAS,KAAK,WAA4B;AAC1C,SAAS,wBAAwB,wBAAwB;AACzD,SAA0B,4BAA4B;AACtD,SAAyB,yBAAyB;AAClD,SAAkC,8BAA2C,wBAAwB;AAE9F,MAAM,SAA8D;AAAA,EAE1E,YACiB,YACf;AADe;AAAA,EACd;AAAA,EAHH,QAAiB,UAAU,IAAY;AAAA,EAKvC,QAA2B,CAAC,MAAM,SAAS,gBAAgB;AAC1D,WAAO,kBAAkB,MAAM,SAAS,aAAa,KAAK,UAAU;AAAA,EACrE;AAAA,EAEA,OAAQ,CAAC,MAAM,YAAY;AAC1B,WAAO,iBAAiB,MAAM,SAAS,KAAK,UAAU;AAAA,EACvD;AAAA,EAEA,mBAAoB,CAAC,MAAM,YAAY;AACtC,WAAO,6BAA6B,MAAM,SAAS,KAAK,UAAU;AAAA,EACnE;AAAA,EAEO,OAAQ,CAAC,UAAe,UAAe;AAC7C,WAAO,MAAM,QAAQ,KAAK,IACvB;AAAA,MACD;AAAA,MACA,CAAC,GAAG,KAAK;AAAA,MACT,KAAK;AAAA,IACN,IACE,uBAAuB,UAAU,OAAO,KAAK,UAAU;AAAA,EAC3D;AAAA,EAEA,WAA+B,CAAC,MAAM,YAAY;AACjD,WAAO,qBAAqB,MAAM,SAAS,KAAK,UAAU;AAAA,EAC3D;AAAA,EAEA,SAAc;AACb,WAAO,IAAI,IAAI,CAAC,IAAI,WAAW,KAAK,UAAU,CAAC,CAAC;AAAA,EACjD;AAAA,EAEA,sBAA+B;AAC9B,WAAO;AAAA,EACR;AACD;AAEO,SAAS,WAAW,KAA+B;AACzD,SAAO,GAAG,KAAK,QAAQ;AACxB;AAEO,SAAS,SAA2B,MAAS;AACnD,MAAI,SAAS,UAAU;AACtB,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAEA,SAAO,IAAI,SAAS,IAAI;AACzB;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/planetscale-serverless/session.ts"],"sourcesContent":["import type { Client, Connection, ExecutedQuery, Transaction } from '@planetscale/database';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n} from '~/mysql-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport class PlanetScalePreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'PlanetScalePreparedQuery';\n\n\tprivate rawQuery = { as: 'object' } as const;\n\tprivate query = { as: 'array' } as const;\n\n\tconstructor(\n\t\tprivate client: Client | Transaction | Connection,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\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 properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.queryString, params);\n\n\t\tconst {\n\t\t\tfields,\n\t\t\tclient,\n\t\t\tqueryString,\n\t\t\trawQuery,\n\t\t\tquery,\n\t\t\tjoinsNotNullableMap,\n\t\t\tcustomResultMapper,\n\t\t\treturningIds,\n\t\t\tgeneratedIds,\n\t\t} = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.execute(queryString, params, rawQuery);\n\n\t\t\tconst insertId = Number.parseFloat(res.insertId);\n\t\t\tconst affectedRows = res.rowsAffected;\n\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\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\t\tconst { rows } = await client.execute(queryString, params, query);\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row as unknown[], joinsNotNullableMap));\n\t}\n\n\toverride iterator(_placeholderValues?: Record<string, unknown>): AsyncGenerator<T['iterator']> {\n\t\tthrow new Error('Streaming is not supported by the PlanetScale Serverless driver');\n\t}\n}\n\nexport interface PlanetscaleSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class PlanetscaleSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, PlanetScalePreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PlanetscaleSession';\n\n\tprivate logger: Logger;\n\tprivate client: Client | Transaction | Connection;\n\n\tconstructor(\n\t\tprivate baseClient: Client | Connection,\n\t\tdialect: MySqlDialect,\n\t\ttx: Transaction | undefined,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: PlanetscaleSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.client = tx ?? baseClient;\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig = MySqlPreparedQueryConfig>(\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): MySqlPreparedQuery<T> {\n\t\treturn new PlanetScalePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t);\n\t}\n\n\tasync query(query: string, params: unknown[]): Promise<ExecutedQuery> {\n\t\tthis.logger.logQuery(query, params);\n\n\t\treturn await this.client.execute(query, params, { as: 'array' });\n\t}\n\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<ExecutedQuery> {\n\t\treturn this.client.execute(query, params, { as: 'object' });\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\n\t\treturn this.client.execute(querySql.sql, querySql.params, { as: 'object' }).then((\n\t\t\teQuery,\n\t\t) => eQuery.rows as T[]);\n\t}\n\n\toverride async count(sql: SQL): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql);\n\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: PlanetScaleTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\treturn this.baseClient.transaction((pstx) => {\n\t\t\tconst session = new PlanetscaleSession(this.baseClient, this.dialect, pstx, this.schema, this.options);\n\t\t\tconst tx = new PlanetScaleTransaction<TFullSchema, TSchema>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession as MySqlSession<any, any, any, any>,\n\t\t\t\tthis.schema,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t});\n\t}\n}\n\nexport class PlanetScaleTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlTransaction<PlanetscaleQueryResultHKT, PlanetScalePreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PlanetScaleTransaction';\n\n\tconstructor(\n\t\tdialect: MySqlDialect,\n\t\tsession: MySqlSession,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, schema, nestedIndex, 'planetscale');\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: PlanetScaleTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new PlanetScaleTransaction<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\nexport interface PlanetscaleQueryResultHKT extends MySqlQueryResultHKT {\n\ttype: ExecutedQuery;\n}\n\nexport interface PlanetScalePreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: PlanetScalePreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":["sql"]}
1
+ {"version":3,"sources":["../../src/planetscale-serverless/session.ts"],"sourcesContent":["import type { Client, Connection, ExecutedQuery, Transaction } from '@planetscale/database';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n} from '~/mysql-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport class PlanetScalePreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'PlanetScalePreparedQuery';\n\n\tprivate rawQuery = { as: 'object' } as const;\n\tprivate query = { as: 'array' } as const;\n\n\tconstructor(\n\t\tprivate client: Client | Transaction | Connection,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\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 properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.queryString, params);\n\n\t\tconst {\n\t\t\tfields,\n\t\t\tclient,\n\t\t\tqueryString,\n\t\t\trawQuery,\n\t\t\tquery,\n\t\t\tjoinsNotNullableMap,\n\t\t\tcustomResultMapper,\n\t\t\treturningIds,\n\t\t\tgeneratedIds,\n\t\t} = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.execute(queryString, params, rawQuery);\n\n\t\t\tconst insertId = Number.parseFloat(res.insertId);\n\t\t\tconst affectedRows = res.rowsAffected;\n\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\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\t\tconst { rows } = await client.execute(queryString, params, query);\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row as unknown[], joinsNotNullableMap));\n\t}\n\n\toverride iterator(_placeholderValues?: Record<string, unknown>): AsyncGenerator<T['iterator']> {\n\t\tthrow new Error('Streaming is not supported by the PlanetScale Serverless driver');\n\t}\n}\n\nexport interface PlanetscaleSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class PlanetscaleSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, PlanetScalePreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PlanetscaleSession';\n\n\tprivate logger: Logger;\n\tprivate client: Client | Transaction | Connection;\n\n\tconstructor(\n\t\tprivate baseClient: Client | Connection,\n\t\tdialect: MySqlDialect,\n\t\ttx: Transaction | undefined,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: PlanetscaleSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.client = tx ?? baseClient;\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig = MySqlPreparedQueryConfig>(\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): MySqlPreparedQuery<T> {\n\t\treturn new PlanetScalePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t);\n\t}\n\n\tasync query(query: string, params: unknown[]): Promise<ExecutedQuery> {\n\t\tthis.logger.logQuery(query, params);\n\n\t\treturn await this.client.execute(query, params, { as: 'array' });\n\t}\n\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<ExecutedQuery> {\n\t\treturn this.client.execute(query, params, { as: 'object' });\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\n\t\treturn this.client.execute<T>(querySql.sql, querySql.params, { as: 'object' }).then((\n\t\t\teQuery,\n\t\t) => eQuery.rows);\n\t}\n\n\toverride async count(sql: SQL): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql);\n\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: PlanetScaleTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\treturn this.baseClient.transaction((pstx) => {\n\t\t\tconst session = new PlanetscaleSession(this.baseClient, this.dialect, pstx, this.schema, this.options);\n\t\t\tconst tx = new PlanetScaleTransaction<TFullSchema, TSchema>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession as MySqlSession<any, any, any, any>,\n\t\t\t\tthis.schema,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t});\n\t}\n}\n\nexport class PlanetScaleTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlTransaction<PlanetscaleQueryResultHKT, PlanetScalePreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PlanetScaleTransaction';\n\n\tconstructor(\n\t\tdialect: MySqlDialect,\n\t\tsession: MySqlSession,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, schema, nestedIndex, 'planetscale');\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: PlanetScaleTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new PlanetScaleTransaction<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\nexport interface PlanetscaleQueryResultHKT extends MySqlQueryResultHKT {\n\ttype: ExecutedQuery;\n}\n\nexport interface PlanetScalePreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: PlanetScalePreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":["sql"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/planetscale-serverless/session.ts"],"sourcesContent":["import type { Client, Connection, ExecutedQuery, Transaction } from '@planetscale/database';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n} from '~/mysql-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport class PlanetScalePreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'PlanetScalePreparedQuery';\n\n\tprivate rawQuery = { as: 'object' } as const;\n\tprivate query = { as: 'array' } as const;\n\n\tconstructor(\n\t\tprivate client: Client | Transaction | Connection,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\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 properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.queryString, params);\n\n\t\tconst {\n\t\t\tfields,\n\t\t\tclient,\n\t\t\tqueryString,\n\t\t\trawQuery,\n\t\t\tquery,\n\t\t\tjoinsNotNullableMap,\n\t\t\tcustomResultMapper,\n\t\t\treturningIds,\n\t\t\tgeneratedIds,\n\t\t} = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.execute(queryString, params, rawQuery);\n\n\t\t\tconst insertId = Number.parseFloat(res.insertId);\n\t\t\tconst affectedRows = res.rowsAffected;\n\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\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\t\tconst { rows } = await client.execute(queryString, params, query);\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row as unknown[], joinsNotNullableMap));\n\t}\n\n\toverride iterator(_placeholderValues?: Record<string, unknown>): AsyncGenerator<T['iterator']> {\n\t\tthrow new Error('Streaming is not supported by the PlanetScale Serverless driver');\n\t}\n}\n\nexport interface PlanetscaleSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class PlanetscaleSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, PlanetScalePreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PlanetscaleSession';\n\n\tprivate logger: Logger;\n\tprivate client: Client | Transaction | Connection;\n\n\tconstructor(\n\t\tprivate baseClient: Client | Connection,\n\t\tdialect: MySqlDialect,\n\t\ttx: Transaction | undefined,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: PlanetscaleSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.client = tx ?? baseClient;\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig = MySqlPreparedQueryConfig>(\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): MySqlPreparedQuery<T> {\n\t\treturn new PlanetScalePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t);\n\t}\n\n\tasync query(query: string, params: unknown[]): Promise<ExecutedQuery> {\n\t\tthis.logger.logQuery(query, params);\n\n\t\treturn await this.client.execute(query, params, { as: 'array' });\n\t}\n\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<ExecutedQuery> {\n\t\treturn this.client.execute(query, params, { as: 'object' });\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\n\t\treturn this.client.execute(querySql.sql, querySql.params, { as: 'object' }).then((\n\t\t\teQuery,\n\t\t) => eQuery.rows as T[]);\n\t}\n\n\toverride async count(sql: SQL): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql);\n\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: PlanetScaleTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\treturn this.baseClient.transaction((pstx) => {\n\t\t\tconst session = new PlanetscaleSession(this.baseClient, this.dialect, pstx, this.schema, this.options);\n\t\t\tconst tx = new PlanetScaleTransaction<TFullSchema, TSchema>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession as MySqlSession<any, any, any, any>,\n\t\t\t\tthis.schema,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t});\n\t}\n}\n\nexport class PlanetScaleTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlTransaction<PlanetscaleQueryResultHKT, PlanetScalePreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PlanetScaleTransaction';\n\n\tconstructor(\n\t\tdialect: MySqlDialect,\n\t\tsession: MySqlSession,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, schema, nestedIndex, 'planetscale');\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: PlanetScaleTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new PlanetScaleTransaction<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\nexport interface PlanetscaleQueryResultHKT extends MySqlQueryResultHKT {\n\ttype: ExecutedQuery;\n}\n\nexport interface PlanetScalePreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: PlanetScalePreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":["sql"]}
1
+ {"version":3,"sources":["../../src/planetscale-serverless/session.ts"],"sourcesContent":["import type { Client, Connection, ExecutedQuery, Transaction } from '@planetscale/database';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { MySqlDialect } from '~/mysql-core/dialect.ts';\nimport type { SelectedFieldsOrdered } from '~/mysql-core/query-builders/select.types.ts';\nimport {\n\tMySqlPreparedQuery,\n\ttype MySqlPreparedQueryConfig,\n\ttype MySqlPreparedQueryHKT,\n\ttype MySqlQueryResultHKT,\n\tMySqlSession,\n\tMySqlTransaction,\n} from '~/mysql-core/session.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type Query, type SQL, sql } from '~/sql/sql.ts';\nimport { type Assume, mapResultRow } from '~/utils.ts';\n\nexport class PlanetScalePreparedQuery<T extends MySqlPreparedQueryConfig> extends MySqlPreparedQuery<T> {\n\tstatic override readonly [entityKind]: string = 'PlanetScalePreparedQuery';\n\n\tprivate rawQuery = { as: 'object' } as const;\n\tprivate query = { as: 'array' } as const;\n\n\tconstructor(\n\t\tprivate client: Client | Transaction | Connection,\n\t\tprivate queryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate logger: Logger,\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 properries + key from object\n\t\tprivate returningIds?: SelectedFieldsOrdered,\n\t) {\n\t\tsuper();\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues);\n\n\t\tthis.logger.logQuery(this.queryString, params);\n\n\t\tconst {\n\t\t\tfields,\n\t\t\tclient,\n\t\t\tqueryString,\n\t\t\trawQuery,\n\t\t\tquery,\n\t\t\tjoinsNotNullableMap,\n\t\t\tcustomResultMapper,\n\t\t\treturningIds,\n\t\t\tgeneratedIds,\n\t\t} = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst res = await client.execute(queryString, params, rawQuery);\n\n\t\t\tconst insertId = Number.parseFloat(res.insertId);\n\t\t\tconst affectedRows = res.rowsAffected;\n\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\t\t\t\treturn returningResponse;\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\t\tconst { rows } = await client.execute(queryString, params, query);\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn rows.map((row) => mapResultRow<T['execute']>(fields!, row as unknown[], joinsNotNullableMap));\n\t}\n\n\toverride iterator(_placeholderValues?: Record<string, unknown>): AsyncGenerator<T['iterator']> {\n\t\tthrow new Error('Streaming is not supported by the PlanetScale Serverless driver');\n\t}\n}\n\nexport interface PlanetscaleSessionOptions {\n\tlogger?: Logger;\n}\n\nexport class PlanetscaleSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlSession<MySqlQueryResultHKT, PlanetScalePreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PlanetscaleSession';\n\n\tprivate logger: Logger;\n\tprivate client: Client | Transaction | Connection;\n\n\tconstructor(\n\t\tprivate baseClient: Client | Connection,\n\t\tdialect: MySqlDialect,\n\t\ttx: Transaction | undefined,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: PlanetscaleSessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.client = tx ?? baseClient;\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends MySqlPreparedQueryConfig = MySqlPreparedQueryConfig>(\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): MySqlPreparedQuery<T> {\n\t\treturn new PlanetScalePreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tthis.logger,\n\t\t\tfields,\n\t\t\tcustomResultMapper,\n\t\t\tgeneratedIds,\n\t\t\treturningIds,\n\t\t);\n\t}\n\n\tasync query(query: string, params: unknown[]): Promise<ExecutedQuery> {\n\t\tthis.logger.logQuery(query, params);\n\n\t\treturn await this.client.execute(query, params, { as: 'array' });\n\t}\n\n\tasync queryObjects(\n\t\tquery: string,\n\t\tparams: unknown[],\n\t): Promise<ExecutedQuery> {\n\t\treturn this.client.execute(query, params, { as: 'object' });\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\n\t\treturn this.client.execute<T>(querySql.sql, querySql.params, { as: 'object' }).then((\n\t\t\teQuery,\n\t\t) => eQuery.rows);\n\t}\n\n\toverride async count(sql: SQL): Promise<number> {\n\t\tconst res = await this.execute<{ rows: [{ count: string }] }>(sql);\n\n\t\treturn Number(\n\t\t\tres['rows'][0]['count'],\n\t\t);\n\t}\n\n\toverride transaction<T>(\n\t\ttransaction: (tx: PlanetScaleTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\treturn this.baseClient.transaction((pstx) => {\n\t\t\tconst session = new PlanetscaleSession(this.baseClient, this.dialect, pstx, this.schema, this.options);\n\t\t\tconst tx = new PlanetScaleTransaction<TFullSchema, TSchema>(\n\t\t\t\tthis.dialect,\n\t\t\t\tsession as MySqlSession<any, any, any, any>,\n\t\t\t\tthis.schema,\n\t\t\t);\n\t\t\treturn transaction(tx);\n\t\t});\n\t}\n}\n\nexport class PlanetScaleTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends MySqlTransaction<PlanetscaleQueryResultHKT, PlanetScalePreparedQueryHKT, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'PlanetScaleTransaction';\n\n\tconstructor(\n\t\tdialect: MySqlDialect,\n\t\tsession: MySqlSession,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tnestedIndex = 0,\n\t) {\n\t\tsuper(dialect, session, schema, nestedIndex, 'planetscale');\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: PlanetScaleTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new PlanetScaleTransaction<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\nexport interface PlanetscaleQueryResultHKT extends MySqlQueryResultHKT {\n\ttype: ExecutedQuery;\n}\n\nexport interface PlanetScalePreparedQueryHKT extends MySqlPreparedQueryHKT {\n\ttype: PlanetScalePreparedQuery<Assume<this['config'], MySqlPreparedQueryConfig>>;\n}\n"],"mappings":"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","names":["sql"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builders/select.types.ts"],"sourcesContent":["import type { ChangeColumnTableName, ColumnDataType, Dialect } from '~/column-builder.ts';\nimport type { AnyColumn, Column, ColumnBaseConfig, GetColumnData, UpdateColConfig } from '~/column.ts';\nimport type { SelectedFields } from '~/operations.ts';\nimport type { ColumnsSelection, SQL, View } from '~/sql/sql.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport type { Table } from '~/table.ts';\nimport type { Assume, DrizzleTypeError, Equal, IsAny, Simplify } from '~/utils.ts';\n\nexport type JoinType = 'inner' | 'left' | 'right' | 'full';\n\nexport type JoinNullability = 'nullable' | 'not-null';\n\nexport type ApplyNullability<T, TNullability extends JoinNullability> = TNullability extends 'nullable' ? T | null\n\t: TNullability extends 'null' ? null\n\t: T;\n\nexport type ApplyNullabilityToColumn<TColumn extends Column, TNullability extends JoinNullability> =\n\tTNullability extends 'not-null' ? TColumn\n\t\t: Column<\n\t\t\tAssume<\n\t\t\t\tUpdateColConfig<TColumn['_'], {\n\t\t\t\t\tnotNull: TNullability extends 'nullable' ? false : TColumn['_']['notNull'];\n\t\t\t\t}>,\n\t\t\t\tColumnBaseConfig<ColumnDataType, string>\n\t\t\t>\n\t\t>;\n\nexport type ApplyNotNullMapToJoins<TResult, TNullabilityMap extends Record<string, JoinNullability>> =\n\t& {\n\t\t[TTableName in keyof TResult & keyof TNullabilityMap & string]: ApplyNullability<\n\t\t\tTResult[TTableName],\n\t\t\tTNullabilityMap[TTableName]\n\t\t>;\n\t}\n\t& {};\n\nexport type SelectMode = 'partial' | 'single' | 'multiple';\n\nexport type SelectResult<\n\tTResult,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability>,\n> = TSelectMode extends 'partial' ? SelectPartialResult<TResult, TNullabilityMap>\n\t: TSelectMode extends 'single' ? SelectResultFields<TResult>\n\t: ApplyNotNullMapToJoins<SelectResultFields<TResult>, TNullabilityMap>;\n\ntype IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false : true;\n\ntype Not<T extends boolean> = T extends true ? false : true;\n\ntype SelectPartialResult<TFields, TNullability extends Record<string, JoinNullability>> = TNullability extends\n\tTNullability ? {\n\t\t[Key in keyof TFields]: TFields[Key] extends infer TField\n\t\t\t? TField extends Table ? TField['_']['name'] extends keyof TNullability ? ApplyNullability<\n\t\t\t\t\t\tSelectResultFields<TField['_']['columns']>,\n\t\t\t\t\t\tTNullability[TField['_']['name']]\n\t\t\t\t\t>\n\t\t\t\t: never\n\t\t\t: TField extends Column\n\t\t\t\t? TField['_']['tableName'] extends keyof TNullability\n\t\t\t\t\t? ApplyNullability<SelectResultField<TField>, TNullability[TField['_']['tableName']]>\n\t\t\t\t: never\n\t\t\t: TField extends SQL | SQL.Aliased ? SelectResultField<TField>\n\t\t\t: TField extends Record<string, any>\n\t\t\t\t? TField[keyof TField] extends AnyColumn<{ tableName: infer TTableName extends string }> | SQL | SQL.Aliased\n\t\t\t\t\t? Not<IsUnion<TTableName>> extends true\n\t\t\t\t\t\t? ApplyNullability<SelectResultFields<TField>, TNullability[TTableName]>\n\t\t\t\t\t: SelectPartialResult<TField, TNullability>\n\t\t\t\t: never\n\t\t\t: never\n\t\t\t: never;\n\t}\n\t: never;\n\nexport type MapColumnsToTableAlias<\n\tTColumns extends ColumnsSelection,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TColumns]: TColumns[Key] extends Column\n\t\t\t? ChangeColumnTableName<Assume<TColumns[Key], Column>, TAlias, TDialect>\n\t\t\t: TColumns[Key];\n\t}\n\t& {};\n\nexport type AddAliasToSelection<\n\tTSelection extends ColumnsSelection,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> = Simplify<\n\tIsAny<TSelection> extends true ? any\n\t\t: {\n\t\t\t[Key in keyof TSelection]: TSelection[Key] extends Column\n\t\t\t\t? ChangeColumnTableName<TSelection[Key], TAlias, TDialect>\n\t\t\t\t: TSelection[Key] extends Table ? AddAliasToSelection<TSelection[Key]['_']['columns'], TAlias, TDialect>\n\t\t\t\t: TSelection[Key] extends SQL | SQL.Aliased ? TSelection[Key]\n\t\t\t\t: TSelection[Key] extends ColumnsSelection ? MapColumnsToTableAlias<TSelection[Key], TAlias, TDialect>\n\t\t\t\t: never;\n\t\t}\n>;\n\nexport type AppendToResult<\n\tTTableName extends string | undefined,\n\tTResult,\n\tTJoinedName extends string | undefined,\n\tTSelectedFields extends SelectedFields<Column, Table>,\n\tTOldSelectMode extends SelectMode,\n> = TOldSelectMode extends 'partial' ? TResult\n\t: TOldSelectMode extends 'single' ?\n\t\t\t& (TTableName extends string ? Record<TTableName, TResult> : TResult)\n\t\t\t& (TJoinedName extends string ? Record<TJoinedName, TSelectedFields> : TSelectedFields)\n\t: TResult & (TJoinedName extends string ? Record<TJoinedName, TSelectedFields> : TSelectedFields);\n\nexport type BuildSubquerySelection<\n\tTSelection extends ColumnsSelection,\n\tTNullability extends Record<string, JoinNullability>,\n> = TSelection extends never ? any\n\t:\n\t\t& {\n\t\t\t[Key in keyof TSelection]: TSelection[Key] extends SQL\n\t\t\t\t? DrizzleTypeError<'You cannot reference this field without assigning it an alias first - use `.as(<alias>)`'>\n\t\t\t\t: TSelection[Key] extends SQL.Aliased ? TSelection[Key]\n\t\t\t\t: TSelection[Key] extends Table ? BuildSubquerySelection<TSelection[Key]['_']['columns'], TNullability>\n\t\t\t\t: TSelection[Key] extends Column\n\t\t\t\t\t? ApplyNullabilityToColumn<TSelection[Key], TNullability[TSelection[Key]['_']['tableName']]>\n\t\t\t\t: TSelection[Key] extends ColumnsSelection ? BuildSubquerySelection<TSelection[Key], TNullability>\n\t\t\t\t: never;\n\t\t}\n\t\t& {};\n\ntype SetJoinsNullability<TNullabilityMap extends Record<string, JoinNullability>, TValue extends JoinNullability> = {\n\t[Key in keyof TNullabilityMap]: TValue;\n};\n\nexport type AppendToNullabilityMap<\n\tTJoinsNotNull extends Record<string, JoinNullability>,\n\tTJoinedName extends string | undefined,\n\tTJoinType extends JoinType,\n> = TJoinedName extends string ? 'left' extends TJoinType ? TJoinsNotNull & { [name in TJoinedName]: 'nullable' }\n\t: 'right' extends TJoinType ? SetJoinsNullability<TJoinsNotNull, 'nullable'> & { [name in TJoinedName]: 'not-null' }\n\t: 'inner' extends TJoinType ? TJoinsNotNull & { [name in TJoinedName]: 'not-null' }\n\t: 'full' extends TJoinType ? SetJoinsNullability<TJoinsNotNull, 'nullable'> & { [name in TJoinedName]: 'nullable' }\n\t: never\n\t: TJoinsNotNull;\n\nexport type TableLike = Table | Subquery | View | SQL;\n\nexport type GetSelectTableName<TTable extends TableLike> = TTable extends Table ? TTable['_']['name']\n\t: TTable extends Subquery ? TTable['_']['alias']\n\t: TTable extends View ? TTable['_']['name']\n\t: TTable extends SQL ? undefined\n\t: never;\n\nexport type GetSelectTableSelection<TTable extends TableLike> = TTable extends Table ? TTable['_']['columns']\n\t: TTable extends Subquery | View ? Assume<TTable['_']['selectedFields'], ColumnsSelection>\n\t: TTable extends SQL ? {}\n\t: never;\n\nexport type SelectResultField<T, TDeep extends boolean = true> = T extends DrizzleTypeError<any> ? T\n\t: T extends Table ? Equal<TDeep, true> extends true ? SelectResultField<T['_']['columns'], false> : never\n\t: T extends Column<any> ? GetColumnData<T>\n\t: T extends SQL | SQL.Aliased ? T['_']['type']\n\t: T extends Record<string, any> ? SelectResultFields<T, true>\n\t: never;\n\nexport type SelectResultFields<TSelectedFields, TDeep extends boolean = true> = Simplify<\n\t{\n\t\t[Key in keyof TSelectedFields]: SelectResultField<TSelectedFields[Key], TDeep>;\n\t}\n>;\n\nexport type SetOperator = 'union' | 'intersect' | 'except';\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../src/query-builders/select.types.ts"],"sourcesContent":["import type { ChangeColumnTableName, ColumnDataType, Dialect } from '~/column-builder.ts';\nimport type { AnyColumn, Column, ColumnBaseConfig, GetColumnData, UpdateColConfig } from '~/column.ts';\nimport type { SelectedFields } from '~/operations.ts';\nimport type { ColumnsSelection, SQL, View } from '~/sql/sql.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport type { Table } from '~/table.ts';\nimport type { Assume, DrizzleTypeError, Equal, IsAny, Simplify } from '~/utils.ts';\n\nexport type JoinType = 'inner' | 'left' | 'right' | 'full' | 'cross';\n\nexport type JoinNullability = 'nullable' | 'not-null';\n\nexport type ApplyNullability<T, TNullability extends JoinNullability> = TNullability extends 'nullable' ? T | null\n\t: TNullability extends 'null' ? null\n\t: T;\n\nexport type ApplyNullabilityToColumn<TColumn extends Column, TNullability extends JoinNullability> =\n\tTNullability extends 'not-null' ? TColumn\n\t\t: Column<\n\t\t\tAssume<\n\t\t\t\tUpdateColConfig<TColumn['_'], {\n\t\t\t\t\tnotNull: TNullability extends 'nullable' ? false : TColumn['_']['notNull'];\n\t\t\t\t}>,\n\t\t\t\tColumnBaseConfig<ColumnDataType, string>\n\t\t\t>\n\t\t>;\n\nexport type ApplyNotNullMapToJoins<TResult, TNullabilityMap extends Record<string, JoinNullability>> =\n\t& {\n\t\t[TTableName in keyof TResult & keyof TNullabilityMap & string]: ApplyNullability<\n\t\t\tTResult[TTableName],\n\t\t\tTNullabilityMap[TTableName]\n\t\t>;\n\t}\n\t& {};\n\nexport type SelectMode = 'partial' | 'single' | 'multiple';\n\nexport type SelectResult<\n\tTResult,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability>,\n> = TSelectMode extends 'partial' ? SelectPartialResult<TResult, TNullabilityMap>\n\t: TSelectMode extends 'single' ? SelectResultFields<TResult>\n\t: ApplyNotNullMapToJoins<SelectResultFields<TResult>, TNullabilityMap>;\n\ntype IsUnion<T, U extends T = T> = (T extends any ? (U extends T ? false : true) : never) extends false ? false : true;\n\ntype Not<T extends boolean> = T extends true ? false : true;\n\ntype SelectPartialResult<TFields, TNullability extends Record<string, JoinNullability>> = TNullability extends\n\tTNullability ? {\n\t\t[Key in keyof TFields]: TFields[Key] extends infer TField\n\t\t\t? TField extends Table ? TField['_']['name'] extends keyof TNullability ? ApplyNullability<\n\t\t\t\t\t\tSelectResultFields<TField['_']['columns']>,\n\t\t\t\t\t\tTNullability[TField['_']['name']]\n\t\t\t\t\t>\n\t\t\t\t: never\n\t\t\t: TField extends Column\n\t\t\t\t? TField['_']['tableName'] extends keyof TNullability\n\t\t\t\t\t? ApplyNullability<SelectResultField<TField>, TNullability[TField['_']['tableName']]>\n\t\t\t\t: never\n\t\t\t: TField extends SQL | SQL.Aliased ? SelectResultField<TField>\n\t\t\t: TField extends Record<string, any>\n\t\t\t\t? TField[keyof TField] extends AnyColumn<{ tableName: infer TTableName extends string }> | SQL | SQL.Aliased\n\t\t\t\t\t? Not<IsUnion<TTableName>> extends true\n\t\t\t\t\t\t? ApplyNullability<SelectResultFields<TField>, TNullability[TTableName]>\n\t\t\t\t\t: SelectPartialResult<TField, TNullability>\n\t\t\t\t: never\n\t\t\t: never\n\t\t\t: never;\n\t}\n\t: never;\n\nexport type MapColumnsToTableAlias<\n\tTColumns extends ColumnsSelection,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TColumns]: TColumns[Key] extends Column\n\t\t\t? ChangeColumnTableName<Assume<TColumns[Key], Column>, TAlias, TDialect>\n\t\t\t: TColumns[Key];\n\t}\n\t& {};\n\nexport type AddAliasToSelection<\n\tTSelection extends ColumnsSelection,\n\tTAlias extends string,\n\tTDialect extends Dialect,\n> = Simplify<\n\tIsAny<TSelection> extends true ? any\n\t\t: {\n\t\t\t[Key in keyof TSelection]: TSelection[Key] extends Column\n\t\t\t\t? ChangeColumnTableName<TSelection[Key], TAlias, TDialect>\n\t\t\t\t: TSelection[Key] extends Table ? AddAliasToSelection<TSelection[Key]['_']['columns'], TAlias, TDialect>\n\t\t\t\t: TSelection[Key] extends SQL | SQL.Aliased ? TSelection[Key]\n\t\t\t\t: TSelection[Key] extends ColumnsSelection ? MapColumnsToTableAlias<TSelection[Key], TAlias, TDialect>\n\t\t\t\t: never;\n\t\t}\n>;\n\nexport type AppendToResult<\n\tTTableName extends string | undefined,\n\tTResult,\n\tTJoinedName extends string | undefined,\n\tTSelectedFields extends SelectedFields<Column, Table>,\n\tTOldSelectMode extends SelectMode,\n> = TOldSelectMode extends 'partial' ? TResult\n\t: TOldSelectMode extends 'single' ?\n\t\t\t& (TTableName extends string ? Record<TTableName, TResult> : TResult)\n\t\t\t& (TJoinedName extends string ? Record<TJoinedName, TSelectedFields> : TSelectedFields)\n\t: TResult & (TJoinedName extends string ? Record<TJoinedName, TSelectedFields> : TSelectedFields);\n\nexport type BuildSubquerySelection<\n\tTSelection extends ColumnsSelection,\n\tTNullability extends Record<string, JoinNullability>,\n> = TSelection extends never ? any\n\t:\n\t\t& {\n\t\t\t[Key in keyof TSelection]: TSelection[Key] extends SQL\n\t\t\t\t? DrizzleTypeError<'You cannot reference this field without assigning it an alias first - use `.as(<alias>)`'>\n\t\t\t\t: TSelection[Key] extends SQL.Aliased ? TSelection[Key]\n\t\t\t\t: TSelection[Key] extends Table ? BuildSubquerySelection<TSelection[Key]['_']['columns'], TNullability>\n\t\t\t\t: TSelection[Key] extends Column\n\t\t\t\t\t? ApplyNullabilityToColumn<TSelection[Key], TNullability[TSelection[Key]['_']['tableName']]>\n\t\t\t\t: TSelection[Key] extends ColumnsSelection ? BuildSubquerySelection<TSelection[Key], TNullability>\n\t\t\t\t: never;\n\t\t}\n\t\t& {};\n\ntype SetJoinsNullability<TNullabilityMap extends Record<string, JoinNullability>, TValue extends JoinNullability> = {\n\t[Key in keyof TNullabilityMap]: TValue;\n};\n\nexport type AppendToNullabilityMap<\n\tTJoinsNotNull extends Record<string, JoinNullability>,\n\tTJoinedName extends string | undefined,\n\tTJoinType extends JoinType,\n> = TJoinedName extends string ? 'left' extends TJoinType ? TJoinsNotNull & { [name in TJoinedName]: 'nullable' }\n\t: 'right' extends TJoinType ? SetJoinsNullability<TJoinsNotNull, 'nullable'> & { [name in TJoinedName]: 'not-null' }\n\t: 'inner' extends TJoinType ? TJoinsNotNull & { [name in TJoinedName]: 'not-null' }\n\t: 'cross' extends TJoinType ? TJoinsNotNull & { [name in TJoinedName]: 'not-null' }\n\t: 'full' extends TJoinType ? SetJoinsNullability<TJoinsNotNull, 'nullable'> & { [name in TJoinedName]: 'nullable' }\n\t: never\n\t: TJoinsNotNull;\n\nexport type TableLike = Table | Subquery | View | SQL;\n\nexport type GetSelectTableName<TTable extends TableLike> = TTable extends Table ? TTable['_']['name']\n\t: TTable extends Subquery ? TTable['_']['alias']\n\t: TTable extends View ? TTable['_']['name']\n\t: TTable extends SQL ? undefined\n\t: never;\n\nexport type GetSelectTableSelection<TTable extends TableLike> = TTable extends Table ? TTable['_']['columns']\n\t: TTable extends Subquery | View ? Assume<TTable['_']['selectedFields'], ColumnsSelection>\n\t: TTable extends SQL ? {}\n\t: never;\n\nexport type SelectResultField<T, TDeep extends boolean = true> = T extends DrizzleTypeError<any> ? T\n\t: T extends Table ? Equal<TDeep, true> extends true ? SelectResultField<T['_']['columns'], false> : never\n\t: T extends Column<any> ? GetColumnData<T>\n\t: T extends SQL | SQL.Aliased ? T['_']['type']\n\t: T extends Record<string, any> ? SelectResultFields<T, true>\n\t: never;\n\nexport type SelectResultFields<TSelectedFields, TDeep extends boolean = true> = Simplify<\n\t{\n\t\t[Key in keyof TSelectedFields]: SelectResultField<TSelectedFields[Key], TDeep>;\n\t}\n>;\n\nexport type SetOperator = 'union' | 'intersect' | 'except';\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -5,7 +5,7 @@ import type { ColumnsSelection, SQL, View } from "../sql/sql.cjs";
5
5
  import type { Subquery } from "../subquery.cjs";
6
6
  import type { Table } from "../table.cjs";
7
7
  import type { Assume, DrizzleTypeError, Equal, IsAny, Simplify } from "../utils.cjs";
8
- export type JoinType = 'inner' | 'left' | 'right' | 'full';
8
+ export type JoinType = 'inner' | 'left' | 'right' | 'full' | 'cross';
9
9
  export type JoinNullability = 'nullable' | 'not-null';
10
10
  export type ApplyNullability<T, TNullability extends JoinNullability> = TNullability extends 'nullable' ? T | null : TNullability extends 'null' ? null : T;
11
11
  export type ApplyNullabilityToColumn<TColumn extends Column, TNullability extends JoinNullability> = TNullability extends 'not-null' ? TColumn : Column<Assume<UpdateColConfig<TColumn['_'], {
@@ -42,6 +42,8 @@ export type AppendToNullabilityMap<TJoinsNotNull extends Record<string, JoinNull
42
42
  [name in TJoinedName]: 'not-null';
43
43
  } : 'inner' extends TJoinType ? TJoinsNotNull & {
44
44
  [name in TJoinedName]: 'not-null';
45
+ } : 'cross' extends TJoinType ? TJoinsNotNull & {
46
+ [name in TJoinedName]: 'not-null';
45
47
  } : 'full' extends TJoinType ? SetJoinsNullability<TJoinsNotNull, 'nullable'> & {
46
48
  [name in TJoinedName]: 'nullable';
47
49
  } : never : TJoinsNotNull;
@@ -5,7 +5,7 @@ import type { ColumnsSelection, SQL, View } from "../sql/sql.js";
5
5
  import type { Subquery } from "../subquery.js";
6
6
  import type { Table } from "../table.js";
7
7
  import type { Assume, DrizzleTypeError, Equal, IsAny, Simplify } from "../utils.js";
8
- export type JoinType = 'inner' | 'left' | 'right' | 'full';
8
+ export type JoinType = 'inner' | 'left' | 'right' | 'full' | 'cross';
9
9
  export type JoinNullability = 'nullable' | 'not-null';
10
10
  export type ApplyNullability<T, TNullability extends JoinNullability> = TNullability extends 'nullable' ? T | null : TNullability extends 'null' ? null : T;
11
11
  export type ApplyNullabilityToColumn<TColumn extends Column, TNullability extends JoinNullability> = TNullability extends 'not-null' ? TColumn : Column<Assume<UpdateColConfig<TColumn['_'], {
@@ -42,6 +42,8 @@ export type AppendToNullabilityMap<TJoinsNotNull extends Record<string, JoinNull
42
42
  [name in TJoinedName]: 'not-null';
43
43
  } : 'inner' extends TJoinType ? TJoinsNotNull & {
44
44
  [name in TJoinedName]: 'not-null';
45
+ } : 'cross' extends TJoinType ? TJoinsNotNull & {
46
+ [name in TJoinedName]: 'not-null';
45
47
  } : 'full' extends TJoinType ? SetJoinsNullability<TJoinsNotNull, 'nullable'> & {
46
48
  [name in TJoinedName]: 'nullable';
47
49
  } : never : TJoinsNotNull;
package/relations.d.cts CHANGED
@@ -68,18 +68,18 @@ export type ExtractRelationsFromTableExtraConfigSchema<TConfig extends unknown[]
68
68
  export declare function getOperators(): {
69
69
  and: typeof and;
70
70
  between: typeof between;
71
- eq: import("./expressions.ts").BinaryOperator;
71
+ eq: import("./index.ts").BinaryOperator;
72
72
  exists: typeof exists;
73
- gt: import("./expressions.ts").BinaryOperator;
74
- gte: import("./expressions.ts").BinaryOperator;
73
+ gt: import("./index.ts").BinaryOperator;
74
+ gte: import("./index.ts").BinaryOperator;
75
75
  ilike: typeof ilike;
76
76
  inArray: typeof inArray;
77
77
  isNull: typeof isNull;
78
78
  isNotNull: typeof isNotNull;
79
79
  like: typeof like;
80
- lt: import("./expressions.ts").BinaryOperator;
81
- lte: import("./expressions.ts").BinaryOperator;
82
- ne: import("./expressions.ts").BinaryOperator;
80
+ lt: import("./index.ts").BinaryOperator;
81
+ lte: import("./index.ts").BinaryOperator;
82
+ ne: import("./index.ts").BinaryOperator;
83
83
  not: typeof not;
84
84
  notBetween: typeof notBetween;
85
85
  notExists: typeof notExists;
package/relations.d.ts CHANGED
@@ -68,18 +68,18 @@ export type ExtractRelationsFromTableExtraConfigSchema<TConfig extends unknown[]
68
68
  export declare function getOperators(): {
69
69
  and: typeof and;
70
70
  between: typeof between;
71
- eq: import("./expressions.js").BinaryOperator;
71
+ eq: import("./index.js").BinaryOperator;
72
72
  exists: typeof exists;
73
- gt: import("./expressions.js").BinaryOperator;
74
- gte: import("./expressions.js").BinaryOperator;
73
+ gt: import("./index.js").BinaryOperator;
74
+ gte: import("./index.js").BinaryOperator;
75
75
  ilike: typeof ilike;
76
76
  inArray: typeof inArray;
77
77
  isNull: typeof isNull;
78
78
  isNotNull: typeof isNotNull;
79
79
  like: typeof like;
80
- lt: import("./expressions.js").BinaryOperator;
81
- lte: import("./expressions.js").BinaryOperator;
82
- ne: import("./expressions.js").BinaryOperator;
80
+ lt: import("./index.js").BinaryOperator;
81
+ lte: import("./index.js").BinaryOperator;
82
+ ne: import("./index.js").BinaryOperator;
83
83
  not: typeof not;
84
84
  notBetween: typeof notBetween;
85
85
  notExists: typeof notExists;
@@ -31,6 +31,7 @@ var import_relations = require("../relations.cjs");
31
31
  var import_db = require("../singlestore-core/db.cjs");
32
32
  var import_dialect = require("../singlestore-core/dialect.cjs");
33
33
  var import_utils = require("../utils.cjs");
34
+ var import_version = require("../version.cjs");
34
35
  var import_session = require("./session.cjs");
35
36
  var import_db2 = require("../singlestore-core/db.cjs");
36
37
  class SingleStoreDriverDriver {
@@ -77,11 +78,16 @@ function construct(client, config = {}) {
77
78
  function isCallbackClient(client) {
78
79
  return typeof client.promise === "function";
79
80
  }
81
+ const CONNECTION_ATTRS = {
82
+ _connector_name: "SingleStore Drizzle ORM Driver",
83
+ _connector_version: import_version.npmVersion
84
+ };
80
85
  function drizzle(...params) {
81
86
  if (typeof params[0] === "string") {
82
87
  const connectionString = params[0];
83
88
  const instance = (0, import_mysql2.createPool)({
84
- uri: connectionString
89
+ uri: connectionString,
90
+ connectAttributes: CONNECTION_ATTRS
85
91
  });
86
92
  return construct(instance, params[1]);
87
93
  }
@@ -89,7 +95,23 @@ function drizzle(...params) {
89
95
  const { connection, client, ...drizzleConfig } = params[0];
90
96
  if (client)
91
97
  return construct(client, drizzleConfig);
92
- const instance = typeof connection === "string" ? (0, import_mysql2.createPool)({ uri: connection, supportBigNumbers: true }) : (0, import_mysql2.createPool)(connection);
98
+ let opts = {};
99
+ if (typeof connection === "string") {
100
+ opts = {
101
+ uri: connection,
102
+ supportBigNumbers: true,
103
+ connectAttributes: CONNECTION_ATTRS
104
+ };
105
+ } else {
106
+ opts = {
107
+ ...connection,
108
+ connectAttributes: {
109
+ ...connection.connectAttributes,
110
+ ...CONNECTION_ATTRS
111
+ }
112
+ };
113
+ }
114
+ const instance = (0, import_mysql2.createPool)(opts);
93
115
  const db = construct(instance, drizzleConfig);
94
116
  return db;
95
117
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/singlestore/driver.ts"],"sourcesContent":["import { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\nimport { SingleStoreDialect } from '~/singlestore-core/dialect.ts';\nimport { type DrizzleConfig, type IfNotImported, type ImportTypeError, isConfig } from '~/utils.ts';\nimport type {\n\tSingleStoreDriverClient,\n\tSingleStoreDriverPreparedQueryHKT,\n\tSingleStoreDriverQueryResultHKT,\n} from './session.ts';\nimport { SingleStoreDriverSession } from './session.ts';\n\nexport interface SingleStoreDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class SingleStoreDriverDriver {\n\tstatic readonly [entityKind]: string = 'SingleStoreDriverDriver';\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tprivate dialect: SingleStoreDialect,\n\t\tprivate options: SingleStoreDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): SingleStoreDriverSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new SingleStoreDriverSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n}\n\nexport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\n\nexport class SingleStoreDriverDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends SingleStoreDatabase<SingleStoreDriverQueryResultHKT, SingleStoreDriverPreparedQueryHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverDatabase';\n}\n\nexport type SingleStoreDriverDrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> =\n\t& Omit<DrizzleConfig<TSchema>, 'schema'>\n\t& ({ schema: TSchema } | { schema?: undefined });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: SingleStoreDriverDrizzleConfig<TSchema> = {},\n): SingleStoreDriverDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new SingleStoreDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new SingleStoreDriverDriver(clientForInstance as SingleStoreDriverClient, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\tconst db = new SingleStoreDriverDatabase(dialect, session, schema as any) as SingleStoreDriverDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): SingleStoreDriverClient;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnySingleStoreDriverConnection = Pool | Connection | CallbackPool | CallbackConnection;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnySingleStoreDriverConnection = CallbackPool,\n>(\n\t...params: IfNotImported<\n\t\tCallbackPool,\n\t\t[ImportTypeError<'singlestore'>],\n\t\t[\n\t\t\tTClient | string,\n\t\t] | [\n\t\t\tTClient | string,\n\t\t\tSingleStoreDriverDrizzleConfig<TSchema>,\n\t\t] | [\n\t\t\t(\n\t\t\t\t& SingleStoreDriverDrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection: string | PoolOptions;\n\t\t\t\t} | {\n\t\t\t\t\tclient: TClient;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n\t>\n): SingleStoreDriverDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t\t& SingleStoreDriverDrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tconst instance = typeof connection === 'string'\n\t\t\t? createPool({ uri: connection, supportBigNumbers: true })\n\t\t\t: createPool(connection!);\n\t\tconst db = construct(instance, drizzleConfig);\n\n\t\treturn db as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as SingleStoreDriverDrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: SingleStoreDriverDrizzleConfig<TSchema>,\n\t): SingleStoreDriverDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA+G;AAE/G,oBAA2B;AAE3B,oBAA8B;AAC9B,uBAKO;AACP,gBAAoC;AACpC,qBAAmC;AACnC,mBAAuF;AAMvF,qBAAyC;AAuBzC,IAAAA,aAAoC;AAjB7B,MAAM,wBAAwB;AAAA,EAGpC,YACS,QACA,SACA,UAAoC,CAAC,GAC5C;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,wBAAU,IAAY;AAAA,EASvC,cACC,QAC4E;AAC5E,WAAO,IAAI,wCAAyB,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EACvG;AACD;AAIO,MAAM,kCAEH,8BAAiG;AAAA,EAC1G,QAA0B,wBAAU,IAAY;AACjD;AAMA,SAAS,UAIR,QACA,SAAkD,CAAC,GAGlD;AACD,QAAM,UAAU,IAAI,kCAAmB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAChE,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,QAAM,oBAAoB,iBAAiB,MAAM,IAAI,OAAO,QAAQ,IAAI;AAExE,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,mBAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,wBAAwB,mBAA8C,SAAS,EAAE,OAAO,CAAC;AAC5G,QAAM,UAAU,OAAO,cAAc,MAAM;AAC3C,QAAM,KAAK,IAAI,0BAA0B,SAAS,SAAS,MAAa;AACxE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAMA,SAAS,iBAAiB,QAAuC;AAChE,SAAO,OAAO,OAAO,YAAY;AAClC;AAIO,SAAS,WAIZ,QAqBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,mBAAmB,OAAO,CAAC;AACjC,UAAM,eAAW,0BAAW;AAAA,MAC3B,KAAK;AAAA,IACN,CAAC;AAED,WAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,UAAI,uBAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAIzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,UAAM,WAAW,OAAO,eAAe,eACpC,0BAAW,EAAE,KAAK,YAAY,mBAAmB,KAAK,CAAC,QACvD,0BAAW,UAAW;AACzB,UAAM,KAAK,UAAU,UAAU,aAAa;AAE5C,WAAO;AAAA,EACR;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAwD;AACxG;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["import_db","drizzle"]}
1
+ {"version":3,"sources":["../../src/singlestore/driver.ts"],"sourcesContent":["import { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\nimport { SingleStoreDialect } from '~/singlestore-core/dialect.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { npmVersion } from '~/version.ts';\nimport type {\n\tSingleStoreDriverClient,\n\tSingleStoreDriverPreparedQueryHKT,\n\tSingleStoreDriverQueryResultHKT,\n} from './session.ts';\nimport { SingleStoreDriverSession } from './session.ts';\n\nexport interface SingleStoreDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class SingleStoreDriverDriver {\n\tstatic readonly [entityKind]: string = 'SingleStoreDriverDriver';\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tprivate dialect: SingleStoreDialect,\n\t\tprivate options: SingleStoreDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): SingleStoreDriverSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new SingleStoreDriverSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n}\n\nexport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\n\nexport class SingleStoreDriverDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends SingleStoreDatabase<SingleStoreDriverQueryResultHKT, SingleStoreDriverPreparedQueryHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverDatabase';\n}\n\nexport type SingleStoreDriverDrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> =\n\t& Omit<DrizzleConfig<TSchema>, 'schema'>\n\t& ({ schema: TSchema } | { schema?: undefined });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: SingleStoreDriverDrizzleConfig<TSchema> = {},\n): SingleStoreDriverDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new SingleStoreDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new SingleStoreDriverDriver(clientForInstance as SingleStoreDriverClient, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\tconst db = new SingleStoreDriverDatabase(dialect, session, schema as any) as SingleStoreDriverDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): SingleStoreDriverClient;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnySingleStoreDriverConnection = Pool | Connection | CallbackPool | CallbackConnection;\n\nconst CONNECTION_ATTRS: PoolOptions['connectAttributes'] = {\n\t_connector_name: 'SingleStore Drizzle ORM Driver',\n\t_connector_version: npmVersion,\n};\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnySingleStoreDriverConnection = CallbackPool,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tSingleStoreDriverDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& SingleStoreDriverDrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | PoolOptions;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): SingleStoreDriverDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t\tconnectAttributes: CONNECTION_ATTRS,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t\t& SingleStoreDriverDrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tlet opts: PoolOptions = {};\n\t\tif (typeof connection === 'string') {\n\t\t\topts = {\n\t\t\t\turi: connection,\n\t\t\t\tsupportBigNumbers: true,\n\t\t\t\tconnectAttributes: CONNECTION_ATTRS,\n\t\t\t};\n\t\t} else {\n\t\t\topts = {\n\t\t\t\t...connection,\n\t\t\t\tconnectAttributes: {\n\t\t\t\t\t...connection!.connectAttributes,\n\t\t\t\t\t...CONNECTION_ATTRS,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst instance = createPool(opts);\n\t\tconst db = construct(instance, drizzleConfig);\n\n\t\treturn db as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as SingleStoreDriverDrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: SingleStoreDriverDrizzleConfig<TSchema>,\n\t): SingleStoreDriverDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA+G;AAE/G,oBAA2B;AAE3B,oBAA8B;AAC9B,uBAKO;AACP,gBAAoC;AACpC,qBAAmC;AACnC,mBAA6C;AAC7C,qBAA2B;AAM3B,qBAAyC;AAuBzC,IAAAA,aAAoC;AAjB7B,MAAM,wBAAwB;AAAA,EAGpC,YACS,QACA,SACA,UAAoC,CAAC,GAC5C;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,wBAAU,IAAY;AAAA,EASvC,cACC,QAC4E;AAC5E,WAAO,IAAI,wCAAyB,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EACvG;AACD;AAIO,MAAM,kCAEH,8BAAiG;AAAA,EAC1G,QAA0B,wBAAU,IAAY;AACjD;AAMA,SAAS,UAIR,QACA,SAAkD,CAAC,GAGlD;AACD,QAAM,UAAU,IAAI,kCAAmB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAChE,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,QAAM,oBAAoB,iBAAiB,MAAM,IAAI,OAAO,QAAQ,IAAI;AAExE,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,mBAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,wBAAwB,mBAA8C,SAAS,EAAE,OAAO,CAAC;AAC5G,QAAM,UAAU,OAAO,cAAc,MAAM;AAC3C,QAAM,KAAK,IAAI,0BAA0B,SAAS,SAAS,MAAa;AACxE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAMA,SAAS,iBAAiB,QAAuC;AAChE,SAAO,OAAO,OAAO,YAAY;AAClC;AAIA,MAAM,mBAAqD;AAAA,EAC1D,iBAAiB;AAAA,EACjB,oBAAoB;AACrB;AAEO,SAAS,WAIZ,QAiBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,mBAAmB,OAAO,CAAC;AACjC,UAAM,eAAW,0BAAW;AAAA,MAC3B,KAAK;AAAA,MACL,mBAAmB;AAAA,IACpB,CAAC;AAED,WAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,UAAI,uBAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAIzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,QAAI,OAAoB,CAAC;AACzB,QAAI,OAAO,eAAe,UAAU;AACnC,aAAO;AAAA,QACN,KAAK;AAAA,QACL,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,MACpB;AAAA,IACD,OAAO;AACN,aAAO;AAAA,QACN,GAAG;AAAA,QACH,mBAAmB;AAAA,UAClB,GAAG,WAAY;AAAA,UACf,GAAG;AAAA,QACJ;AAAA,MACD;AAAA,IACD;AAEA,UAAM,eAAW,0BAAW,IAAI;AAChC,UAAM,KAAK,UAAU,UAAU,aAAa;AAE5C,WAAO;AAAA,EACR;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAwD;AACxG;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["import_db","drizzle"]}
@@ -5,7 +5,7 @@ import type { Logger } from "../logger.cjs";
5
5
  import { type RelationalSchemaConfig, type TablesRelationalConfig } from "../relations.cjs";
6
6
  import { SingleStoreDatabase } from "../singlestore-core/db.cjs";
7
7
  import { SingleStoreDialect } from "../singlestore-core/dialect.cjs";
8
- import { type DrizzleConfig, type IfNotImported, type ImportTypeError } from "../utils.cjs";
8
+ import { type DrizzleConfig } from "../utils.cjs";
9
9
  import type { SingleStoreDriverClient, SingleStoreDriverPreparedQueryHKT, SingleStoreDriverQueryResultHKT } from "./session.cjs";
10
10
  import { SingleStoreDriverSession } from "./session.cjs";
11
11
  export interface SingleStoreDriverOptions {
@@ -29,9 +29,7 @@ export type SingleStoreDriverDrizzleConfig<TSchema extends Record<string, unknow
29
29
  schema?: undefined;
30
30
  });
31
31
  export type AnySingleStoreDriverConnection = Pool | Connection | CallbackPool | CallbackConnection;
32
- export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends AnySingleStoreDriverConnection = CallbackPool>(...params: IfNotImported<CallbackPool, [
33
- ImportTypeError<'singlestore'>
34
- ], [
32
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends AnySingleStoreDriverConnection = CallbackPool>(...params: [
35
33
  TClient | string
36
34
  ] | [
37
35
  TClient | string,
@@ -42,7 +40,7 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
42
40
  } | {
43
41
  client: TClient;
44
42
  }))
45
- ]>): SingleStoreDriverDatabase<TSchema> & {
43
+ ]): SingleStoreDriverDatabase<TSchema> & {
46
44
  $client: TClient;
47
45
  };
48
46
  export declare namespace drizzle {
@@ -5,7 +5,7 @@ import type { Logger } from "../logger.js";
5
5
  import { type RelationalSchemaConfig, type TablesRelationalConfig } from "../relations.js";
6
6
  import { SingleStoreDatabase } from "../singlestore-core/db.js";
7
7
  import { SingleStoreDialect } from "../singlestore-core/dialect.js";
8
- import { type DrizzleConfig, type IfNotImported, type ImportTypeError } from "../utils.js";
8
+ import { type DrizzleConfig } from "../utils.js";
9
9
  import type { SingleStoreDriverClient, SingleStoreDriverPreparedQueryHKT, SingleStoreDriverQueryResultHKT } from "./session.js";
10
10
  import { SingleStoreDriverSession } from "./session.js";
11
11
  export interface SingleStoreDriverOptions {
@@ -29,9 +29,7 @@ export type SingleStoreDriverDrizzleConfig<TSchema extends Record<string, unknow
29
29
  schema?: undefined;
30
30
  });
31
31
  export type AnySingleStoreDriverConnection = Pool | Connection | CallbackPool | CallbackConnection;
32
- export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends AnySingleStoreDriverConnection = CallbackPool>(...params: IfNotImported<CallbackPool, [
33
- ImportTypeError<'singlestore'>
34
- ], [
32
+ export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>, TClient extends AnySingleStoreDriverConnection = CallbackPool>(...params: [
35
33
  TClient | string
36
34
  ] | [
37
35
  TClient | string,
@@ -42,7 +40,7 @@ export declare function drizzle<TSchema extends Record<string, unknown> = Record
42
40
  } | {
43
41
  client: TClient;
44
42
  }))
45
- ]>): SingleStoreDriverDatabase<TSchema> & {
43
+ ]): SingleStoreDriverDatabase<TSchema> & {
46
44
  $client: TClient;
47
45
  };
48
46
  export declare namespace drizzle {
@@ -8,6 +8,7 @@ import {
8
8
  import { SingleStoreDatabase } from "../singlestore-core/db.js";
9
9
  import { SingleStoreDialect } from "../singlestore-core/dialect.js";
10
10
  import { isConfig } from "../utils.js";
11
+ import { npmVersion } from "../version.js";
11
12
  import { SingleStoreDriverSession } from "./session.js";
12
13
  class SingleStoreDriverDriver {
13
14
  constructor(client, dialect, options = {}) {
@@ -54,11 +55,16 @@ function construct(client, config = {}) {
54
55
  function isCallbackClient(client) {
55
56
  return typeof client.promise === "function";
56
57
  }
58
+ const CONNECTION_ATTRS = {
59
+ _connector_name: "SingleStore Drizzle ORM Driver",
60
+ _connector_version: npmVersion
61
+ };
57
62
  function drizzle(...params) {
58
63
  if (typeof params[0] === "string") {
59
64
  const connectionString = params[0];
60
65
  const instance = createPool({
61
- uri: connectionString
66
+ uri: connectionString,
67
+ connectAttributes: CONNECTION_ATTRS
62
68
  });
63
69
  return construct(instance, params[1]);
64
70
  }
@@ -66,7 +72,23 @@ function drizzle(...params) {
66
72
  const { connection, client, ...drizzleConfig } = params[0];
67
73
  if (client)
68
74
  return construct(client, drizzleConfig);
69
- const instance = typeof connection === "string" ? createPool({ uri: connection, supportBigNumbers: true }) : createPool(connection);
75
+ let opts = {};
76
+ if (typeof connection === "string") {
77
+ opts = {
78
+ uri: connection,
79
+ supportBigNumbers: true,
80
+ connectAttributes: CONNECTION_ATTRS
81
+ };
82
+ } else {
83
+ opts = {
84
+ ...connection,
85
+ connectAttributes: {
86
+ ...connection.connectAttributes,
87
+ ...CONNECTION_ATTRS
88
+ }
89
+ };
90
+ }
91
+ const instance = createPool(opts);
70
92
  const db = construct(instance, drizzleConfig);
71
93
  return db;
72
94
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/singlestore/driver.ts"],"sourcesContent":["import { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\nimport { SingleStoreDialect } from '~/singlestore-core/dialect.ts';\nimport { type DrizzleConfig, type IfNotImported, type ImportTypeError, isConfig } from '~/utils.ts';\nimport type {\n\tSingleStoreDriverClient,\n\tSingleStoreDriverPreparedQueryHKT,\n\tSingleStoreDriverQueryResultHKT,\n} from './session.ts';\nimport { SingleStoreDriverSession } from './session.ts';\n\nexport interface SingleStoreDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class SingleStoreDriverDriver {\n\tstatic readonly [entityKind]: string = 'SingleStoreDriverDriver';\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tprivate dialect: SingleStoreDialect,\n\t\tprivate options: SingleStoreDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): SingleStoreDriverSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new SingleStoreDriverSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n}\n\nexport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\n\nexport class SingleStoreDriverDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends SingleStoreDatabase<SingleStoreDriverQueryResultHKT, SingleStoreDriverPreparedQueryHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverDatabase';\n}\n\nexport type SingleStoreDriverDrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> =\n\t& Omit<DrizzleConfig<TSchema>, 'schema'>\n\t& ({ schema: TSchema } | { schema?: undefined });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: SingleStoreDriverDrizzleConfig<TSchema> = {},\n): SingleStoreDriverDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new SingleStoreDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new SingleStoreDriverDriver(clientForInstance as SingleStoreDriverClient, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\tconst db = new SingleStoreDriverDatabase(dialect, session, schema as any) as SingleStoreDriverDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): SingleStoreDriverClient;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnySingleStoreDriverConnection = Pool | Connection | CallbackPool | CallbackConnection;\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnySingleStoreDriverConnection = CallbackPool,\n>(\n\t...params: IfNotImported<\n\t\tCallbackPool,\n\t\t[ImportTypeError<'singlestore'>],\n\t\t[\n\t\t\tTClient | string,\n\t\t] | [\n\t\t\tTClient | string,\n\t\t\tSingleStoreDriverDrizzleConfig<TSchema>,\n\t\t] | [\n\t\t\t(\n\t\t\t\t& SingleStoreDriverDrizzleConfig<TSchema>\n\t\t\t\t& ({\n\t\t\t\t\tconnection: string | PoolOptions;\n\t\t\t\t} | {\n\t\t\t\t\tclient: TClient;\n\t\t\t\t})\n\t\t\t),\n\t\t]\n\t>\n): SingleStoreDriverDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t\t& SingleStoreDriverDrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tconst instance = typeof connection === 'string'\n\t\t\t? createPool({ uri: connection, supportBigNumbers: true })\n\t\t\t: createPool(connection!);\n\t\tconst db = construct(instance, drizzleConfig);\n\n\t\treturn db as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as SingleStoreDriverDrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: SingleStoreDriverDrizzleConfig<TSchema>,\n\t): SingleStoreDriverDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"AAAA,SAAgD,kBAA+D;AAE/G,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OAGM;AACP,SAAS,2BAA2B;AACpC,SAAS,0BAA0B;AACnC,SAAuE,gBAAgB;AAMvF,SAAS,gCAAgC;AAMlC,MAAM,wBAAwB;AAAA,EAGpC,YACS,QACA,SACA,UAAoC,CAAC,GAC5C;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,UAAU,IAAY;AAAA,EASvC,cACC,QAC4E;AAC5E,WAAO,IAAI,yBAAyB,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EACvG;AACD;AAEA,SAAS,uBAAAA,4BAA2B;AAE7B,MAAM,kCAEH,oBAAiG;AAAA,EAC1G,QAA0B,UAAU,IAAY;AACjD;AAMA,SAAS,UAIR,QACA,SAAkD,CAAC,GAGlD;AACD,QAAM,UAAU,IAAI,mBAAmB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAChE,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,QAAM,oBAAoB,iBAAiB,MAAM,IAAI,OAAO,QAAQ,IAAI;AAExE,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,wBAAwB,mBAA8C,SAAS,EAAE,OAAO,CAAC;AAC5G,QAAM,UAAU,OAAO,cAAc,MAAM;AAC3C,QAAM,KAAK,IAAI,0BAA0B,SAAS,SAAS,MAAa;AACxE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAMA,SAAS,iBAAiB,QAAuC;AAChE,SAAO,OAAO,OAAO,YAAY;AAClC;AAIO,SAAS,WAIZ,QAqBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,mBAAmB,OAAO,CAAC;AACjC,UAAM,WAAW,WAAW;AAAA,MAC3B,KAAK;AAAA,IACN,CAAC;AAED,WAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,MAAI,SAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAIzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,UAAM,WAAW,OAAO,eAAe,WACpC,WAAW,EAAE,KAAK,YAAY,mBAAmB,KAAK,CAAC,IACvD,WAAW,UAAW;AACzB,UAAM,KAAK,UAAU,UAAU,aAAa;AAE5C,WAAO;AAAA,EACR;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAwD;AACxG;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["SingleStoreDatabase","drizzle"]}
1
+ {"version":3,"sources":["../../src/singlestore/driver.ts"],"sourcesContent":["import { type Connection as CallbackConnection, createPool, type Pool as CallbackPool, type PoolOptions } from 'mysql2';\nimport type { Connection, Pool } from 'mysql2/promise';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\nimport { SingleStoreDialect } from '~/singlestore-core/dialect.ts';\nimport { type DrizzleConfig, isConfig } from '~/utils.ts';\nimport { npmVersion } from '~/version.ts';\nimport type {\n\tSingleStoreDriverClient,\n\tSingleStoreDriverPreparedQueryHKT,\n\tSingleStoreDriverQueryResultHKT,\n} from './session.ts';\nimport { SingleStoreDriverSession } from './session.ts';\n\nexport interface SingleStoreDriverOptions {\n\tlogger?: Logger;\n}\n\nexport class SingleStoreDriverDriver {\n\tstatic readonly [entityKind]: string = 'SingleStoreDriverDriver';\n\n\tconstructor(\n\t\tprivate client: SingleStoreDriverClient,\n\t\tprivate dialect: SingleStoreDialect,\n\t\tprivate options: SingleStoreDriverOptions = {},\n\t) {\n\t}\n\n\tcreateSession(\n\t\tschema: RelationalSchemaConfig<TablesRelationalConfig> | undefined,\n\t): SingleStoreDriverSession<Record<string, unknown>, TablesRelationalConfig> {\n\t\treturn new SingleStoreDriverSession(this.client, this.dialect, schema, { logger: this.options.logger });\n\t}\n}\n\nexport { SingleStoreDatabase } from '~/singlestore-core/db.ts';\n\nexport class SingleStoreDriverDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends SingleStoreDatabase<SingleStoreDriverQueryResultHKT, SingleStoreDriverPreparedQueryHKT, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreDriverDatabase';\n}\n\nexport type SingleStoreDriverDrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> =\n\t& Omit<DrizzleConfig<TSchema>, 'schema'>\n\t& ({ schema: TSchema } | { schema?: undefined });\n\nfunction construct<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends Pool | Connection | CallbackPool | CallbackConnection = CallbackPool,\n>(\n\tclient: TClient,\n\tconfig: SingleStoreDriverDrizzleConfig<TSchema> = {},\n): SingleStoreDriverDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new SingleStoreDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tconst clientForInstance = isCallbackClient(client) ? client.promise() : client;\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst driver = new SingleStoreDriverDriver(clientForInstance as SingleStoreDriverClient, dialect, { logger });\n\tconst session = driver.createSession(schema);\n\tconst db = new SingleStoreDriverDatabase(dialect, session, schema as any) as SingleStoreDriverDatabase<TSchema>;\n\t(<any> db).$client = client;\n\n\treturn db as any;\n}\n\ninterface CallbackClient {\n\tpromise(): SingleStoreDriverClient;\n}\n\nfunction isCallbackClient(client: any): client is CallbackClient {\n\treturn typeof client.promise === 'function';\n}\n\nexport type AnySingleStoreDriverConnection = Pool | Connection | CallbackPool | CallbackConnection;\n\nconst CONNECTION_ATTRS: PoolOptions['connectAttributes'] = {\n\t_connector_name: 'SingleStore Drizzle ORM Driver',\n\t_connector_version: npmVersion,\n};\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnySingleStoreDriverConnection = CallbackPool,\n>(\n\t...params: [\n\t\tTClient | string,\n\t] | [\n\t\tTClient | string,\n\t\tSingleStoreDriverDrizzleConfig<TSchema>,\n\t] | [\n\t\t(\n\t\t\t& SingleStoreDriverDrizzleConfig<TSchema>\n\t\t\t& ({\n\t\t\t\tconnection: string | PoolOptions;\n\t\t\t} | {\n\t\t\t\tclient: TClient;\n\t\t\t})\n\t\t),\n\t]\n): SingleStoreDriverDatabase<TSchema> & {\n\t$client: TClient;\n} {\n\tif (typeof params[0] === 'string') {\n\t\tconst connectionString = params[0]!;\n\t\tconst instance = createPool({\n\t\t\turi: connectionString,\n\t\t\tconnectAttributes: CONNECTION_ATTRS,\n\t\t});\n\n\t\treturn construct(instance, params[1]) as any;\n\t}\n\n\tif (isConfig(params[0])) {\n\t\tconst { connection, client, ...drizzleConfig } = params[0] as\n\t\t\t& { connection?: PoolOptions | string; client?: TClient }\n\t\t\t& SingleStoreDriverDrizzleConfig<TSchema>;\n\n\t\tif (client) return construct(client, drizzleConfig) as any;\n\n\t\tlet opts: PoolOptions = {};\n\t\tif (typeof connection === 'string') {\n\t\t\topts = {\n\t\t\t\turi: connection,\n\t\t\t\tsupportBigNumbers: true,\n\t\t\t\tconnectAttributes: CONNECTION_ATTRS,\n\t\t\t};\n\t\t} else {\n\t\t\topts = {\n\t\t\t\t...connection,\n\t\t\t\tconnectAttributes: {\n\t\t\t\t\t...connection!.connectAttributes,\n\t\t\t\t\t...CONNECTION_ATTRS,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst instance = createPool(opts);\n\t\tconst db = construct(instance, drizzleConfig);\n\n\t\treturn db as any;\n\t}\n\n\treturn construct(params[0] as TClient, params[1] as SingleStoreDriverDrizzleConfig<TSchema> | undefined) as any;\n}\n\nexport namespace drizzle {\n\texport function mock<TSchema extends Record<string, unknown> = Record<string, never>>(\n\t\tconfig?: SingleStoreDriverDrizzleConfig<TSchema>,\n\t): SingleStoreDriverDatabase<TSchema> & {\n\t\t$client: '$client is not available on drizzle.mock()';\n\t} {\n\t\treturn construct({} as any, config) as any;\n\t}\n}\n"],"mappings":"AAAA,SAAgD,kBAA+D;AAE/G,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B;AAAA,EACC;AAAA,EACA;AAAA,OAGM;AACP,SAAS,2BAA2B;AACpC,SAAS,0BAA0B;AACnC,SAA6B,gBAAgB;AAC7C,SAAS,kBAAkB;AAM3B,SAAS,gCAAgC;AAMlC,MAAM,wBAAwB;AAAA,EAGpC,YACS,QACA,SACA,UAAoC,CAAC,GAC5C;AAHO;AACA;AACA;AAAA,EAET;AAAA,EAPA,QAAiB,UAAU,IAAY;AAAA,EASvC,cACC,QAC4E;AAC5E,WAAO,IAAI,yBAAyB,KAAK,QAAQ,KAAK,SAAS,QAAQ,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAAA,EACvG;AACD;AAEA,SAAS,uBAAAA,4BAA2B;AAE7B,MAAM,kCAEH,oBAAiG;AAAA,EAC1G,QAA0B,UAAU,IAAY;AACjD;AAMA,SAAS,UAIR,QACA,SAAkD,CAAC,GAGlD;AACD,QAAM,UAAU,IAAI,mBAAmB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAChE,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,QAAM,oBAAoB,iBAAiB,MAAM,IAAI,OAAO,QAAQ,IAAI;AAExE,MAAI;AACJ,MAAI,OAAO,QAAQ;AAClB,UAAM,eAAe;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACD;AACA,aAAS;AAAA,MACR,YAAY,OAAO;AAAA,MACnB,QAAQ,aAAa;AAAA,MACrB,eAAe,aAAa;AAAA,IAC7B;AAAA,EACD;AAEA,QAAM,SAAS,IAAI,wBAAwB,mBAA8C,SAAS,EAAE,OAAO,CAAC;AAC5G,QAAM,UAAU,OAAO,cAAc,MAAM;AAC3C,QAAM,KAAK,IAAI,0BAA0B,SAAS,SAAS,MAAa;AACxE,EAAO,GAAI,UAAU;AAErB,SAAO;AACR;AAMA,SAAS,iBAAiB,QAAuC;AAChE,SAAO,OAAO,OAAO,YAAY;AAClC;AAIA,MAAM,mBAAqD;AAAA,EAC1D,iBAAiB;AAAA,EACjB,oBAAoB;AACrB;AAEO,SAAS,WAIZ,QAiBF;AACD,MAAI,OAAO,OAAO,CAAC,MAAM,UAAU;AAClC,UAAM,mBAAmB,OAAO,CAAC;AACjC,UAAM,WAAW,WAAW;AAAA,MAC3B,KAAK;AAAA,MACL,mBAAmB;AAAA,IACpB,CAAC;AAED,WAAO,UAAU,UAAU,OAAO,CAAC,CAAC;AAAA,EACrC;AAEA,MAAI,SAAS,OAAO,CAAC,CAAC,GAAG;AACxB,UAAM,EAAE,YAAY,QAAQ,GAAG,cAAc,IAAI,OAAO,CAAC;AAIzD,QAAI;AAAQ,aAAO,UAAU,QAAQ,aAAa;AAElD,QAAI,OAAoB,CAAC;AACzB,QAAI,OAAO,eAAe,UAAU;AACnC,aAAO;AAAA,QACN,KAAK;AAAA,QACL,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,MACpB;AAAA,IACD,OAAO;AACN,aAAO;AAAA,QACN,GAAG;AAAA,QACH,mBAAmB;AAAA,UAClB,GAAG,WAAY;AAAA,UACf,GAAG;AAAA,QACJ;AAAA,MACD;AAAA,IACD;AAEA,UAAM,WAAW,WAAW,IAAI;AAChC,UAAM,KAAK,UAAU,UAAU,aAAa;AAE5C,WAAO;AAAA,EACR;AAEA,SAAO,UAAU,OAAO,CAAC,GAAc,OAAO,CAAC,CAAwD;AACxG;AAAA,CAEO,CAAUC,aAAV;AACC,WAAS,KACf,QAGC;AACD,WAAO,UAAU,CAAC,GAAU,MAAM;AAAA,EACnC;AANO,EAAAA,SAAS;AAAA,GADA;","names":["SingleStoreDatabase","drizzle"]}
@@ -26,8 +26,8 @@ var import_casing = require("../casing.cjs");
26
26
  var import_column = require("../column.cjs");
27
27
  var import_entity = require("../entity.cjs");
28
28
  var import_errors = require("../errors.cjs");
29
- var import_expressions = require("../expressions.cjs");
30
29
  var import_relations = require("../relations.cjs");
30
+ var import_expressions = require("../sql/expressions/index.cjs");
31
31
  var import_sql = require("../sql/sql.cjs");
32
32
  var import_subquery = require("../subquery.cjs");
33
33
  var import_table = require("../table.cjs");
@@ -225,13 +225,14 @@ class SingleStoreDialect {
225
225
  }
226
226
  const table2 = joinMeta.table;
227
227
  const lateralSql = joinMeta.lateral ? import_sql.sql` lateral` : void 0;
228
+ const onSql = joinMeta.on ? import_sql.sql` on ${joinMeta.on}` : void 0;
228
229
  if ((0, import_entity.is)(table2, import_table2.SingleStoreTable)) {
229
230
  const tableName = table2[import_table2.SingleStoreTable.Symbol.Name];
230
231
  const tableSchema = table2[import_table2.SingleStoreTable.Symbol.Schema];
231
232
  const origTableName = table2[import_table2.SingleStoreTable.Symbol.OriginalName];
232
233
  const alias = tableName === origTableName ? void 0 : joinMeta.alias;
233
234
  joinsArray.push(
234
- import_sql.sql`${import_sql.sql.raw(joinMeta.joinType)} join${lateralSql} ${tableSchema ? import_sql.sql`${import_sql.sql.identifier(tableSchema)}.` : void 0}${import_sql.sql.identifier(origTableName)}${alias && import_sql.sql` ${import_sql.sql.identifier(alias)}`} on ${joinMeta.on}`
235
+ import_sql.sql`${import_sql.sql.raw(joinMeta.joinType)} join${lateralSql} ${tableSchema ? import_sql.sql`${import_sql.sql.identifier(tableSchema)}.` : void 0}${import_sql.sql.identifier(origTableName)}${alias && import_sql.sql` ${import_sql.sql.identifier(alias)}`}${onSql}`
235
236
  );
236
237
  } else if ((0, import_entity.is)(table2, import_sql.View)) {
237
238
  const viewName = table2[import_view_common.ViewBaseConfig].name;
@@ -239,11 +240,11 @@ class SingleStoreDialect {
239
240
  const origViewName = table2[import_view_common.ViewBaseConfig].originalName;
240
241
  const alias = viewName === origViewName ? void 0 : joinMeta.alias;
241
242
  joinsArray.push(
242
- import_sql.sql`${import_sql.sql.raw(joinMeta.joinType)} join${lateralSql} ${viewSchema ? import_sql.sql`${import_sql.sql.identifier(viewSchema)}.` : void 0}${import_sql.sql.identifier(origViewName)}${alias && import_sql.sql` ${import_sql.sql.identifier(alias)}`} on ${joinMeta.on}`
243
+ import_sql.sql`${import_sql.sql.raw(joinMeta.joinType)} join${lateralSql} ${viewSchema ? import_sql.sql`${import_sql.sql.identifier(viewSchema)}.` : void 0}${import_sql.sql.identifier(origViewName)}${alias && import_sql.sql` ${import_sql.sql.identifier(alias)}`}${onSql}`
243
244
  );
244
245
  } else {
245
246
  joinsArray.push(
246
- import_sql.sql`${import_sql.sql.raw(joinMeta.joinType)} join${lateralSql} ${table2} on ${joinMeta.on}`
247
+ import_sql.sql`${import_sql.sql.raw(joinMeta.joinType)} join${lateralSql} ${table2}${onSql}`
247
248
  );
248
249
  }
249
250
  if (index < joins.length - 1) {