import {TableRef, QuerySource} from '../types.ts' /** * Query builder mixin for queries that resolve table names. */ export class TableRefBuilder { /** * Resolve the raw table name to a table reference. * @param {string} from * @return TableRef */ resolve_table_name(from: string): TableRef { const parts = from.split('.') const ref: any = {} if ( parts.length > 1 ) { ref.database = parts[0] ref.table = parts[1] } else { ref.table = parts[0] } const alias_parts = ref.table.split(/\s+/) if ( alias_parts.length > 1 ) { ref.table = alias_parts[0] ref.alias = alias_parts[1] } return ref as TableRef } /** * Serialize a table ref to its raw SQL form. * @param {TableRef} ref * @return string */ serialize_table_ref(ref: TableRef): string { return `${ref.database ? ref.database+'.' : ''}${ref.table}${ref.alias ? ' '+ref.alias : ''}` } /** * Convert a query source and alias to a table ref. * @param {QuerySource} source * @param {string} [alias] * @return TableRef */ source_alias_to_table_ref(source: QuerySource, alias?: string) { let string = '' if ( typeof source === 'string' ) { string = source if ( typeof alias === 'string' ) string += ` ${alias}` } else if ( typeof source === 'object' ) { string = `${source.ref}` if ( source.alias ) string += ` ${source.alias}` else if ( typeof alias === 'string' ) string += ` ${alias}` } return this.resolve_table_name(string) } }