Experimental SQLite support

This commit is contained in:
2022-09-30 11:42:13 -05:00
parent c0595f3ef9
commit 52762bd4a1
16 changed files with 1401 additions and 71 deletions

View File

@@ -4,7 +4,7 @@ import {DatabaseService} from '../DatabaseService'
import {ModelBuilder} from './ModelBuilder'
import {getFieldsMeta, ModelField} from './Field'
import {deepCopy, Collection, uuid4, isKeyof, Pipeline, hasOwnProperty} from '../../util'
import {EscapeValueObject} from '../dialect/SQLDialect'
import {EscapeValueObject, QuerySafeValue} from '../dialect/SQLDialect'
import {Logging} from '../../service/Logging'
import {Connection} from '../connection/Connection'
import {ModelRetrievedEvent} from './events/ModelRetrievedEvent'
@@ -162,7 +162,7 @@ export abstract class Model<T extends Model<T>> extends LocalBus<ModelEvent<T>>
builder.connection(this.getConnection())
if ( typeof source === 'string' ) {
if ( typeof source === 'string' || source instanceof QuerySafeValue ) {
builder.from(source)
} else {
builder.from(source.table, source.alias)
@@ -368,7 +368,7 @@ export abstract class Model<T extends Model<T>> extends LocalBus<ModelEvent<T>>
builder.connection(ModelClass.getConnection())
if ( typeof source === 'string' ) {
if ( typeof source === 'string' || source instanceof QuerySafeValue ) {
builder.from(source)
} else {
builder.from(source.table, source.alias)

View File

@@ -2,9 +2,10 @@ import {Model} from './Model'
import {AbstractResultIterable} from '../builder/result/AbstractResultIterable'
import {Connection} from '../connection/Connection'
import {ModelBuilder} from './ModelBuilder'
import {Container, Instantiable} from '../../di'
import {Instantiable} from '../../di'
import {QueryRow} from '../types'
import {collect, Collection} from '../../util'
import {getFieldsMeta} from './Field'
/**
* Implementation of the result iterable that returns query results as instances of the defined model.
@@ -60,8 +61,11 @@ export class ModelResultIterable<T extends Model<T>> extends AbstractResultItera
* @protected
*/
protected async inflateRow(row: QueryRow): Promise<T> {
return Container.getContainer().make<T>(this.ModelClass)
.assumeFromSource(row)
const model = this.make<T>(this.ModelClass)
const fields = getFieldsMeta(model)
return model.assumeFromSource(
this.connection.normalizeRow(row, fields),
)
}
/**