Add support for subqueries
This commit is contained in:
parent
809af8063f
commit
dc6ba53380
18
app/index.ts
18
app/index.ts
@ -18,21 +18,3 @@ await scaffolding.up()
|
|||||||
*/
|
*/
|
||||||
const app = make(Application, units)
|
const app = make(Application, units)
|
||||||
await app.run()
|
await app.run()
|
||||||
|
|
||||||
import UserModel from './models/User.model.ts'
|
|
||||||
import ObjectResultOperator from "../orm/src/builder/type/result/ObjectResultOperator.ts";
|
|
||||||
// const users = await UserModel.find_one({ username: 'garrettmills' })
|
|
||||||
|
|
||||||
const sel = UserModel.select('*').with('login_attempts').where('username', '=', 'garrettmills')
|
|
||||||
console.log(sel)
|
|
||||||
console.log(sel.clone())
|
|
||||||
const gm = await sel.results().first()
|
|
||||||
|
|
||||||
console.log(gm)
|
|
||||||
|
|
||||||
const la = (await gm.login_attempts()).first()
|
|
||||||
console.log(la)
|
|
||||||
|
|
||||||
console.log(await la.user())
|
|
||||||
|
|
||||||
// console.log(await las.fetchRelated())
|
|
||||||
|
@ -4,7 +4,8 @@ import {
|
|||||||
WhereStatement,
|
WhereStatement,
|
||||||
TableRef,
|
TableRef,
|
||||||
OrderStatement,
|
OrderStatement,
|
||||||
OrderDirection, HavingStatement
|
OrderDirection, HavingStatement,
|
||||||
|
escape,
|
||||||
} from '../types.ts'
|
} from '../types.ts'
|
||||||
import {WhereBuilder} from './WhereBuilder.ts'
|
import {WhereBuilder} from './WhereBuilder.ts'
|
||||||
import {applyMixins} from '../../../../lib/src/support/mixins.ts'
|
import {applyMixins} from '../../../../lib/src/support/mixins.ts'
|
||||||
@ -72,10 +73,13 @@ export class Select<T> extends ConnectionExecutable<T> {
|
|||||||
].filter(x => String(x).trim()).join(`\n${indent}`)
|
].filter(x => String(x).trim()).join(`\n${indent}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
field(field: string) {
|
field(field: string | Select<any>, as?: string) {
|
||||||
if ( !this._fields.includes(field) ) {
|
if ( field instanceof Select ) {
|
||||||
|
this._fields.push(`${escape(field)}${as ? ' AS '+as : ''}`)
|
||||||
|
} else {
|
||||||
this._fields.push(field)
|
this._fields.push(field)
|
||||||
}
|
}
|
||||||
|
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import {WhereOperator} from '../../../lib/src/collection/Where.ts'
|
import {WhereOperator} from '../../../lib/src/collection/Where.ts'
|
||||||
import RawValue from './RawValue.ts'
|
import RawValue from './RawValue.ts'
|
||||||
|
import {Select} from "./type/Select.ts";
|
||||||
|
|
||||||
export type FieldSet = string | string[]
|
export type FieldSet = string | string[]
|
||||||
export type QuerySource = string | { ref: QuerySource, alias: string }
|
export type QuerySource = string | { ref: QuerySource, alias: string }
|
||||||
@ -20,7 +21,7 @@ export type HavingGroup = WhereGroup
|
|||||||
export type HavingStatement = HavingClause | HavingGroup
|
export type HavingStatement = HavingClause | HavingGroup
|
||||||
export type SQLHavingOperator = SQLWhereOperator
|
export type SQLHavingOperator = SQLWhereOperator
|
||||||
|
|
||||||
export type EscapedValue = string | number | boolean | Date | RawValue | EscapedValue[]
|
export type EscapedValue = string | number | boolean | Date | RawValue | EscapedValue[] | Select<any>
|
||||||
|
|
||||||
export type FieldValue = { field: string, value: EscapedValue }
|
export type FieldValue = { field: string, value: EscapedValue }
|
||||||
export type FieldValueObject = { [field: string]: EscapedValue }
|
export type FieldValueObject = { [field: string]: EscapedValue }
|
||||||
@ -76,7 +77,9 @@ export function isWhereStatement(something: any): something is WhereStatement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function escape(value: EscapedValue): string {
|
export function escape(value: EscapedValue): string {
|
||||||
if ( value instanceof RawValue ) {
|
if ( value instanceof Select ) {
|
||||||
|
return `(${value.sql(5)})`
|
||||||
|
} else if ( value instanceof RawValue ) {
|
||||||
return value.value
|
return value.value
|
||||||
} else if ( Array.isArray(value) ) {
|
} else if ( Array.isArray(value) ) {
|
||||||
return `(${value.map(escape).join(',')})`
|
return `(${value.map(escape).join(',')})`
|
||||||
|
Loading…
Reference in New Issue
Block a user