import { ColumnsArg, ConnectorArg, LogQueryArg, ParametersArg, QueryArg, RowArg, ScopeArg, SelectArg, TableArg, TableNameArg, WhereArg, RouteArg, UpdateArg, } from "../../types"; import { BeginFunction } from "../../functions/begin/types"; import { CommitFunction } from "../../functions/commit/types"; import { CountFunction } from "../../functions/count/types"; import { CreateTableFunction } from "../../functions/create-table/types"; import { DeclareSQLFunction } from "../../functions/declare-sql/types"; import { DeleteFunction } from "../../functions/delete/types"; import { ExecuteSQLFunction } from "../../functions/execute-sql/types"; import { ExistFunction } from "../../functions/exist/types"; import { InsertFunction } from "../../functions/insert/types"; import { RollbackFunction } from "../../functions/rollback/types"; import { SelectFunction } from "../../functions/select/types"; import { UpdateFunction } from "../../functions/update/types"; import { ScopesQueue, Scope } from "../scopes-queue/types"; import { Database } from "sqlite3"; import { Table } from "../table/types"; export interface DB { logQuery: boolean; createScope():Scope; getTable(tableName:string):Table; get select(): ({ (args: TableArg & SelectArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; rows(args: TableArg & SelectArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; row(args: TableArg & SelectArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; column(args: TableArg & SelectArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; celd(args: TableArg & SelectArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; }); createTable(args: TableNameArg & ColumnsArg & LogQueryArg & ScopeArg):ReturnType; insert(args: TableArg & RowArg & LogQueryArg & ScopeArg):ReturnType; update(args: TableArg & UpdateArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; delete(args: TableArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; exist(args: TableArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; count(args: TableArg & WhereArg & LogQueryArg & ScopeArg):ReturnType; get executeSQL(): ({ (args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; select: { (args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; rows(args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; row(args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; column(args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; celd(args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; } insert(args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; update(args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; delete(args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; justRun(args: QueryArg & ParametersArg & LogQueryArg & ScopeArg):ReturnType; }); declareSQL(args: QueryArg & LogQueryArg & ScopeArg):ReturnType; get begin(): ({ (args: LogQueryArg & ScopeArg):ReturnType; transaction(args: LogQueryArg & ScopeArg):ReturnType; deferredTransaction(args: LogQueryArg & ScopeArg):ReturnType; immediateTransaction(args: LogQueryArg & ScopeArg):ReturnType; exclusiveTransaction(args: LogQueryArg & ScopeArg):ReturnType; }); rollback(args: LogQueryArg & ScopeArg):ReturnType; commit(args: LogQueryArg & ScopeArg):ReturnType; close():Promise; } export interface DBPrivate { sqliteDb:Database; scopesQueue:ScopesQueue; beginDefferredTransactionStamentPromise:Promise, beginImmediateTransactionStamentPromise:Promise, beginExclusiveTransactionStamentPromise:Promise, rollbackStamentPromise:Promise, commitStamentPromise:Promise, tablesMap:Map, stmtPromisesList: ReturnType[]; } export interface DBClass { new(args: RouteArg & LogQueryArg):DB; private:WeakMap; getPrivate(db:DB):DBPrivate; setPrivate(db:DB, pc:DBPrivate):void; }; type SelectLikes = SelectFunction|SelectFunction["rows"]|SelectFunction["row"]|SelectFunction["column"]|SelectFunction["celd"]; type ExecSqlLikes = ExecuteSQLFunction|ExecuteSQLFunction["delete"]|ExecuteSQLFunction["insert"]|ExecuteSQLFunction["justRun"]|ExecuteSQLFunction["update"]|ExecuteSQLFunction["select"]|ExecuteSQLFunction["select"]["rows"]|ExecuteSQLFunction["select"]["row"]|ExecuteSQLFunction["select"]["column"]|ExecuteSQLFunction["select"]["celd"]; export type SimpleMethodWrap = (method:M) => ( args:( M extends SelectLikes ? Parameters[0] : M extends ExecSqlLikes ? Parameters[0] : M extends UpdateFunction ? Parameters[0] : M extends InsertFunction ? Parameters[0] : M extends DeclareSQLFunction ? Parameters[0] : M extends DeleteFunction ? Parameters[0] : M extends ExistFunction ? Parameters[0] : M extends CountFunction ? Parameters[0] : M extends CreateTableFunction ? Parameters[0] : never ) ) => Promise>>; type ArgsBegin = Parameters[0]; type StmtKeys = "beginDefferredTransactionStamentPromise"|"beginImmediateTransactionStamentPromise"|"beginExclusiveTransactionStamentPromise"|"rollbackStamentPromise"|"commitStamentPromise"; export type StmtMethodWrap = (method:M, stmtKey:StmtKeys) =>(args:ArgsBegin)=> Promise>>;