AK-21/Graphite-Industrial-Intelligence
0
1import { createPool } from "mysql2";2import { entityKind } from "../entity.js";3import { DefaultLogger } from "../logger.js";4import {5 createTableRelationsHelpers,6 extractTablesRelationalConfig7} from "../relations.js";8import { SingleStoreDatabase } from "../singlestore-core/db.js";9import { SingleStoreDialect } from "../singlestore-core/dialect.js";10import { isConfig } from "../utils.js";11import { npmVersion } from "../version.js";12import { SingleStoreDriverSession } from "./session.js";13class 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.cache24 });25 }26}27import { SingleStoreDatabase as SingleStoreDatabase2 } from "../singlestore-core/db.js";28class SingleStoreDriverDatabase extends SingleStoreDatabase {29 static [entityKind] = "SingleStoreDriverDatabase";30}31function 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 createTableRelationsHelpers45 );46 schema = {47 fullSchema: config.schema,48 schema: tablesConfig.tables,49 tableNamesMap: tablesConfig.tableNamesMap50 };51 }52 const driver = new SingleStoreDriverDriver(clientForInstance, dialect, {53 logger,54 cache: config.cache55 });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}65function isCallbackClient(client) {66 return typeof client.promise === "function";67}68const CONNECTION_ATTRS = {69 _connector_name: "SingleStore Drizzle ORM Driver",70 _connector_version: npmVersion71};72function drizzle(...params) {73 if (typeof params[0] === "string") {74 const connectionString = params[0];75 const instance = createPool({76 uri: connectionString,77 connectAttributes: CONNECTION_ATTRS78 });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_ATTRS89 } : {90 ...connection,91 connectAttributes: {92 ...connection.connectAttributes,93 ...CONNECTION_ATTRS94 }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 = {}));108export {109 SingleStoreDatabase2 as SingleStoreDatabase,110 SingleStoreDriverDatabase,111 SingleStoreDriverDriver,112 drizzle113};114//# sourceMappingURL=driver.js.map