drizzle-orm 0.30.7 → 0.30.8

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 (108) hide show
  1. package/aws-data-api/common/index.cjs +12 -0
  2. package/aws-data-api/common/index.cjs.map +1 -1
  3. package/aws-data-api/common/index.d.cts +1 -1
  4. package/aws-data-api/common/index.d.ts +1 -1
  5. package/aws-data-api/common/index.js +12 -0
  6. package/aws-data-api/common/index.js.map +1 -1
  7. package/aws-data-api/pg/driver.cjs +33 -0
  8. package/aws-data-api/pg/driver.cjs.map +1 -1
  9. package/aws-data-api/pg/driver.d.cts +11 -3
  10. package/aws-data-api/pg/driver.d.ts +11 -3
  11. package/aws-data-api/pg/driver.js +33 -1
  12. package/aws-data-api/pg/driver.js.map +1 -1
  13. package/aws-data-api/pg/session.cjs +26 -16
  14. package/aws-data-api/pg/session.cjs.map +1 -1
  15. package/aws-data-api/pg/session.d.cts +5 -2
  16. package/aws-data-api/pg/session.d.ts +5 -2
  17. package/aws-data-api/pg/session.js +26 -16
  18. package/aws-data-api/pg/session.js.map +1 -1
  19. package/d1/driver.cjs +1 -1
  20. package/d1/driver.cjs.map +1 -1
  21. package/d1/driver.js +1 -1
  22. package/d1/driver.js.map +1 -1
  23. package/d1/migrator.cjs +30 -1
  24. package/d1/migrator.cjs.map +1 -1
  25. package/d1/migrator.js +30 -1
  26. package/d1/migrator.js.map +1 -1
  27. package/d1/session.cjs.map +1 -1
  28. package/d1/session.d.cts +1 -1
  29. package/d1/session.d.ts +1 -1
  30. package/d1/session.js.map +1 -1
  31. package/mysql-core/dialect.cjs +2 -2
  32. package/mysql-core/dialect.cjs.map +1 -1
  33. package/mysql-core/dialect.js +3 -3
  34. package/mysql-core/dialect.js.map +1 -1
  35. package/mysql-core/query-builders/select.cjs +2 -2
  36. package/mysql-core/query-builders/select.cjs.map +1 -1
  37. package/mysql-core/query-builders/select.js +3 -3
  38. package/mysql-core/query-builders/select.js.map +1 -1
  39. package/mysql-core/query-builders/update.d.cts +1 -1
  40. package/mysql-core/query-builders/update.d.ts +1 -1
  41. package/package.json +2 -2
  42. package/pg-core/columns/enum.cjs +8 -2
  43. package/pg-core/columns/enum.cjs.map +1 -1
  44. package/pg-core/columns/enum.d.cts +1 -0
  45. package/pg-core/columns/enum.d.ts +1 -0
  46. package/pg-core/columns/enum.js +6 -1
  47. package/pg-core/columns/enum.js.map +1 -1
  48. package/pg-core/dialect.cjs +4 -4
  49. package/pg-core/dialect.cjs.map +1 -1
  50. package/pg-core/dialect.js +17 -6
  51. package/pg-core/dialect.js.map +1 -1
  52. package/pg-core/query-builders/insert.cjs +10 -3
  53. package/pg-core/query-builders/insert.cjs.map +1 -1
  54. package/pg-core/query-builders/insert.d.cts +5 -2
  55. package/pg-core/query-builders/insert.d.ts +5 -2
  56. package/pg-core/query-builders/insert.js +10 -3
  57. package/pg-core/query-builders/insert.js.map +1 -1
  58. package/pg-core/query-builders/select.cjs +2 -2
  59. package/pg-core/query-builders/select.cjs.map +1 -1
  60. package/pg-core/query-builders/select.js +3 -3
  61. package/pg-core/query-builders/select.js.map +1 -1
  62. package/pg-core/query-builders/update.d.cts +1 -1
  63. package/pg-core/query-builders/update.d.ts +1 -1
  64. package/pg-core/schema.cjs +4 -0
  65. package/pg-core/schema.cjs.map +1 -1
  66. package/pg-core/schema.d.cts +2 -0
  67. package/pg-core/schema.d.ts +2 -0
  68. package/pg-core/schema.js +4 -0
  69. package/pg-core/schema.js.map +1 -1
  70. package/query-builders/select.types.cjs.map +1 -1
  71. package/query-builders/select.types.d.cts +4 -4
  72. package/query-builders/select.types.d.ts +4 -4
  73. package/selection-proxy.cjs +5 -5
  74. package/selection-proxy.cjs.map +1 -1
  75. package/selection-proxy.js +6 -6
  76. package/selection-proxy.js.map +1 -1
  77. package/sql/sql.cjs +12 -5
  78. package/sql/sql.cjs.map +1 -1
  79. package/sql/sql.js +13 -6
  80. package/sql/sql.js.map +1 -1
  81. package/sqlite-core/dialect.cjs +2 -2
  82. package/sqlite-core/dialect.cjs.map +1 -1
  83. package/sqlite-core/dialect.d.cts +1 -1
  84. package/sqlite-core/dialect.d.ts +1 -1
  85. package/sqlite-core/dialect.js +3 -3
  86. package/sqlite-core/dialect.js.map +1 -1
  87. package/sqlite-core/query-builders/insert.d.cts +1 -1
  88. package/sqlite-core/query-builders/insert.d.ts +1 -1
  89. package/sqlite-core/query-builders/select.cjs +2 -2
  90. package/sqlite-core/query-builders/select.cjs.map +1 -1
  91. package/sqlite-core/query-builders/select.js +3 -3
  92. package/sqlite-core/query-builders/select.js.map +1 -1
  93. package/sqlite-core/query-builders/update.d.cts +1 -1
  94. package/sqlite-core/query-builders/update.d.ts +1 -1
  95. package/subquery.cjs +3 -7
  96. package/subquery.cjs.map +1 -1
  97. package/subquery.d.cts +5 -4
  98. package/subquery.d.ts +5 -4
  99. package/subquery.js +3 -6
  100. package/subquery.js.map +1 -1
  101. package/utils.cjs +1 -1
  102. package/utils.cjs.map +1 -1
  103. package/utils.js +2 -2
  104. package/utils.js.map +1 -1
  105. package/version.cjs +1 -1
  106. package/version.d.cts +1 -1
  107. package/version.d.ts +1 -1
  108. package/version.js +1 -1
