{"version":3,"file":"session.cjs","names":["PgAsyncSession","entityKind","NoopCache","NoopLogger","ExecuteStatementCommand","toValueParam","getValueFromDataApi","PgAsyncPreparedQuery","BeginTransactionCommand","CommitTransactionCommand","RollbackTransactionCommand","PgAsyncTransaction","sql"],"sources":["../../../src/aws-data-api/pg/session.ts"],"sourcesContent":["import type { 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 type { Cache } from '~/cache/core/cache.ts';\nimport { NoopCache } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport { type Logger, NoopLogger } from '~/logger.ts';\nimport { PgAsyncPreparedQuery, PgAsyncSession, PgAsyncTransaction } from '~/pg-core/async/session.ts';\nimport type { PgDialect } from '~/pg-core/dialect.ts';\nimport type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from '~/pg-core/session.ts';\nimport type { AnyRelations } from '~/relations.ts';\nimport { type Query, sql } from '~/sql/sql.ts';\nimport { getValueFromDataApi, toValueParam } from '../common/index.ts';\n\nexport type AwsDataApiClient = RDSDataClient;\n\nexport interface AwsDataApiSessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\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\tTRelations extends AnyRelations,\n> extends PgAsyncSession<AwsDataApiPgQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'AwsDataApiSession';\n\n\t/** @internal */\n\treadonly rawQuery: AwsDataApiQueryBase;\n\tprivate cache: Cache;\n\tprivate logger: Logger;\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly client: AwsDataApiClient,\n\t\tdialect: PgDialect,\n\t\tprivate relations: TRelations,\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\tthis.cache = options.cache ?? new NoopCache();\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t}\n\n\tprepareQuery<T extends PreparedQueryConfig>(\n\t\tquery: Query,\n\t\tmode: 'arrays' | 'objects' | 'raw',\n\t\t_name: string | boolean,\n\t\tmapper: ((rows: any[]) => any) | undefined,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): PgAsyncPreparedQuery<T> {\n\t\tconst executor = async (params?: unknown[]) => {\n\t\t\tconst command = new ExecuteStatementCommand({\n\t\t\t\tsql: query.sql,\n\t\t\t\tparameters: params\n\t\t\t\t\t? params.map((param, index) => ({\n\t\t\t\t\t\tname: `${index + 1}`,\n\t\t\t\t\t\tvalue: toValueParam(param),\n\t\t\t\t\t}))\n\t\t\t\t\t: [],\n\t\t\t\tsecretArn: this.options.secretArn,\n\t\t\t\tresourceArn: this.options.resourceArn,\n\t\t\t\tdatabase: this.options.database,\n\t\t\t\ttransactionId: this.transactionId,\n\t\t\t\tincludeResultMetadata: mode === 'objects' || mode === 'raw',\n\t\t\t});\n\n\t\t\tconst result = await this.client.send(command);\n\t\t\tconst rows = result.records ?? [];\n\t\t\tif (result.records) {\n\t\t\t\tfor (let i = 0; i < result.records.length; ++i) {\n\t\t\t\t\tconst row = rows[i] as unknown[];\n\t\t\t\t\tfor (let j = 0; j < row.length; ++j) {\n\t\t\t\t\t\trow[j] = getValueFromDataApi(row[j] as Field);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mode === 'arrays') return rows;\n\n\t\t\tconst { columnMetadata } = result;\n\t\t\tif (!columnMetadata) {\n\t\t\t\treturn Object.assign(result, { rows });\n\t\t\t}\n\n\t\t\tconst mappedRows = rows.map((sourceRow) => {\n\t\t\t\tconst row: Record<string, unknown> = {};\n\t\t\t\tfor (const [index, value] of sourceRow.entries()) {\n\t\t\t\t\tconst metadata = columnMetadata[index];\n\t\t\t\t\tif (!metadata) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Unexpected state: no column metadata found for index ${index}. Please report this issue on GitHub: https://github.com/drizzle-team/drizzle-orm/issues/new/choose`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!metadata.name) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Unexpected state: no column name for index ${index} found in the column metadata. Please report this issue on GitHub: https://github.com/drizzle-team/drizzle-orm/issues/new/choose`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\trow[metadata.name] = value;\n\t\t\t\t}\n\t\t\t\treturn row;\n\t\t\t});\n\n\t\t\tif (mode === 'objects') return mappedRows;\n\t\t\treturn Object.assign(result, { rows: mappedRows });\n\t\t};\n\n\t\treturn new PgAsyncPreparedQuery<T>(\n\t\t\texecutor,\n\t\t\tquery,\n\t\t\tmapper,\n\t\t\tmode,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TRelations>) => 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(\n\t\t\tthis.client,\n\t\t\tthis.dialect,\n\t\t\tthis.relations,\n\t\t\tthis.options,\n\t\t\ttransactionId,\n\t\t);\n\t\tconst tx = new AwsDataApiTransaction<TRelations>(\n\t\t\tthis.dialect,\n\t\t\tsession,\n\t\t\tthis.relations,\n\t\t\tundefined,\n\t\t\ttrue,\n\t\t);\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\tTRelations extends AnyRelations,\n> extends PgAsyncTransaction<AwsDataApiPgQueryResultHKT, TRelations> {\n\tstatic override readonly [entityKind]: string = 'AwsDataApiTransaction';\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: AwsDataApiTransaction<TRelations>) => Promise<T>,\n\t): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex + 1}`;\n\t\tconst tx = new AwsDataApiTransaction<TRelations>(\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tthis._.relations,\n\t\t\tthis.nestedIndex + 1,\n\t\t\ttrue,\n\t\t);\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 PgQueryResultHKT {\n\ttype: AwsDataApiPgQueryResult<this['row']>;\n}\n"],"mappings":"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"}