You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.3 KiB
38 lines
1.3 KiB
4 years ago
|
import ConnectionExecutable from './ConnectionExecutable.ts'
|
||
|
import {QueryResult, QueryRow} from "../../db/types.ts";
|
||
|
import {Connection} from "../../db/Connection.ts";
|
||
|
import {Collection} from "../../../../lib/src/collection/Collection.ts";
|
||
|
|
||
|
export default abstract class ConnectionMutable extends ConnectionExecutable {
|
||
|
__execution_result?: QueryResult
|
||
|
|
||
|
async get_row(i: number) {
|
||
|
const result = await this.get_execution_result()
|
||
|
const row = result.rows.at(i)
|
||
|
if ( row ) return this.__target_operator.inflate_row(row)
|
||
|
}
|
||
|
|
||
|
async get_range(start: number, end: number) {
|
||
|
const result = await this.get_execution_result()
|
||
|
const rows: Collection<QueryRow> = result.rows.slice(start, end + 1) as Collection<QueryRow>
|
||
|
return rows.map(row => this.__target_operator.inflate_row(row))
|
||
|
}
|
||
|
|
||
|
async count() {
|
||
|
const result = await this.get_execution_result()
|
||
|
return result.row_count
|
||
|
}
|
||
|
|
||
|
async get_execution_result(): Promise<QueryResult> {
|
||
|
if ( this.__execution_result ) return this.__execution_result
|
||
|
else return this.execute()
|
||
|
}
|
||
|
|
||
|
async execute_in_connection(connection: string | Connection): Promise<QueryResult> {
|
||
|
const result = await super.execute_in_connection(connection)
|
||
|
this.__execution_result = result
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
}
|