@@ -41,6 +41,18 @@ function getValueFromDataApi(field) {
41
41
  if (field.arrayValue.stringValues !== void 0) {
42
42
  return field.arrayValue.stringValues;
43
43
  }
44
+ if (field.arrayValue.longValues !== void 0) {
45
+ return field.arrayValue.longValues;
46
+ }
47
+ if (field.arrayValue.doubleValues !== void 0) {
48
+ return field.arrayValue.doubleValues;
49
+ }
50
+ if (field.arrayValue.booleanValues !== void 0) {
51
+ return field.arrayValue.booleanValues;
52
+ }
53
+ if (field.arrayValue.arrayValues !== void 0) {
54
+ return field.arrayValue.arrayValues;
55
+ }
44
56
  throw new Error("Unknown array type");
45
57
  } else {
46
58
  throw new Error("Unknown type");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/aws-data-api/common/index.ts"],"sourcesContent":["import type { Field } from '@aws-sdk/client-rds-data';\nimport { TypeHint } from '@aws-sdk/client-rds-data';\nimport type { QueryTypingsValue } from '~/sql/sql.ts';\n\nexport function getValueFromDataApi(field: Field) {\n\tif (field.stringValue !== undefined) {\n\t\treturn field.stringValue;\n\t} else if (field.booleanValue !== undefined) {\n\t\treturn field.booleanValue;\n\t} else if (field.doubleValue !== undefined) {\n\t\treturn field.doubleValue;\n\t} else if (field.isNull !== undefined) {\n\t\treturn null;\n\t} else if (field.longValue !== undefined) {\n\t\treturn field.longValue;\n\t} else if (field.blobValue !== undefined) {\n\t\treturn field.blobValue;\n\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t} else if (field.arrayValue !== undefined) {\n\t\tif (field.arrayValue.stringValues !== undefined) {\n\t\t\treturn field.arrayValue.stringValues;\n\t\t}\n\t\tthrow new Error('Unknown array type');\n\t} else {\n\t\tthrow new Error('Unknown type');\n\t}\n}\n\nexport function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined {\n\tif (typings === 'date') {\n\t\treturn TypeHint.DATE;\n\t} else if (typings === 'decimal') {\n\t\treturn TypeHint.DECIMAL;\n\t} else if (typings === 'json') {\n\t\treturn TypeHint.JSON;\n\t} else if (typings === 'time') {\n\t\treturn TypeHint.TIME;\n\t} else if (typings === 'timestamp') {\n\t\treturn TypeHint.TIMESTAMP;\n\t} else if (typings === 'uuid') {\n\t\treturn TypeHint.UUID;\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\nexport function toValueParam(value: any, typings?: QueryTypingsValue): { value: Field; typeHint?: TypeHint } {\n\tconst response: { value: Field; typeHint?: TypeHint } = {\n\t\tvalue: {} as any,\n\t\ttypeHint: typingsToAwsTypeHint(typings),\n\t};\n\n\tif (value === null) {\n\t\tresponse.value = { isNull: true };\n\t} else if (typeof value === 'string') {\n\t\tswitch (response.typeHint) {\n\t\t\tcase TypeHint.DATE: {\n\t\t\t\tresponse.value = { stringValue: value.split('T')[0]! };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TypeHint.TIMESTAMP: {\n\t\t\t\tresponse.value = { stringValue: value.replace('T', ' ').replace('Z', '') };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tresponse.value = { stringValue: value };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else if (typeof value === 'number' && Number.isInteger(value)) {\n\t\tresponse.value = { longValue: value };\n\t} else if (typeof value === 'number' && !Number.isInteger(value)) {\n\t\tresponse.value = { doubleValue: value };\n\t} else if (typeof value === 'boolean') {\n\t\tresponse.value = { booleanValue: value };\n\t} else if (value instanceof Date) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t// TODO: check if this clause is needed? Seems like date value always comes as string\n\t\tresponse.value = { stringValue: value.toISOString().replace('T', ' ').replace('Z', '') };\n\t} else {\n\t\tthrow new Error(`Unknown type for ${value}`);\n\t}\n\n\treturn response;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,6BAAyB;AAGlB,SAAS,oBAAoB,OAAc;AACjD,MAAI,MAAM,gBAAgB,QAAW;AACpC,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,iBAAiB,QAAW;AAC5C,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,gBAAgB,QAAW;AAC3C,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,WAAW,QAAW;AACtC,WAAO;AAAA,EACR,WAAW,MAAM,cAAc,QAAW;AACzC,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,cAAc,QAAW;AACzC,WAAO,MAAM;AAAA,EAEd,WAAW,MAAM,eAAe,QAAW;AAC1C,QAAI,MAAM,WAAW,iBAAiB,QAAW;AAChD,aAAO,MAAM,WAAW;AAAA,IACzB;AACA,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACrC,OAAO;AACN,UAAM,IAAI,MAAM,cAAc;AAAA,EAC/B;AACD;AAEO,SAAS,qBAAqB,SAAmD;AACvF,MAAI,YAAY,QAAQ;AACvB,WAAO,gCAAS;AAAA,EACjB,WAAW,YAAY,WAAW;AACjC,WAAO,gCAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,gCAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,gCAAS;AAAA,EACjB,WAAW,YAAY,aAAa;AACnC,WAAO,gCAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,gCAAS;AAAA,EACjB,OAAO;AACN,WAAO;AAAA,EACR;AACD;AAEO,SAAS,aAAa,OAAY,SAAoE;AAC5G,QAAM,WAAkD;AAAA,IACvD,OAAO,CAAC;AAAA,IACR,UAAU,qBAAqB,OAAO;AAAA,EACvC;AAEA,MAAI,UAAU,MAAM;AACnB,aAAS,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjC,WAAW,OAAO,UAAU,UAAU;AACrC,YAAQ,SAAS,UAAU;AAAA,MAC1B,KAAK,gCAAS,MAAM;AACnB,iBAAS,QAAQ,EAAE,aAAa,MAAM,MAAM,GAAG,EAAE,CAAC,EAAG;AACrD;AAAA,MACD;AAAA,MACA,KAAK,gCAAS,WAAW;AACxB,iBAAS,QAAQ,EAAE,aAAa,MAAM,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE;AACzE;AAAA,MACD;AAAA,MACA,SAAS;AACR,iBAAS,QAAQ,EAAE,aAAa,MAAM;AACtC;AAAA,MACD;AAAA,IACD;AAAA,EACD,WAAW,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,GAAG;AAChE,aAAS,QAAQ,EAAE,WAAW,MAAM;AAAA,EACrC,WAAW,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG;AACjE,aAAS,QAAQ,EAAE,aAAa,MAAM;AAAA,EACvC,WAAW,OAAO,UAAU,WAAW;AACtC,aAAS,QAAQ,EAAE,cAAc,MAAM;AAAA,EACxC,WAAW,iBAAiB,MAAM;AAEjC,aAAS,QAAQ,EAAE,aAAa,MAAM,YAAY,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE;AAAA,EACxF,OAAO;AACN,UAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO;AACR;","names":[]}
1
+ {"version":3,"sources":["../../../src/aws-data-api/common/index.ts"],"sourcesContent":["import type { Field } from '@aws-sdk/client-rds-data';\nimport { TypeHint } from '@aws-sdk/client-rds-data';\nimport type { QueryTypingsValue } from '~/sql/sql.ts';\n\nexport function getValueFromDataApi(field: Field) {\n\tif (field.stringValue !== undefined) {\n\t\treturn field.stringValue;\n\t} else if (field.booleanValue !== undefined) {\n\t\treturn field.booleanValue;\n\t} else if (field.doubleValue !== undefined) {\n\t\treturn field.doubleValue;\n\t} else if (field.isNull !== undefined) {\n\t\treturn null;\n\t} else if (field.longValue !== undefined) {\n\t\treturn field.longValue;\n\t} else if (field.blobValue !== undefined) {\n\t\treturn field.blobValue;\n\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t} else if (field.arrayValue !== undefined) {\n\t\tif (field.arrayValue.stringValues !== undefined) {\n\t\t\treturn field.arrayValue.stringValues;\n\t\t}\n\t\tif (field.arrayValue.longValues !== undefined) {\n\t\t\treturn field.arrayValue.longValues;\n\t\t}\n\t\tif (field.arrayValue.doubleValues !== undefined) {\n\t\t\treturn field.arrayValue.doubleValues;\n\t\t}\n\t\tif (field.arrayValue.booleanValues !== undefined) {\n\t\t\treturn field.arrayValue.booleanValues;\n\t\t}\n\t\tif (field.arrayValue.arrayValues !== undefined) {\n\t\t\treturn field.arrayValue.arrayValues;\n\t\t}\n\n\t\tthrow new Error('Unknown array type');\n\t} else {\n\t\tthrow new Error('Unknown type');\n\t}\n}\n\nexport function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined {\n\tif (typings === 'date') {\n\t\treturn TypeHint.DATE;\n\t} else if (typings === 'decimal') {\n\t\treturn TypeHint.DECIMAL;\n\t} else if (typings === 'json') {\n\t\treturn TypeHint.JSON;\n\t} else if (typings === 'time') {\n\t\treturn TypeHint.TIME;\n\t} else if (typings === 'timestamp') {\n\t\treturn TypeHint.TIMESTAMP;\n\t} else if (typings === 'uuid') {\n\t\treturn TypeHint.UUID;\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\nexport function toValueParam(value: any, typings?: QueryTypingsValue): { value: Field; typeHint?: TypeHint } {\n\tconst response: { value: Field; typeHint?: TypeHint } = {\n\t\tvalue: {} as any,\n\t\ttypeHint: typingsToAwsTypeHint(typings),\n\t};\n\n\tif (value === null) {\n\t\tresponse.value = { isNull: true };\n\t} else if (typeof value === 'string') {\n\t\tswitch (response.typeHint) {\n\t\t\tcase TypeHint.DATE: {\n\t\t\t\tresponse.value = { stringValue: value.split('T')[0]! };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TypeHint.TIMESTAMP: {\n\t\t\t\tresponse.value = { stringValue: value.replace('T', ' ').replace('Z', '') };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tresponse.value = { stringValue: value };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else if (typeof value === 'number' && Number.isInteger(value)) {\n\t\tresponse.value = { longValue: value };\n\t} else if (typeof value === 'number' && !Number.isInteger(value)) {\n\t\tresponse.value = { doubleValue: value };\n\t} else if (typeof value === 'boolean') {\n\t\tresponse.value = { booleanValue: value };\n\t} else if (value instanceof Date) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t// TODO: check if this clause is needed? Seems like date value always comes as string\n\t\tresponse.value = { stringValue: value.toISOString().replace('T', ' ').replace('Z', '') };\n\t} else {\n\t\tthrow new Error(`Unknown type for ${value}`);\n\t}\n\n\treturn response;\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,7 @@
1
1
  import type { Field } from '@aws-sdk/client-rds-data';
2
2
  import { TypeHint } from '@aws-sdk/client-rds-data';
3
3
  import type { QueryTypingsValue } from "../../sql/sql.cjs";
4
- export declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | Uint8Array | null;
4
+ export declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | number[] | Uint8Array | boolean[] | import("@aws-sdk/client-rds-data").ArrayValue[] | null;
5
5
  export declare function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined;
6
6
  export declare function toValueParam(value: any, typings?: QueryTypingsValue): {
7
7
  value: Field;
@@ -1,7 +1,7 @@
1
1
  import type { Field } from '@aws-sdk/client-rds-data';
2
2
  import { TypeHint } from '@aws-sdk/client-rds-data';
3
3
  import type { QueryTypingsValue } from "../../sql/sql.js";
4
- export declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | Uint8Array | null;
4
+ export declare function getValueFromDataApi(field: Field): string | number | boolean | string[] | number[] | Uint8Array | boolean[] | import("@aws-sdk/client-rds-data").ArrayValue[] | null;
5
5
  export declare function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined;
6
6
  export declare function toValueParam(value: any, typings?: QueryTypingsValue): {
7
7
  value: Field;
@@ -16,6 +16,18 @@ function getValueFromDataApi(field) {
16
16
  if (field.arrayValue.stringValues !== void 0) {
17
17
  return field.arrayValue.stringValues;
18
18
  }
19
+ if (field.arrayValue.longValues !== void 0) {
20
+ return field.arrayValue.longValues;
21
+ }
22
+ if (field.arrayValue.doubleValues !== void 0) {
23
+ return field.arrayValue.doubleValues;
24
+ }
25
+ if (field.arrayValue.booleanValues !== void 0) {
26
+ return field.arrayValue.booleanValues;
27
+ }
28
+ if (field.arrayValue.arrayValues !== void 0) {
29
+ return field.arrayValue.arrayValues;
30
+ }
19
31
  throw new Error("Unknown array type");
20
32
  } else {
21
33
  throw new Error("Unknown type");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/aws-data-api/common/index.ts"],"sourcesContent":["import type { Field } from '@aws-sdk/client-rds-data';\nimport { TypeHint } from '@aws-sdk/client-rds-data';\nimport type { QueryTypingsValue } from '~/sql/sql.ts';\n\nexport function getValueFromDataApi(field: Field) {\n\tif (field.stringValue !== undefined) {\n\t\treturn field.stringValue;\n\t} else if (field.booleanValue !== undefined) {\n\t\treturn field.booleanValue;\n\t} else if (field.doubleValue !== undefined) {\n\t\treturn field.doubleValue;\n\t} else if (field.isNull !== undefined) {\n\t\treturn null;\n\t} else if (field.longValue !== undefined) {\n\t\treturn field.longValue;\n\t} else if (field.blobValue !== undefined) {\n\t\treturn field.blobValue;\n\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t} else if (field.arrayValue !== undefined) {\n\t\tif (field.arrayValue.stringValues !== undefined) {\n\t\t\treturn field.arrayValue.stringValues;\n\t\t}\n\t\tthrow new Error('Unknown array type');\n\t} else {\n\t\tthrow new Error('Unknown type');\n\t}\n}\n\nexport function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined {\n\tif (typings === 'date') {\n\t\treturn TypeHint.DATE;\n\t} else if (typings === 'decimal') {\n\t\treturn TypeHint.DECIMAL;\n\t} else if (typings === 'json') {\n\t\treturn TypeHint.JSON;\n\t} else if (typings === 'time') {\n\t\treturn TypeHint.TIME;\n\t} else if (typings === 'timestamp') {\n\t\treturn TypeHint.TIMESTAMP;\n\t} else if (typings === 'uuid') {\n\t\treturn TypeHint.UUID;\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\nexport function toValueParam(value: any, typings?: QueryTypingsValue): { value: Field; typeHint?: TypeHint } {\n\tconst response: { value: Field; typeHint?: TypeHint } = {\n\t\tvalue: {} as any,\n\t\ttypeHint: typingsToAwsTypeHint(typings),\n\t};\n\n\tif (value === null) {\n\t\tresponse.value = { isNull: true };\n\t} else if (typeof value === 'string') {\n\t\tswitch (response.typeHint) {\n\t\t\tcase TypeHint.DATE: {\n\t\t\t\tresponse.value = { stringValue: value.split('T')[0]! };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TypeHint.TIMESTAMP: {\n\t\t\t\tresponse.value = { stringValue: value.replace('T', ' ').replace('Z', '') };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tresponse.value = { stringValue: value };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else if (typeof value === 'number' && Number.isInteger(value)) {\n\t\tresponse.value = { longValue: value };\n\t} else if (typeof value === 'number' && !Number.isInteger(value)) {\n\t\tresponse.value = { doubleValue: value };\n\t} else if (typeof value === 'boolean') {\n\t\tresponse.value = { booleanValue: value };\n\t} else if (value instanceof Date) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t// TODO: check if this clause is needed? Seems like date value always comes as string\n\t\tresponse.value = { stringValue: value.toISOString().replace('T', ' ').replace('Z', '') };\n\t} else {\n\t\tthrow new Error(`Unknown type for ${value}`);\n\t}\n\n\treturn response;\n}\n"],"mappings":"AACA,SAAS,gBAAgB;AAGlB,SAAS,oBAAoB,OAAc;AACjD,MAAI,MAAM,gBAAgB,QAAW;AACpC,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,iBAAiB,QAAW;AAC5C,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,gBAAgB,QAAW;AAC3C,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,WAAW,QAAW;AACtC,WAAO;AAAA,EACR,WAAW,MAAM,cAAc,QAAW;AACzC,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,cAAc,QAAW;AACzC,WAAO,MAAM;AAAA,EAEd,WAAW,MAAM,eAAe,QAAW;AAC1C,QAAI,MAAM,WAAW,iBAAiB,QAAW;AAChD,aAAO,MAAM,WAAW;AAAA,IACzB;AACA,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACrC,OAAO;AACN,UAAM,IAAI,MAAM,cAAc;AAAA,EAC/B;AACD;AAEO,SAAS,qBAAqB,SAAmD;AACvF,MAAI,YAAY,QAAQ;AACvB,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,WAAW;AACjC,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,aAAa;AACnC,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,SAAS;AAAA,EACjB,OAAO;AACN,WAAO;AAAA,EACR;AACD;AAEO,SAAS,aAAa,OAAY,SAAoE;AAC5G,QAAM,WAAkD;AAAA,IACvD,OAAO,CAAC;AAAA,IACR,UAAU,qBAAqB,OAAO;AAAA,EACvC;AAEA,MAAI,UAAU,MAAM;AACnB,aAAS,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjC,WAAW,OAAO,UAAU,UAAU;AACrC,YAAQ,SAAS,UAAU;AAAA,MAC1B,KAAK,SAAS,MAAM;AACnB,iBAAS,QAAQ,EAAE,aAAa,MAAM,MAAM,GAAG,EAAE,CAAC,EAAG;AACrD;AAAA,MACD;AAAA,MACA,KAAK,SAAS,WAAW;AACxB,iBAAS,QAAQ,EAAE,aAAa,MAAM,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE;AACzE;AAAA,MACD;AAAA,MACA,SAAS;AACR,iBAAS,QAAQ,EAAE,aAAa,MAAM;AACtC;AAAA,MACD;AAAA,IACD;AAAA,EACD,WAAW,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,GAAG;AAChE,aAAS,QAAQ,EAAE,WAAW,MAAM;AAAA,EACrC,WAAW,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG;AACjE,aAAS,QAAQ,EAAE,aAAa,MAAM;AAAA,EACvC,WAAW,OAAO,UAAU,WAAW;AACtC,aAAS,QAAQ,EAAE,cAAc,MAAM;AAAA,EACxC,WAAW,iBAAiB,MAAM;AAEjC,aAAS,QAAQ,EAAE,aAAa,MAAM,YAAY,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE;AAAA,EACxF,OAAO;AACN,UAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO;AACR;","names":[]}
1
+ {"version":3,"sources":["../../../src/aws-data-api/common/index.ts"],"sourcesContent":["import type { Field } from '@aws-sdk/client-rds-data';\nimport { TypeHint } from '@aws-sdk/client-rds-data';\nimport type { QueryTypingsValue } from '~/sql/sql.ts';\n\nexport function getValueFromDataApi(field: Field) {\n\tif (field.stringValue !== undefined) {\n\t\treturn field.stringValue;\n\t} else if (field.booleanValue !== undefined) {\n\t\treturn field.booleanValue;\n\t} else if (field.doubleValue !== undefined) {\n\t\treturn field.doubleValue;\n\t} else if (field.isNull !== undefined) {\n\t\treturn null;\n\t} else if (field.longValue !== undefined) {\n\t\treturn field.longValue;\n\t} else if (field.blobValue !== undefined) {\n\t\treturn field.blobValue;\n\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t} else if (field.arrayValue !== undefined) {\n\t\tif (field.arrayValue.stringValues !== undefined) {\n\t\t\treturn field.arrayValue.stringValues;\n\t\t}\n\t\tif (field.arrayValue.longValues !== undefined) {\n\t\t\treturn field.arrayValue.longValues;\n\t\t}\n\t\tif (field.arrayValue.doubleValues !== undefined) {\n\t\t\treturn field.arrayValue.doubleValues;\n\t\t}\n\t\tif (field.arrayValue.booleanValues !== undefined) {\n\t\t\treturn field.arrayValue.booleanValues;\n\t\t}\n\t\tif (field.arrayValue.arrayValues !== undefined) {\n\t\t\treturn field.arrayValue.arrayValues;\n\t\t}\n\n\t\tthrow new Error('Unknown array type');\n\t} else {\n\t\tthrow new Error('Unknown type');\n\t}\n}\n\nexport function typingsToAwsTypeHint(typings?: QueryTypingsValue): TypeHint | undefined {\n\tif (typings === 'date') {\n\t\treturn TypeHint.DATE;\n\t} else if (typings === 'decimal') {\n\t\treturn TypeHint.DECIMAL;\n\t} else if (typings === 'json') {\n\t\treturn TypeHint.JSON;\n\t} else if (typings === 'time') {\n\t\treturn TypeHint.TIME;\n\t} else if (typings === 'timestamp') {\n\t\treturn TypeHint.TIMESTAMP;\n\t} else if (typings === 'uuid') {\n\t\treturn TypeHint.UUID;\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\nexport function toValueParam(value: any, typings?: QueryTypingsValue): { value: Field; typeHint?: TypeHint } {\n\tconst response: { value: Field; typeHint?: TypeHint } = {\n\t\tvalue: {} as any,\n\t\ttypeHint: typingsToAwsTypeHint(typings),\n\t};\n\n\tif (value === null) {\n\t\tresponse.value = { isNull: true };\n\t} else if (typeof value === 'string') {\n\t\tswitch (response.typeHint) {\n\t\t\tcase TypeHint.DATE: {\n\t\t\t\tresponse.value = { stringValue: value.split('T')[0]! };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TypeHint.TIMESTAMP: {\n\t\t\t\tresponse.value = { stringValue: value.replace('T', ' ').replace('Z', '') };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tresponse.value = { stringValue: value };\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else if (typeof value === 'number' && Number.isInteger(value)) {\n\t\tresponse.value = { longValue: value };\n\t} else if (typeof value === 'number' && !Number.isInteger(value)) {\n\t\tresponse.value = { doubleValue: value };\n\t} else if (typeof value === 'boolean') {\n\t\tresponse.value = { booleanValue: value };\n\t} else if (value instanceof Date) { // eslint-disable-line no-instanceof/no-instanceof\n\t\t// TODO: check if this clause is needed? Seems like date value always comes as string\n\t\tresponse.value = { stringValue: value.toISOString().replace('T', ' ').replace('Z', '') };\n\t} else {\n\t\tthrow new Error(`Unknown type for ${value}`);\n\t}\n\n\treturn response;\n}\n"],"mappings":"AACA,SAAS,gBAAgB;AAGlB,SAAS,oBAAoB,OAAc;AACjD,MAAI,MAAM,gBAAgB,QAAW;AACpC,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,iBAAiB,QAAW;AAC5C,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,gBAAgB,QAAW;AAC3C,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,WAAW,QAAW;AACtC,WAAO;AAAA,EACR,WAAW,MAAM,cAAc,QAAW;AACzC,WAAO,MAAM;AAAA,EACd,WAAW,MAAM,cAAc,QAAW;AACzC,WAAO,MAAM;AAAA,EAEd,WAAW,MAAM,eAAe,QAAW;AAC1C,QAAI,MAAM,WAAW,iBAAiB,QAAW;AAChD,aAAO,MAAM,WAAW;AAAA,IACzB;AACA,QAAI,MAAM,WAAW,eAAe,QAAW;AAC9C,aAAO,MAAM,WAAW;AAAA,IACzB;AACA,QAAI,MAAM,WAAW,iBAAiB,QAAW;AAChD,aAAO,MAAM,WAAW;AAAA,IACzB;AACA,QAAI,MAAM,WAAW,kBAAkB,QAAW;AACjD,aAAO,MAAM,WAAW;AAAA,IACzB;AACA,QAAI,MAAM,WAAW,gBAAgB,QAAW;AAC/C,aAAO,MAAM,WAAW;AAAA,IACzB;AAEA,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACrC,OAAO;AACN,UAAM,IAAI,MAAM,cAAc;AAAA,EAC/B;AACD;AAEO,SAAS,qBAAqB,SAAmD;AACvF,MAAI,YAAY,QAAQ;AACvB,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,WAAW;AACjC,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,aAAa;AACnC,WAAO,SAAS;AAAA,EACjB,WAAW,YAAY,QAAQ;AAC9B,WAAO,SAAS;AAAA,EACjB,OAAO;AACN,WAAO;AAAA,EACR;AACD;AAEO,SAAS,aAAa,OAAY,SAAoE;AAC5G,QAAM,WAAkD;AAAA,IACvD,OAAO,CAAC;AAAA,IACR,UAAU,qBAAqB,OAAO;AAAA,EACvC;AAEA,MAAI,UAAU,MAAM;AACnB,aAAS,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjC,WAAW,OAAO,UAAU,UAAU;AACrC,YAAQ,SAAS,UAAU;AAAA,MAC1B,KAAK,SAAS,MAAM;AACnB,iBAAS,QAAQ,EAAE,aAAa,MAAM,MAAM,GAAG,EAAE,CAAC,EAAG;AACrD;AAAA,MACD;AAAA,MACA,KAAK,SAAS,WAAW;AACxB,iBAAS,QAAQ,EAAE,aAAa,MAAM,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE;AACzE;AAAA,MACD;AAAA,MACA,SAAS;AACR,iBAAS,QAAQ,EAAE,aAAa,MAAM;AACtC;AAAA,MACD;AAAA,IACD;AAAA,EACD,WAAW,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,GAAG;AAChE,aAAS,QAAQ,EAAE,WAAW,MAAM;AAAA,EACrC,WAAW,OAAO,UAAU,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG;AACjE,aAAS,QAAQ,EAAE,aAAa,MAAM;AAAA,EACvC,WAAW,OAAO,UAAU,WAAW;AACtC,aAAS,QAAQ,EAAE,cAAc,MAAM;AAAA,EACxC,WAAW,iBAAiB,MAAM;AAEjC,aAAS,QAAQ,EAAE,aAAa,MAAM,YAAY,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE;AAAA,EACxF,OAAO;AACN,UAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO;AACR;","names":[]}
@@ -18,21 +18,53 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var driver_exports = {};
20
20
  __export(driver_exports, {
21
+ AwsDataApiPgDatabase: () => AwsDataApiPgDatabase,
21
22
  AwsPgDialect: () => AwsPgDialect,
22
23
  drizzle: () => drizzle
23
24
  });
24
25
  module.exports = __toCommonJS(driver_exports);
25
26
  var import_entity = require("../../entity.cjs");
27
+ var import__ = require("../../index.cjs");
26
28
  var import_logger = require("../../logger.cjs");
27
29
  var import_db = require("../../pg-core/db.cjs");
28
30
  var import_dialect = require("../../pg-core/dialect.cjs");
31
+ var import_pg_core = require("../../pg-core/index.cjs");
29
32
  var import_relations = require("../../relations.cjs");
30
33
  var import_session = require("./session.cjs");
34
+ class AwsDataApiPgDatabase extends import_db.PgDatabase {
35
+ static [import_entity.entityKind] = "AwsDataApiPgDatabase";
36
+ execute(query) {
37
+ return super.execute(query);
38
+ }
39
+ }
31
40
  class AwsPgDialect extends import_dialect.PgDialect {
32
41
  static [import_entity.entityKind] = "AwsPgDialect";
33
42
  escapeParam(num) {
34
43
  return `:${num + 1}`;
35
44
  }
45
+ buildInsertQuery({ table, values, onConflict, returning }) {
46
+ const columns = table[import__.Table.Symbol.Columns];
47
+ const colEntries = Object.entries(columns);
48
+ for (const value of values) {
49
+ for (const [fieldName, col] of colEntries) {
50
+ const colValue = value[fieldName];
51
+ if ((0, import_entity.is)(colValue, import__.Param) && colValue.value !== void 0 && (0, import_entity.is)(colValue.encoder, import_pg_core.PgArray) && Array.isArray(colValue.value)) {
52
+ value[fieldName] = import__.sql`cast(${col.mapToDriverValue(colValue.value)} as ${import__.sql.raw(colValue.encoder.getSQLType())})`;
53
+ }
54
+ }
55
+ }
56
+ return super.buildInsertQuery({ table, values, onConflict, returning });
57
+ }
58
+ buildUpdateSet(table, set) {
59
+ const columns = table[import__.Table.Symbol.Columns];
60
+ for (const [colName, colValue] of Object.entries(set)) {
61
+ const currentColumn = columns[colName];
62
+ if (currentColumn && (0, import_entity.is)(colValue, import__.Param) && colValue.value !== void 0 && (0, import_entity.is)(colValue.encoder, import_pg_core.PgArray) && Array.isArray(colValue.value)) {
63
+ set[colName] = import__.sql`cast(${currentColumn?.mapToDriverValue(colValue.value)} as ${import__.sql.raw(colValue.encoder.getSQLType())})`;
64
+ }
65
+ }
66
+ return super.buildUpdateSet(table, set);
67
+ }
36
68
  }
37
69
  function drizzle(client, config) {
38
70
  const dialect = new AwsPgDialect();
@@ -59,6 +91,7 @@ function drizzle(client, config) {
59
91
  }
60
92
  // Annotate the CommonJS export names for ESM import in node:
61
93
  0 && (module.exports = {
94
+ AwsDataApiPgDatabase,
62
95
  AwsPgDialect,
63
96
  drizzle
64
97
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/aws-data-api/pg/driver.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport type { AwsDataApiClient, AwsDataApiPgQueryResultHKT } from './session.ts';\nimport { AwsDataApiSession } from './session.ts';\n\nexport interface PgDriverOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\nexport interface DrizzleAwsDataApiPgConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends DrizzleConfig<TSchema> {\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\nexport type AwsDataApiPgDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> = PgDatabase<AwsDataApiPgQueryResultHKT, TSchema>;\n\nexport class AwsPgDialect extends PgDialect {\n\tstatic readonly [entityKind]: string = 'AwsPgDialect';\n\n\toverride escapeParam(num: number): string {\n\t\treturn `:${num + 1}`;\n\t}\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: AwsDataApiClient,\n\tconfig: DrizzleAwsDataApiPgConfig<TSchema>,\n): AwsDataApiPgDatabase<TSchema> {\n\tconst dialect = new AwsPgDialect();\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\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 session = new AwsDataApiSession(client, dialect, schema, { ...config, logger }, undefined);\n\treturn new PgDatabase(dialect, session, schema) as AwsDataApiPgDatabase<TSchema>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAE3B,oBAA8B;AAC9B,gBAA2B;AAC3B,qBAA0B;AAC1B,uBAKO;AAGP,qBAAkC;AAqB3B,MAAM,qBAAqB,yBAAU;AAAA,EAC3C,QAAiB,wBAAU,IAAY;AAAA,EAE9B,YAAY,KAAqB;AACzC,WAAO,IAAI,MAAM,CAAC;AAAA,EACnB;AACD;AAEO,SAAS,QACf,QACA,QACgC;AAChC,QAAM,UAAU,IAAI,aAAa;AACjC,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,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,UAAU,IAAI,iCAAkB,QAAQ,SAAS,QAAQ,EAAE,GAAG,QAAQ,OAAO,GAAG,MAAS;AAC/F,SAAO,IAAI,qBAAW,SAAS,SAAS,MAAM;AAC/C;","names":[]}
1
+ {"version":3,"sources":["../../../src/aws-data-api/pg/driver.ts"],"sourcesContent":["import { entityKind, is } from '~/entity.ts';\nimport type { SQL, SQLWrapper } from '~/index.ts';\nimport { Param, sql, Table } from '~/index.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgColumn, PgInsertConfig, PgTable, TableConfig } from '~/pg-core/index.ts';\nimport { PgArray } from '~/pg-core/index.ts';\nimport type { PgRaw } from '~/pg-core/query-builders/raw.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { DrizzleConfig, UpdateSet } from '~/utils.ts';\nimport type { AwsDataApiClient, AwsDataApiPgQueryResult, AwsDataApiPgQueryResultHKT } from './session.ts';\nimport { AwsDataApiSession } from './session.ts';\n\nexport interface PgDriverOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\nexport interface DrizzleAwsDataApiPgConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends DrizzleConfig<TSchema> {\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\nexport class AwsDataApiPgDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<AwsDataApiPgQueryResultHKT, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiPgDatabase';\n\n\toverride execute<\n\t\tTRow extends Record<string, unknown> = Record<string, unknown>,\n\t>(query: SQLWrapper): PgRaw<AwsDataApiPgQueryResult<TRow>> {\n\t\treturn super.execute(query);\n\t}\n}\n\nexport class AwsPgDialect extends PgDialect {\n\tstatic readonly [entityKind]: string = 'AwsPgDialect';\n\n\toverride escapeParam(num: number): string {\n\t\treturn `:${num + 1}`;\n\t}\n\n\toverride buildInsertQuery(\n\t\t{ table, values, onConflict, returning }: PgInsertConfig<PgTable<TableConfig>>,\n\t): SQL<unknown> {\n\t\tconst columns: Record<string, PgColumn> = table[Table.Symbol.Columns];\n\t\tconst colEntries: [string, PgColumn][] = Object.entries(columns);\n\t\tfor (const value of values) {\n\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\tif (\n\t\t\t\t\tis(colValue, Param) && colValue.value !== undefined && is(colValue.encoder, PgArray)\n\t\t\t\t\t&& Array.isArray(colValue.value)\n\t\t\t\t) {\n\t\t\t\t\tvalue[fieldName] = sql`cast(${col.mapToDriverValue(colValue.value)} as ${\n\t\t\t\t\t\tsql.raw(colValue.encoder.getSQLType())\n\t\t\t\t\t})`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn super.buildInsertQuery({ table, values, onConflict, returning });\n\t}\n\n\toverride buildUpdateSet(table: PgTable<TableConfig>, set: UpdateSet): SQL<unknown> {\n\t\tconst columns: Record<string, PgColumn> = table[Table.Symbol.Columns];\n\n\t\tfor (const [colName, colValue] of Object.entries(set)) {\n\t\t\tconst currentColumn = columns[colName];\n\t\t\tif (\n\t\t\t\tcurrentColumn && is(colValue, Param) && colValue.value !== undefined && is(colValue.encoder, PgArray)\n\t\t\t\t&& Array.isArray(colValue.value)\n\t\t\t) {\n\t\t\t\tset[colName] = sql`cast(${currentColumn?.mapToDriverValue(colValue.value)} as ${\n\t\t\t\t\tsql.raw(colValue.encoder.getSQLType())\n\t\t\t\t})`;\n\t\t\t}\n\t\t}\n\t\treturn super.buildUpdateSet(table, set);\n\t}\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: AwsDataApiClient,\n\tconfig: DrizzleAwsDataApiPgConfig<TSchema>,\n): AwsDataApiPgDatabase<TSchema> {\n\tconst dialect = new AwsPgDialect();\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\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 session = new AwsDataApiSession(client, dialect, schema, { ...config, logger }, undefined);\n\treturn new PgDatabase(dialect, session, schema) as AwsDataApiPgDatabase<TSchema>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA+B;AAE/B,eAAkC;AAElC,oBAA8B;AAC9B,gBAA2B;AAC3B,qBAA0B;AAE1B,qBAAwB;AAExB,uBAKO;AAGP,qBAAkC;AAiB3B,MAAM,6BAEH,qBAAgD;AAAA,EACzD,QAAiB,wBAAU,IAAY;AAAA,EAE9B,QAEP,OAAyD;AAC1D,WAAO,MAAM,QAAQ,KAAK;AAAA,EAC3B;AACD;AAEO,MAAM,qBAAqB,yBAAU;AAAA,EAC3C,QAAiB,wBAAU,IAAY;AAAA,EAE9B,YAAY,KAAqB;AACzC,WAAO,IAAI,MAAM,CAAC;AAAA,EACnB;AAAA,EAES,iBACR,EAAE,OAAO,QAAQ,YAAY,UAAU,GACxB;AACf,UAAM,UAAoC,MAAM,eAAM,OAAO,OAAO;AACpE,UAAM,aAAmC,OAAO,QAAQ,OAAO;AAC/D,eAAW,SAAS,QAAQ;AAC3B,iBAAW,CAAC,WAAW,GAAG,KAAK,YAAY;AAC1C,cAAM,WAAW,MAAM,SAAS;AAChC,gBACC,kBAAG,UAAU,cAAK,KAAK,SAAS,UAAU,cAAa,kBAAG,SAAS,SAAS,sBAAO,KAChF,MAAM,QAAQ,SAAS,KAAK,GAC9B;AACD,gBAAM,SAAS,IAAI,oBAAW,IAAI,iBAAiB,SAAS,KAAK,CAAC,OACjE,aAAI,IAAI,SAAS,QAAQ,WAAW,CAAC,CACtC;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,iBAAiB,EAAE,OAAO,QAAQ,YAAY,UAAU,CAAC;AAAA,EACvE;AAAA,EAES,eAAe,OAA6B,KAA8B;AAClF,UAAM,UAAoC,MAAM,eAAM,OAAO,OAAO;AAEpE,eAAW,CAAC,SAAS,QAAQ,KAAK,OAAO,QAAQ,GAAG,GAAG;AACtD,YAAM,gBAAgB,QAAQ,OAAO;AACrC,UACC,qBAAiB,kBAAG,UAAU,cAAK,KAAK,SAAS,UAAU,cAAa,kBAAG,SAAS,SAAS,sBAAO,KACjG,MAAM,QAAQ,SAAS,KAAK,GAC9B;AACD,YAAI,OAAO,IAAI,oBAAW,eAAe,iBAAiB,SAAS,KAAK,CAAC,OACxE,aAAI,IAAI,SAAS,QAAQ,WAAW,CAAC,CACtC;AAAA,MACD;AAAA,IACD;AACA,WAAO,MAAM,eAAe,OAAO,GAAG;AAAA,EACvC;AACD;AAEO,SAAS,QACf,QACA,QACgC;AAChC,QAAM,UAAU,IAAI,aAAa;AACjC,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,4BAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,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,UAAU,IAAI,iCAAkB,QAAQ,SAAS,QAAQ,EAAE,GAAG,QAAQ,OAAO,GAAG,MAAS;AAC/F,SAAO,IAAI,qBAAW,SAAS,SAAS,MAAM;AAC/C;","names":[]}
@@ -1,9 +1,12 @@
1
1
  import { entityKind } from "../../entity.cjs";
2
+ import type { SQL, SQLWrapper } from "../../index.cjs";
2
3
  import type { Logger } from "../../logger.cjs";
3
4
  import { PgDatabase } from "../../pg-core/db.cjs";
4
5
  import { PgDialect } from "../../pg-core/dialect.cjs";
5
- import type { DrizzleConfig } from "../../utils.cjs";
6
- import type { AwsDataApiClient, AwsDataApiPgQueryResultHKT } from "./session.cjs";
6
+ import type { PgInsertConfig, PgTable, TableConfig } from "../../pg-core/index.cjs";
7
+ import type { PgRaw } from "../../pg-core/query-builders/raw.cjs";
8
+ import type { DrizzleConfig, UpdateSet } from "../../utils.cjs";
9
+ import type { AwsDataApiClient, AwsDataApiPgQueryResult, AwsDataApiPgQueryResultHKT } from "./session.cjs";
7
10
  export interface PgDriverOptions {
8
11
  logger?: Logger;
9
12
  database: string;
@@ -15,9 +18,14 @@ export interface DrizzleAwsDataApiPgConfig<TSchema extends Record<string, unknow
15
18
  resourceArn: string;
16
19
  secretArn: string;
17
20
  }
18
- export type AwsDataApiPgDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<AwsDataApiPgQueryResultHKT, TSchema>;
21
+ export declare class AwsDataApiPgDatabase<TSchema extends Record<string, unknown> = Record<string, never>> extends PgDatabase<AwsDataApiPgQueryResultHKT, TSchema> {
22
+ static readonly [entityKind]: string;
23
+ execute<TRow extends Record<string, unknown> = Record<string, unknown>>(query: SQLWrapper): PgRaw<AwsDataApiPgQueryResult<TRow>>;
24
+ }
19
25
  export declare class AwsPgDialect extends PgDialect {
20
26
  static readonly [entityKind]: string;
21
27
  escapeParam(num: number): string;
28
+ buildInsertQuery({ table, values, onConflict, returning }: PgInsertConfig<PgTable<TableConfig>>): SQL<unknown>;
29
+ buildUpdateSet(table: PgTable<TableConfig>, set: UpdateSet): SQL<unknown>;
22
30
  }
23
31
  export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(client: AwsDataApiClient, config: DrizzleAwsDataApiPgConfig<TSchema>): AwsDataApiPgDatabase<TSchema>;
@@ -1,9 +1,12 @@
1
1
  import { entityKind } from "../../entity.js";
2
+ import type { SQL, SQLWrapper } from "../../index.js";
2
3
  import type { Logger } from "../../logger.js";
3
4
  import { PgDatabase } from "../../pg-core/db.js";
4
5
  import { PgDialect } from "../../pg-core/dialect.js";
5
- import type { DrizzleConfig } from "../../utils.js";
6
- import type { AwsDataApiClient, AwsDataApiPgQueryResultHKT } from "./session.js";
6
+ import type { PgInsertConfig, PgTable, TableConfig } from "../../pg-core/index.js";
7
+ import type { PgRaw } from "../../pg-core/query-builders/raw.js";
8
+ import type { DrizzleConfig, UpdateSet } from "../../utils.js";
9
+ import type { AwsDataApiClient, AwsDataApiPgQueryResult, AwsDataApiPgQueryResultHKT } from "./session.js";
7
10
  export interface PgDriverOptions {
8
11
  logger?: Logger;
9
12
  database: string;
@@ -15,9 +18,14 @@ export interface DrizzleAwsDataApiPgConfig<TSchema extends Record<string, unknow
15
18
  resourceArn: string;
16
19
  secretArn: string;
17
20
  }
18
- export type AwsDataApiPgDatabase<TSchema extends Record<string, unknown> = Record<string, never>> = PgDatabase<AwsDataApiPgQueryResultHKT, TSchema>;
21
+ export declare class AwsDataApiPgDatabase<TSchema extends Record<string, unknown> = Record<string, never>> extends PgDatabase<AwsDataApiPgQueryResultHKT, TSchema> {
22
+ static readonly [entityKind]: string;
23
+ execute<TRow extends Record<string, unknown> = Record<string, unknown>>(query: SQLWrapper): PgRaw<AwsDataApiPgQueryResult<TRow>>;
24
+ }
19
25
  export declare class AwsPgDialect extends PgDialect {
20
26
  static readonly [entityKind]: string;
21
27
  escapeParam(num: number): string;
28
+ buildInsertQuery({ table, values, onConflict, returning }: PgInsertConfig<PgTable<TableConfig>>): SQL<unknown>;
29
+ buildUpdateSet(table: PgTable<TableConfig>, set: UpdateSet): SQL<unknown>;
22
30
  }
23
31
  export declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(client: AwsDataApiClient, config: DrizzleAwsDataApiPgConfig<TSchema>): AwsDataApiPgDatabase<TSchema>;
@@ -1,17 +1,48 @@
1
- import { entityKind } from "../../entity.js";
1
+ import { entityKind, is } from "../../entity.js";
2
+ import { Param, sql, Table } from "../../index.js";
2
3
  import { DefaultLogger } from "../../logger.js";
3
4
  import { PgDatabase } from "../../pg-core/db.js";
4
5
  import { PgDialect } from "../../pg-core/dialect.js";
6
+ import { PgArray } from "../../pg-core/index.js";
5
7
  import {
6
8
  createTableRelationsHelpers,
7
9
  extractTablesRelationalConfig
8
10
  } from "../../relations.js";
9
11
  import { AwsDataApiSession } from "./session.js";
12
+ class AwsDataApiPgDatabase extends PgDatabase {
13
+ static [entityKind] = "AwsDataApiPgDatabase";
14
+ execute(query) {
15
+ return super.execute(query);
16
+ }
17
+ }
10
18
  class AwsPgDialect extends PgDialect {
11
19
  static [entityKind] = "AwsPgDialect";
12
20
  escapeParam(num) {
13
21
  return `:${num + 1}`;
14
22
  }
23
+ buildInsertQuery({ table, values, onConflict, returning }) {
24
+ const columns = table[Table.Symbol.Columns];
25
+ const colEntries = Object.entries(columns);
26
+ for (const value of values) {
27
+ for (const [fieldName, col] of colEntries) {
28
+ const colValue = value[fieldName];
29
+ if (is(colValue, Param) && colValue.value !== void 0 && is(colValue.encoder, PgArray) && Array.isArray(colValue.value)) {
30
+ value[fieldName] = sql`cast(${col.mapToDriverValue(colValue.value)} as ${sql.raw(colValue.encoder.getSQLType())})`;
31
+ }
32
+ }
33
+ }
34
+ return super.buildInsertQuery({ table, values, onConflict, returning });
35
+ }
36
+ buildUpdateSet(table, set) {
37
+ const columns = table[Table.Symbol.Columns];
38
+ for (const [colName, colValue] of Object.entries(set)) {
39
+ const currentColumn = columns[colName];
40
+ if (currentColumn && is(colValue, Param) && colValue.value !== void 0 && is(colValue.encoder, PgArray) && Array.isArray(colValue.value)) {
41
+ set[colName] = sql`cast(${currentColumn?.mapToDriverValue(colValue.value)} as ${sql.raw(colValue.encoder.getSQLType())})`;
42
+ }
43
+ }
44
+ return super.buildUpdateSet(table, set);
45
+ }
15
46
  }
16
47
  function drizzle(client, config) {
17
48
  const dialect = new AwsPgDialect();
@@ -37,6 +68,7 @@ function drizzle(client, config) {
37
68
  return new PgDatabase(dialect, session, schema);
38
69
  }
39
70
  export {
71
+ AwsDataApiPgDatabase,
40
72
  AwsPgDialect,
41
73
  drizzle
42
74
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/aws-data-api/pg/driver.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { DrizzleConfig } from '~/utils.ts';\nimport type { AwsDataApiClient, AwsDataApiPgQueryResultHKT } from './session.ts';\nimport { AwsDataApiSession } from './session.ts';\n\nexport interface PgDriverOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\nexport interface DrizzleAwsDataApiPgConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends DrizzleConfig<TSchema> {\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\nexport type AwsDataApiPgDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> = PgDatabase<AwsDataApiPgQueryResultHKT, TSchema>;\n\nexport class AwsPgDialect extends PgDialect {\n\tstatic readonly [entityKind]: string = 'AwsPgDialect';\n\n\toverride escapeParam(num: number): string {\n\t\treturn `:${num + 1}`;\n\t}\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: AwsDataApiClient,\n\tconfig: DrizzleAwsDataApiPgConfig<TSchema>,\n): AwsDataApiPgDatabase<TSchema> {\n\tconst dialect = new AwsPgDialect();\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\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 session = new AwsDataApiSession(client, dialect, schema, { ...config, logger }, undefined);\n\treturn new PgDatabase(dialect, session, schema) as AwsDataApiPgDatabase<TSchema>;\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAE3B,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B;AAAA,EACC;AAAA,EACA;AAAA,OAGM;AAGP,SAAS,yBAAyB;AAqB3B,MAAM,qBAAqB,UAAU;AAAA,EAC3C,QAAiB,UAAU,IAAY;AAAA,EAE9B,YAAY,KAAqB;AACzC,WAAO,IAAI,MAAM,CAAC;AAAA,EACnB;AACD;AAEO,SAAS,QACf,QACA,QACgC;AAChC,QAAM,UAAU,IAAI,aAAa;AACjC,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,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,UAAU,IAAI,kBAAkB,QAAQ,SAAS,QAAQ,EAAE,GAAG,QAAQ,OAAO,GAAG,MAAS;AAC/F,SAAO,IAAI,WAAW,SAAS,SAAS,MAAM;AAC/C;","names":[]}
1
+ {"version":3,"sources":["../../../src/aws-data-api/pg/driver.ts"],"sourcesContent":["import { entityKind, is } from '~/entity.ts';\nimport type { SQL, SQLWrapper } from '~/index.ts';\nimport { Param, sql, Table } from '~/index.ts';\nimport type { Logger } from '~/logger.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport { PgDatabase } from '~/pg-core/db.ts';\nimport { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgColumn, PgInsertConfig, PgTable, TableConfig } from '~/pg-core/index.ts';\nimport { PgArray } from '~/pg-core/index.ts';\nimport type { PgRaw } from '~/pg-core/query-builders/raw.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { DrizzleConfig, UpdateSet } from '~/utils.ts';\nimport type { AwsDataApiClient, AwsDataApiPgQueryResult, AwsDataApiPgQueryResultHKT } from './session.ts';\nimport { AwsDataApiSession } from './session.ts';\n\nexport interface PgDriverOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\nexport interface DrizzleAwsDataApiPgConfig<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends DrizzleConfig<TSchema> {\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\nexport class AwsDataApiPgDatabase<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends PgDatabase<AwsDataApiPgQueryResultHKT, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiPgDatabase';\n\n\toverride execute<\n\t\tTRow extends Record<string, unknown> = Record<string, unknown>,\n\t>(query: SQLWrapper): PgRaw<AwsDataApiPgQueryResult<TRow>> {\n\t\treturn super.execute(query);\n\t}\n}\n\nexport class AwsPgDialect extends PgDialect {\n\tstatic readonly [entityKind]: string = 'AwsPgDialect';\n\n\toverride escapeParam(num: number): string {\n\t\treturn `:${num + 1}`;\n\t}\n\n\toverride buildInsertQuery(\n\t\t{ table, values, onConflict, returning }: PgInsertConfig<PgTable<TableConfig>>,\n\t): SQL<unknown> {\n\t\tconst columns: Record<string, PgColumn> = table[Table.Symbol.Columns];\n\t\tconst colEntries: [string, PgColumn][] = Object.entries(columns);\n\t\tfor (const value of values) {\n\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\tif (\n\t\t\t\t\tis(colValue, Param) && colValue.value !== undefined && is(colValue.encoder, PgArray)\n\t\t\t\t\t&& Array.isArray(colValue.value)\n\t\t\t\t) {\n\t\t\t\t\tvalue[fieldName] = sql`cast(${col.mapToDriverValue(colValue.value)} as ${\n\t\t\t\t\t\tsql.raw(colValue.encoder.getSQLType())\n\t\t\t\t\t})`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn super.buildInsertQuery({ table, values, onConflict, returning });\n\t}\n\n\toverride buildUpdateSet(table: PgTable<TableConfig>, set: UpdateSet): SQL<unknown> {\n\t\tconst columns: Record<string, PgColumn> = table[Table.Symbol.Columns];\n\n\t\tfor (const [colName, colValue] of Object.entries(set)) {\n\t\t\tconst currentColumn = columns[colName];\n\t\t\tif (\n\t\t\t\tcurrentColumn && is(colValue, Param) && colValue.value !== undefined && is(colValue.encoder, PgArray)\n\t\t\t\t&& Array.isArray(colValue.value)\n\t\t\t) {\n\t\t\t\tset[colName] = sql`cast(${currentColumn?.mapToDriverValue(colValue.value)} as ${\n\t\t\t\t\tsql.raw(colValue.encoder.getSQLType())\n\t\t\t\t})`;\n\t\t\t}\n\t\t}\n\t\treturn super.buildUpdateSet(table, set);\n\t}\n}\n\nexport function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>(\n\tclient: AwsDataApiClient,\n\tconfig: DrizzleAwsDataApiPgConfig<TSchema>,\n): AwsDataApiPgDatabase<TSchema> {\n\tconst dialect = new AwsPgDialect();\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\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 session = new AwsDataApiSession(client, dialect, schema, { ...config, logger }, undefined);\n\treturn new PgDatabase(dialect, session, schema) as AwsDataApiPgDatabase<TSchema>;\n}\n"],"mappings":"AAAA,SAAS,YAAY,UAAU;AAE/B,SAAS,OAAO,KAAK,aAAa;AAElC,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAE1B,SAAS,eAAe;AAExB;AAAA,EACC;AAAA,EACA;AAAA,OAGM;AAGP,SAAS,yBAAyB;AAiB3B,MAAM,6BAEH,WAAgD;AAAA,EACzD,QAAiB,UAAU,IAAY;AAAA,EAE9B,QAEP,OAAyD;AAC1D,WAAO,MAAM,QAAQ,KAAK;AAAA,EAC3B;AACD;AAEO,MAAM,qBAAqB,UAAU;AAAA,EAC3C,QAAiB,UAAU,IAAY;AAAA,EAE9B,YAAY,KAAqB;AACzC,WAAO,IAAI,MAAM,CAAC;AAAA,EACnB;AAAA,EAES,iBACR,EAAE,OAAO,QAAQ,YAAY,UAAU,GACxB;AACf,UAAM,UAAoC,MAAM,MAAM,OAAO,OAAO;AACpE,UAAM,aAAmC,OAAO,QAAQ,OAAO;AAC/D,eAAW,SAAS,QAAQ;AAC3B,iBAAW,CAAC,WAAW,GAAG,KAAK,YAAY;AAC1C,cAAM,WAAW,MAAM,SAAS;AAChC,YACC,GAAG,UAAU,KAAK,KAAK,SAAS,UAAU,UAAa,GAAG,SAAS,SAAS,OAAO,KAChF,MAAM,QAAQ,SAAS,KAAK,GAC9B;AACD,gBAAM,SAAS,IAAI,WAAW,IAAI,iBAAiB,SAAS,KAAK,CAAC,OACjE,IAAI,IAAI,SAAS,QAAQ,WAAW,CAAC,CACtC;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,MAAM,iBAAiB,EAAE,OAAO,QAAQ,YAAY,UAAU,CAAC;AAAA,EACvE;AAAA,EAES,eAAe,OAA6B,KAA8B;AAClF,UAAM,UAAoC,MAAM,MAAM,OAAO,OAAO;AAEpE,eAAW,CAAC,SAAS,QAAQ,KAAK,OAAO,QAAQ,GAAG,GAAG;AACtD,YAAM,gBAAgB,QAAQ,OAAO;AACrC,UACC,iBAAiB,GAAG,UAAU,KAAK,KAAK,SAAS,UAAU,UAAa,GAAG,SAAS,SAAS,OAAO,KACjG,MAAM,QAAQ,SAAS,KAAK,GAC9B;AACD,YAAI,OAAO,IAAI,WAAW,eAAe,iBAAiB,SAAS,KAAK,CAAC,OACxE,IAAI,IAAI,SAAS,QAAQ,WAAW,CAAC,CACtC;AAAA,MACD;AAAA,IACD;AACA,WAAO,MAAM,eAAe,OAAO,GAAG;AAAA,EACvC;AACD;AAEO,SAAS,QACf,QACA,QACgC;AAChC,QAAM,UAAU,IAAI,aAAa;AACjC,MAAI;AACJ,MAAI,OAAO,WAAW,MAAM;AAC3B,aAAS,IAAI,cAAc;AAAA,EAC5B,WAAW,OAAO,WAAW,OAAO;AACnC,aAAS,OAAO;AAAA,EACjB;AAEA,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,UAAU,IAAI,kBAAkB,QAAQ,SAAS,QAAQ,EAAE,GAAG,QAAQ,OAAO,GAAG,MAAS;AAC/F,SAAO,IAAI,WAAW,SAAS,SAAS,MAAM;AAC/C;","names":[]}
@@ -54,11 +54,11 @@ class AwsDataApiPreparedQuery extends import_pg_core.PgPreparedQuery {
54
54
  rawQuery;
55
55
  async execute(placeholderValues = {}) {
56
56
  const { fields, joinsNotNullableMap, customResultMapper } = this;
57
- const rows = await this.values(placeholderValues);
57
+ const result = await this.values(placeholderValues);
58
58
  if (!fields && !customResultMapper) {
59
- return rows;
59
+ return result;
60
60
  }
61
- return customResultMapper ? customResultMapper(rows) : rows.map((row) => (0, import_utils.mapResultRow)(fields, row, joinsNotNullableMap));
61
+ return customResultMapper ? customResultMapper(result.rows) : result.rows.map((row) => (0, import_utils.mapResultRow)(fields, row, joinsNotNullableMap));
62
62
  }
63
63
  all(placeholderValues) {
64
64
  return this.execute(placeholderValues);
@@ -74,14 +74,22 @@ class AwsDataApiPreparedQuery extends import_pg_core.PgPreparedQuery {
74
74
  if (!fields && !customResultMapper) {
75
75
  const result2 = await client.send(rawQuery);
76
76
  if (result2.columnMetadata && result2.columnMetadata.length > 0) {
77
- return this.mapResultRows(result2.records ?? [], result2.columnMetadata);
77
+ const rows2 = this.mapResultRows(result2.records ?? [], result2.columnMetadata);
78
+ return {
79
+ ...result2,
80
+ rows: rows2
81
+ };
78
82
  }
79
- return result2.records ?? [];
83
+ return result2;
80
84
  }
81
85
  const result = await client.send(rawQuery);
82
- return result.records?.map((row) => {
86
+ const rows = result.records?.map((row) => {
83
87
  return row.map((field) => (0, import_common.getValueFromDataApi)(field));
84
- });
88
+ }) ?? [];
89
+ return {
90
+ ...result,
91
+ rows
92
+ };
85
93
  }
86
94
  /** @internal */
87
95
  mapResultRows(records, columnMetadata) {
@@ -115,7 +123,7 @@ class AwsDataApiSession extends import_pg_core.PgSession {
115
123
  static [import_entity.entityKind] = "AwsDataApiSession";
116
124
  /** @internal */
117
125
  rawQuery;
118
- prepareQuery(query, fields, transactionId, isResponseInArrayMode, customResultMapper) {
126
+ prepareQuery(query, fields, name, isResponseInArrayMode, customResultMapper, transactionId) {
119
127
  return new AwsDataApiPreparedQuery(
120
128
  this.client,
121
129
  query.sql,
@@ -123,7 +131,7 @@ class AwsDataApiSession extends import_pg_core.PgSession {
123
131
  query.typings ?? [],
124
132
  this.options,
125
133
  fields,
126
- transactionId,
134
+ transactionId ?? this.transactionId,
127
135
  isResponseInArrayMode,
128
136
  customResultMapper
129
137
  );
@@ -132,8 +140,10 @@ class AwsDataApiSession extends import_pg_core.PgSession {
132
140
  return this.prepareQuery(
133
141
  this.dialect.sqlToQuery(query),
134
142
  void 0,
135
- this.transactionId,
136
- false
143
+ void 0,
144
+ false,
145
+ void 0,
146
+ this.transactionId
137
147
  ).execute();
138
148
  }
139
149
  async transaction(transaction, config) {
@@ -155,16 +165,16 @@ class AwsDataApiSession extends import_pg_core.PgSession {
155
165
  }
156
166
  class AwsDataApiTransaction extends import_pg_core.PgTransaction {
157
167
  static [import_entity.entityKind] = "AwsDataApiTransaction";
158
- transaction(transaction) {
168
+ async transaction(transaction) {
159
169
  const savepointName = `sp${this.nestedIndex + 1}`;
160
170
  const tx = new AwsDataApiTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);
161
- this.session.execute(import_sql.sql`savepoint ${savepointName}`);
171
+ await this.session.execute(import_sql.sql.raw(`savepoint ${savepointName}`));
162
172
  try {
163
- const result = transaction(tx);
164
- this.session.execute(import_sql.sql`release savepoint ${savepointName}`);
173
+ const result = await transaction(tx);
174
+ await this.session.execute(import_sql.sql.raw(`release savepoint ${savepointName}`));
165
175
  return result;
166
176
  } catch (e) {
167
- this.session.execute(import_sql.sql`rollback to savepoint ${savepointName}`);
177
+ await this.session.execute(import_sql.sql.raw(`rollback to savepoint ${savepointName}`));
168
178
  throw e;
169
179
  }
170
180
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/aws-data-api/pg/session.ts"],"sourcesContent":["import type { ColumnMetadata, ExecuteStatementCommandOutput, Field, RDSDataClient } from '@aws-sdk/client-rds-data';\nimport {\n\tBeginTransactionCommand,\n\tCommitTransactionCommand,\n\tExecuteStatementCommand,\n\tRollbackTransactionCommand,\n} from '@aws-sdk/client-rds-data';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport {\n\ttype PgDialect,\n\tPgPreparedQuery,\n\tPgSession,\n\tPgTransaction,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n\ttype QueryResultHKT,\n} from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type QueryTypingsValue, type QueryWithTypings, type SQL, sql } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\nimport { getValueFromDataApi, toValueParam } from '../common/index.ts';\n\nexport type AwsDataApiClient = RDSDataClient;\n\nexport class AwsDataApiPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiPreparedQuery';\n\n\tprivate rawQuery: ExecuteStatementCommand;\n\n\tconstructor(\n\t\tprivate client: AwsDataApiClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate typings: QueryTypingsValue[],\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQuery = new ExecuteStatementCommand({\n\t\t\tsql: queryString,\n\t\t\tparameters: [],\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t\ttransactionId,\n\t\t\tincludeResultMetadata: !fields && !customResultMapper,\n\t\t});\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\n\t\tconst rows = await this.values(placeholderValues) as unknown[][];\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn rows as T['execute'];\n\t\t}\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(rows)\n\t\t\t: rows.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']> {\n\t\treturn this.execute(placeholderValues);\n\t}\n\n\tasync values(placeholderValues: Record<string, unknown> = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues ?? {});\n\n\t\tthis.rawQuery.input.parameters = params.map((param, index) => ({\n\t\t\tname: `${index + 1}`,\n\t\t\t...toValueParam(param, this.typings[index]),\n\t\t}));\n\n\t\tthis.options.logger?.logQuery(this.rawQuery.input.sql!, this.rawQuery.input.parameters);\n\n\t\tconst { fields, rawQuery, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = await client.send(rawQuery);\n\t\t\tif (result.columnMetadata && result.columnMetadata.length > 0) {\n\t\t\t\treturn this.mapResultRows(result.records ?? [], result.columnMetadata);\n\t\t\t}\n\t\t\treturn result.records ?? [];\n\t\t}\n\n\t\tconst result = await client.send(rawQuery);\n\n\t\treturn result.records?.map((row: any) => {\n\t\t\treturn row.map((field: Field) => getValueFromDataApi(field));\n\t\t});\n\t}\n\n\t/** @internal */\n\tmapResultRows(records: Field[][], columnMetadata: ColumnMetadata[]) {\n\t\treturn records.map((record) => {\n\t\t\tconst row: Record<string, unknown> = {};\n\t\t\tfor (const [index, field] of record.entries()) {\n\t\t\t\tconst { name } = columnMetadata[index]!;\n\t\t\t\trow[name ?? index] = getValueFromDataApi(field); // not what to default if name is undefined\n\t\t\t}\n\t\t\treturn row;\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface AwsDataApiSessionOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\ninterface AwsDataApiQueryBase {\n\tresourceArn: string;\n\tsecretArn: string;\n\tdatabase: string;\n}\n\nexport class AwsDataApiSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiSession';\n\n\t/** @internal */\n\treadonly rawQuery: AwsDataApiQueryBase;\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly client: AwsDataApiClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.rawQuery = {\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t};\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: QueryWithTypings,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\ttransactionId: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t): PgPreparedQuery<T> {\n\t\treturn new AwsDataApiPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tquery.typings ?? [],\n\t\t\tthis.options,\n\t\t\tfields,\n\t\t\ttransactionId,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Promise<T> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tthis.transactionId,\n\t\t\tfalse,\n\t\t).execute();\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\tconst { transactionId } = await this.client.send(new BeginTransactionCommand(this.rawQuery));\n\t\tconst session = new AwsDataApiSession(this.client, this.dialect, this.schema, this.options, transactionId);\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, session, this.schema);\n\t\tif (config) {\n\t\t\tawait tx.setTransaction(config);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.client.send(new CommitTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait this.client.send(new RollbackTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class AwsDataApiTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiTransaction';\n\n\toverride transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tthis.session.execute(sql`savepoint ${savepointName}`);\n\t\ttry {\n\t\t\tconst result = transaction(tx);\n\t\t\tthis.session.execute(sql`release savepoint ${savepointName}`);\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tthis.session.execute(sql`rollback to savepoint ${savepointName}`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport interface AwsDataApiPgQueryResultHKT extends QueryResultHKT {\n\ttype: ExecuteStatementCommandOutput;\n}\n"],"mappings":"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","names":["result"]}
1
+ {"version":3,"sources":["../../../src/aws-data-api/pg/session.ts"],"sourcesContent":["import type { ColumnMetadata, ExecuteStatementCommandOutput, Field, RDSDataClient } from '@aws-sdk/client-rds-data';\nimport {\n\tBeginTransactionCommand,\n\tCommitTransactionCommand,\n\tExecuteStatementCommand,\n\tRollbackTransactionCommand,\n} from '@aws-sdk/client-rds-data';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport {\n\ttype PgDialect,\n\tPgPreparedQuery,\n\tPgSession,\n\tPgTransaction,\n\ttype PgTransactionConfig,\n\ttype PreparedQueryConfig,\n\ttype QueryResultHKT,\n} from '~/pg-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/pg-core/query-builders/select.types.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { fillPlaceholders, type QueryTypingsValue, type QueryWithTypings, type SQL, sql } from '~/sql/sql.ts';\nimport { mapResultRow } from '~/utils.ts';\nimport { getValueFromDataApi, toValueParam } from '../common/index.ts';\n\nexport type AwsDataApiClient = RDSDataClient;\n\nexport class AwsDataApiPreparedQuery<T extends PreparedQueryConfig> extends PgPreparedQuery<T> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiPreparedQuery';\n\n\tprivate rawQuery: ExecuteStatementCommand;\n\n\tconstructor(\n\t\tprivate client: AwsDataApiClient,\n\t\tqueryString: string,\n\t\tprivate params: unknown[],\n\t\tprivate typings: QueryTypingsValue[],\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\tprivate fields: SelectedFieldsOrdered | undefined,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tprivate customResultMapper?: (rows: unknown[][]) => T['execute'],\n\t) {\n\t\tsuper({ sql: queryString, params });\n\t\tthis.rawQuery = new ExecuteStatementCommand({\n\t\t\tsql: queryString,\n\t\t\tparameters: [],\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t\ttransactionId,\n\t\t\tincludeResultMetadata: !fields && !customResultMapper,\n\t\t});\n\t}\n\n\tasync execute(placeholderValues: Record<string, unknown> | undefined = {}): Promise<T['execute']> {\n\t\tconst { fields, joinsNotNullableMap, customResultMapper } = this;\n\n\t\tconst result = await this.values(placeholderValues) as AwsDataApiPgQueryResult<unknown[]>;\n\t\tif (!fields && !customResultMapper) {\n\t\t\treturn result as T['execute'];\n\t\t}\n\t\treturn customResultMapper\n\t\t\t? customResultMapper(result.rows!)\n\t\t\t: result.rows!.map((row) => mapResultRow<T['execute']>(fields!, row, joinsNotNullableMap));\n\t}\n\n\tall(placeholderValues?: Record<string, unknown> | undefined): Promise<T['all']> {\n\t\treturn this.execute(placeholderValues);\n\t}\n\n\tasync values(placeholderValues: Record<string, unknown> = {}): Promise<T['values']> {\n\t\tconst params = fillPlaceholders(this.params, placeholderValues ?? {});\n\n\t\tthis.rawQuery.input.parameters = params.map((param, index) => ({\n\t\t\tname: `${index + 1}`,\n\t\t\t...toValueParam(param, this.typings[index]),\n\t\t}));\n\n\t\tthis.options.logger?.logQuery(this.rawQuery.input.sql!, this.rawQuery.input.parameters);\n\n\t\tconst { fields, rawQuery, client, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst result = await client.send(rawQuery);\n\t\t\tif (result.columnMetadata && result.columnMetadata.length > 0) {\n\t\t\t\tconst rows = this.mapResultRows(result.records ?? [], result.columnMetadata);\n\t\t\t\treturn {\n\t\t\t\t\t...result,\n\t\t\t\t\trows,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tconst result = await client.send(rawQuery);\n\t\tconst rows = result.records?.map((row) => {\n\t\t\treturn row.map((field) => getValueFromDataApi(field));\n\t\t}) ?? [];\n\n\t\treturn {\n\t\t\t...result,\n\t\t\trows,\n\t\t};\n\t}\n\n\t/** @internal */\n\tmapResultRows(records: Field[][], columnMetadata: ColumnMetadata[]) {\n\t\treturn records.map((record) => {\n\t\t\tconst row: Record<string, unknown> = {};\n\t\t\tfor (const [index, field] of record.entries()) {\n\t\t\t\tconst { name } = columnMetadata[index]!;\n\t\t\t\trow[name ?? index] = getValueFromDataApi(field); // not what to default if name is undefined\n\t\t\t}\n\t\t\treturn row;\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n\nexport interface AwsDataApiSessionOptions {\n\tlogger?: Logger;\n\tdatabase: string;\n\tresourceArn: string;\n\tsecretArn: string;\n}\n\ninterface AwsDataApiQueryBase {\n\tresourceArn: string;\n\tsecretArn: string;\n\tdatabase: string;\n}\n\nexport class AwsDataApiSession<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgSession<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiSession';\n\n\t/** @internal */\n\treadonly rawQuery: AwsDataApiQueryBase;\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly client: AwsDataApiClient,\n\t\tdialect: PgDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: AwsDataApiSessionOptions,\n\t\t/** @internal */\n\t\treadonly transactionId: string | undefined,\n\t) {\n\t\tsuper(dialect);\n\t\tthis.rawQuery = {\n\t\t\tsecretArn: options.secretArn,\n\t\t\tresourceArn: options.resourceArn,\n\t\t\tdatabase: options.database,\n\t\t};\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(\n\t\tquery: QueryWithTypings,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\tname: string | undefined,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => T['execute'],\n\t\ttransactionId?: string,\n\t): PgPreparedQuery<T> {\n\t\treturn new AwsDataApiPreparedQuery(\n\t\t\tthis.client,\n\t\t\tquery.sql,\n\t\t\tquery.params,\n\t\t\tquery.typings ?? [],\n\t\t\tthis.options,\n\t\t\tfields,\n\t\t\ttransactionId ?? this.transactionId,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\toverride execute<T>(query: SQL): Promise<T> {\n\t\treturn this.prepareQuery<PreparedQueryConfig & { execute: T }>(\n\t\t\tthis.dialect.sqlToQuery(query),\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t\tundefined,\n\t\t\tthis.transactionId,\n\t\t).execute();\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t\tconfig?: PgTransactionConfig | undefined,\n\t): Promise<T> {\n\t\tconst { transactionId } = await this.client.send(new BeginTransactionCommand(this.rawQuery));\n\t\tconst session = new AwsDataApiSession(this.client, this.dialect, this.schema, this.options, transactionId);\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, session, this.schema);\n\t\tif (config) {\n\t\t\tawait tx.setTransaction(config);\n\t\t}\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.client.send(new CommitTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait this.client.send(new RollbackTransactionCommand({ ...this.rawQuery, transactionId }));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class AwsDataApiTransaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends PgTransaction<AwsDataApiPgQueryResultHKT, TFullSchema, TSchema> {\n\tstatic readonly [entityKind]: string = 'AwsDataApiTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new AwsDataApiTransaction(this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.execute(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.execute(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tawait this.session.execute(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport type AwsDataApiPgQueryResult<T> = ExecuteStatementCommandOutput & { rows: T[] };\n\nexport interface AwsDataApiPgQueryResultHKT extends QueryResultHKT {\n\ttype: AwsDataApiPgQueryResult<any>;\n}\n"],"mappings":"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","names":["result","rows"]}
@@ -38,7 +38,7 @@ export declare class AwsDataApiSession<TFullSchema extends Record<string, unknow
38
38
  client: AwsDataApiClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options: AwsDataApiSessionOptions,
39
39
  /** @internal */
40
40
  transactionId: string | undefined);
41
- prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: QueryWithTypings, fields: SelectedFieldsOrdered | undefined, transactionId: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
41
+ prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: QueryWithTypings, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute'], transactionId?: string): PgPreparedQuery<T>;
42
42
  execute<T>(query: SQL): Promise<T>;
43
43
  transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig | undefined): Promise<T>;
44
44
  }
@@ -46,6 +46,9 @@ export declare class AwsDataApiTransaction<TFullSchema extends Record<string, un
46
46
  static readonly [entityKind]: string;
47
47
  transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
48
48
  }
49
+ export type AwsDataApiPgQueryResult<T> = ExecuteStatementCommandOutput & {
50
+ rows: T[];
51
+ };
49
52
  export interface AwsDataApiPgQueryResultHKT extends QueryResultHKT {
50
- type: ExecuteStatementCommandOutput;
53
+ type: AwsDataApiPgQueryResult<any>;
51
54
  }
@@ -38,7 +38,7 @@ export declare class AwsDataApiSession<TFullSchema extends Record<string, unknow
38
38
  client: AwsDataApiClient, dialect: PgDialect, schema: RelationalSchemaConfig<TSchema> | undefined, options: AwsDataApiSessionOptions,
39
39
  /** @internal */
40
40
  transactionId: string | undefined);
41
- prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: QueryWithTypings, fields: SelectedFieldsOrdered | undefined, transactionId: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute']): PgPreparedQuery<T>;
41
+ prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: QueryWithTypings, fields: SelectedFieldsOrdered | undefined, name: string | undefined, isResponseInArrayMode: boolean, customResultMapper?: (rows: unknown[][]) => T['execute'], transactionId?: string): PgPreparedQuery<T>;
42
42
  execute<T>(query: SQL): Promise<T>;
43
43
  transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>, config?: PgTransactionConfig | undefined): Promise<T>;
44
44
  }
@@ -46,6 +46,9 @@ export declare class AwsDataApiTransaction<TFullSchema extends Record<string, un
46
46
  static readonly [entityKind]: string;
47
47
  transaction<T>(transaction: (tx: AwsDataApiTransaction<TFullSchema, TSchema>) => Promise<T>): Promise<T>;
48
48
  }
49
+ export type AwsDataApiPgQueryResult<T> = ExecuteStatementCommandOutput & {
50
+ rows: T[];
51
+ };
49
52
  export interface AwsDataApiPgQueryResultHKT extends QueryResultHKT {
50
- type: ExecuteStatementCommandOutput;
53
+ type: AwsDataApiPgQueryResult<any>;
51
54
  }