driver.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { createPool } from "mysql2";
  2. import { entityKind } from "../entity.js";
  3. import { DefaultLogger } from "../logger.js";
  4. import {
  5. createTableRelationsHelpers,
  6. extractTablesRelationalConfig
  7. } from "../relations.js";
  8. import { SingleStoreDatabase } from "../singlestore-core/db.js";
  9. import { SingleStoreDialect } from "../singlestore-core/dialect.js";
  10. import { isConfig } from "../utils.js";
  11. import { npmVersion } from "../version.js";
  12. import { SingleStoreDriverSession } from "./session.js";
  13. class SingleStoreDriverDriver {
  14. constructor(client, dialect, options = {}) {
  15. this.client = client;
  16. this.dialect = dialect;
  17. this.options = options;
  18. }
  19. static [entityKind] = "SingleStoreDriverDriver";
  20. createSession(schema) {
  21. return new SingleStoreDriverSession(this.client, this.dialect, schema, {
  22. logger: this.options.logger,
  23. cache: this.options.cache
  24. });
  25. }
  26. }
  27. import { SingleStoreDatabase as SingleStoreDatabase2 } from "../singlestore-core/db.js";
  28. class SingleStoreDriverDatabase extends SingleStoreDatabase {
  29. static [entityKind] = "SingleStoreDriverDatabase";
  30. }
  31. function construct(client, config = {}) {
  32. const dialect = new SingleStoreDialect({ casing: config.casing });
  33. let logger;
  34. if (config.logger === true) {
  35. logger = new DefaultLogger();
  36. } else if (config.logger !== false) {
  37. logger = config.logger;
  38. }
  39. const clientForInstance = isCallbackClient(client) ? client.promise() : client;
  40. let schema;
  41. if (config.schema) {
  42. const tablesConfig = extractTablesRelationalConfig(
  43. config.schema,
  44. createTableRelationsHelpers
  45. );
  46. schema = {
  47. fullSchema: config.schema,
  48. schema: tablesConfig.tables,
  49. tableNamesMap: tablesConfig.tableNamesMap
  50. };
  51. }
  52. const driver = new SingleStoreDriverDriver(clientForInstance, dialect, {
  53. logger,
  54. cache: config.cache
  55. });
  56. const session = driver.createSession(schema);
  57. const db = new SingleStoreDriverDatabase(dialect, session, schema);
  58. db.$client = client;
  59. db.$cache = config.cache;
  60. if (db.$cache) {
  61. db.$cache["invalidate"] = config.cache?.onMutate;
  62. }
  63. return db;
  64. }
  65. function isCallbackClient(client) {
  66. return typeof client.promise === "function";
  67. }
  68. const CONNECTION_ATTRS = {
  69. _connector_name: "SingleStore Drizzle ORM Driver",
  70. _connector_version: npmVersion
  71. };
  72. function drizzle(...params) {
  73. if (typeof params[0] === "string") {
  74. const connectionString = params[0];
  75. const instance = createPool({
  76. uri: connectionString,
  77. connectAttributes: CONNECTION_ATTRS
  78. });
  79. return construct(instance, params[1]);
  80. }
  81. if (isConfig(params[0])) {
  82. const { connection, client, ...drizzleConfig } = params[0];
  83. if (client) return construct(client, drizzleConfig);
  84. let opts = {};
  85. opts = typeof connection === "string" ? {
  86. uri: connection,
  87. supportBigNumbers: true,
  88. connectAttributes: CONNECTION_ATTRS
  89. } : {
  90. ...connection,
  91. connectAttributes: {
  92. ...connection.connectAttributes,
  93. ...CONNECTION_ATTRS
  94. }
  95. };
  96. const instance = createPool(opts);
  97. const db = construct(instance, drizzleConfig);
  98. return db;
  99. }
  100. return construct(params[0], params[1]);
  101. }
  102. ((drizzle2) => {
  103. function mock(config) {
  104. return construct({}, config);
  105. }
  106. drizzle2.mock = mock;
  107. })(drizzle || (drizzle = {}));
  108. export {
  109. SingleStoreDatabase2 as SingleStoreDatabase,
  110. SingleStoreDriverDatabase,
  111. SingleStoreDriverDriver,
  112. drizzle
  113. };
  114. //# sourceMappingURL=driver.js.map