import { ObjectLiteral } from "../../common/ObjectLiteral";
|
import { AbstractSqliteQueryRunner } from "../sqlite-abstract/AbstractSqliteQueryRunner";
|
import { CordovaDriver } from "./CordovaDriver";
|
/**
|
* Runs queries on a single sqlite database connection.
|
*/
|
export declare class CordovaQueryRunner extends AbstractSqliteQueryRunner {
|
/**
|
* Database driver used by connection.
|
*/
|
driver: CordovaDriver;
|
constructor(driver: CordovaDriver);
|
/**
|
* Executes a given SQL query.
|
*/
|
query(query: string, parameters?: any[]): Promise<any>;
|
/**
|
* Insert a new row with given values into the given table.
|
* Returns value of the generated column if given and generate column exist in the table.
|
// todo: implement new syntax
|
async insert(tableName: string, keyValues: ObjectLiteral): Promise<InsertResult> {
|
const keys = Object.keys(keyValues);
|
const columns = keys.map(key => `"${key}"`).join(", ");
|
const values = keys.map(key => "?").join(",");
|
const generatedColumns = this.connection.hasMetadata(tableName) ? this.connection.getMetadata(tableName).generatedColumns : [];
|
const sql = columns.length > 0 ? (`INSERT INTO "${tableName}"(${columns}) VALUES (${values})`) : `INSERT INTO "${tableName}" DEFAULT VALUES`;
|
const parameters = keys.map(key => keyValues[key]);
|
|
return new Promise<InsertResult>(async (ok, fail) => {
|
this.driver.connection.logger.logQuery(sql, parameters, this);
|
const __this = this;
|
const databaseConnection = await this.connect();
|
databaseConnection.executeSql(sql, parameters, (resultSet: any) => {
|
const generatedMap = generatedColumns.reduce((map, generatedColumn) => {
|
const value = generatedColumn.isPrimary && generatedColumn.generationStrategy === "increment" && resultSet.insertId ? resultSet.insertId : keyValues[generatedColumn.databaseName];
|
if (!value) return map;
|
return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));
|
}, {} as ObjectLiteral);
|
|
ok({
|
result: undefined,
|
generatedMap: Object.keys(generatedMap).length > 0 ? generatedMap : undefined
|
});
|
}, (err: any) => {
|
__this.driver.connection.logger.logQueryError(err, sql, parameters, this);
|
fail(err);
|
});
|
});
|
}*/
|
/**
|
* Parametrizes given object of values. Used to create column=value queries.
|
*/
|
protected parametrize(objectLiteral: ObjectLiteral, startIndex?: number): string[];
|
}
|