import { entityKind } from "../entity.cjs";
import { Query } from "../sql/sql.cjs";
import { Assume } from "../utils.cjs";
import * as V1 from "../_relations.cjs";
import { Logger } from "../logger.cjs";
import { AnyRelations } from "../relations.cjs";
import { WithCacheConfig } from "../cache/core/types.cjs";
import { Connection, FieldPacket, OkPacket, Pool, ResultSetHeader, RowDataPacket } from "mysql2/promise";
import { SingleStoreDialect } from "../singlestore-core/dialect.cjs";
import { AnySingleStoreMapper, PreparedQueryKind, SingleStorePreparedQuery, SingleStorePreparedQueryConfig, SingleStorePreparedQueryHKT, SingleStoreQueryResultHKT, SingleStoreSession, SingleStoreTransaction, SingleStoreTransactionConfig } from "../singlestore-core/session.cjs";
import { Cache } from "../cache/core/index.cjs";

//#region src/singlestore/session.d.ts
type SingleStoreDriverClient = Pool | Connection;
type SingleStoreRawQueryResult = [ResultSetHeader, FieldPacket[]];
type SingleStoreQueryResultType = RowDataPacket[][] | RowDataPacket[] | OkPacket | OkPacket[] | ResultSetHeader;
type SingleStoreQueryResult<T = any> = [T extends ResultSetHeader ? T : T[], FieldPacket[]];
interface SingleStoreDriverSessionOptions {
  logger?: Logger;
  cache?: Cache;
}
declare class SingleStoreDriverSession<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends SingleStoreSession<SingleStoreQueryResultHKT, SingleStoreDriverPreparedQueryHKT, TFullSchema, TRelations, TSchema> {
  private client;
  private relations;
  private schema;
  private options;
  static readonly [entityKind]: string;
  private logger;
  private cache;
  constructor(client: SingleStoreDriverClient, dialect: SingleStoreDialect, relations: TRelations, schema: V1.RelationalSchemaConfig<TSchema> | undefined, options: SingleStoreDriverSessionOptions);
  prepareQuery<T extends SingleStorePreparedQueryConfig>(query: Query, mode: 'arrays' | 'objects' | 'raw', mapper?: AnySingleStoreMapper, queryMetadata?: {
    type: 'select' | 'update' | 'delete' | 'insert';
    tables: string[];
  }, cacheConfig?: WithCacheConfig): PreparedQueryKind<SingleStoreDriverPreparedQueryHKT, T>;
  transaction<T>(transaction: (tx: SingleStoreDriverTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>, config?: SingleStoreTransactionConfig): Promise<T>;
}
declare class SingleStoreDriverTransaction<TFullSchema extends Record<string, unknown>, TRelations extends AnyRelations, TSchema extends V1.TablesRelationalConfig> extends SingleStoreTransaction<SingleStoreDriverQueryResultHKT, SingleStoreDriverPreparedQueryHKT, TFullSchema, TRelations, TSchema> {
  static readonly [entityKind]: string;
  transaction<T>(transaction: (tx: SingleStoreDriverTransaction<TFullSchema, TRelations, TSchema>) => Promise<T>): Promise<T>;
}
interface SingleStoreDriverQueryResultHKT extends SingleStoreQueryResultHKT {
  type: SingleStoreRawQueryResult;
}
interface SingleStoreDriverPreparedQueryHKT extends SingleStorePreparedQueryHKT {
  type: SingleStorePreparedQuery<Assume<this['config'], SingleStorePreparedQueryConfig>>;
}
//#endregion
export { SingleStoreDriverClient, SingleStoreDriverPreparedQueryHKT, SingleStoreDriverQueryResultHKT, SingleStoreDriverSession, SingleStoreDriverSessionOptions, SingleStoreDriverTransaction, SingleStoreQueryResult, SingleStoreQueryResultType, SingleStoreRawQueryResult };
//# sourceMappingURL=session.d.cts.map