@@ -11,28 +11,70 @@ import { DriverInterface, DriverOptions, QueryAST } from '@objectstack/spec';
1111 * 4. Driver Delegation
1212 */
1313export class ObjectQL {
14- constructor ( private driver : DriverInterface ) {
15- console . log ( `[ObjectQL] Initialized with driver: ${ driver . name } v${ driver . version } ` ) ;
14+ private drivers = new Map < string , DriverInterface > ( ) ;
15+ private defaultDriver : string | null = null ;
16+
17+ constructor ( ) {
18+ console . log ( `[ObjectQL] Engine Instance Created` ) ;
19+ }
20+
21+ /**
22+ * Register a new storage driver
23+ */
24+ registerDriver ( driver : DriverInterface , isDefault : boolean = false ) {
25+ if ( this . drivers . has ( driver . name ) ) {
26+ console . warn ( `[ObjectQL] Driver ${ driver . name } is already registered. Skipping.` ) ;
27+ return ;
28+ }
29+
30+ this . drivers . set ( driver . name , driver ) ;
31+ console . log ( `[ObjectQL] Registered driver: ${ driver . name } v${ driver . version } ` ) ;
32+
33+ if ( isDefault || this . drivers . size === 1 ) {
34+ this . defaultDriver = driver . name ;
35+ }
36+ }
37+
38+ /**
39+ * Helper to get the target driver
40+ */
41+ private getDriver ( object : string ) : DriverInterface {
42+ // TODO: Look up Object definition to see if it specifies a specific datasource/driver
43+ // For now, always return default
44+ if ( ! this . defaultDriver ) {
45+ throw new Error ( '[ObjectQL] No drivers registered!' ) ;
46+ }
47+ return this . drivers . get ( this . defaultDriver ) ! ;
1648 }
1749
1850 /**
19- * Initialize the engine
51+ * Initialize the engine and all registered drivers
2052 */
2153 async init ( ) {
22- await this . driver . connect ( ) ;
54+ console . log ( '[ObjectQL] Initializing drivers...' ) ;
55+ for ( const [ name , driver ] of this . drivers ) {
56+ try {
57+ await driver . connect ( ) ;
58+ } catch ( e ) {
59+ console . error ( `[ObjectQL] Failed to connect driver ${ name } ` , e ) ;
60+ }
61+ }
2362 // In a real app, we would sync schemas here
2463 }
2564
2665 async destroy ( ) {
27- await this . driver . disconnect ( ) ;
66+ for ( const driver of this . drivers . values ( ) ) {
67+ await driver . disconnect ( ) ;
68+ }
2869 }
2970
3071 // ============================================
3172 // Data Access Methods
3273 // ============================================
3374
3475 async find ( object : string , filters : any = { } , options ?: DriverOptions ) {
35- console . log ( `[ObjectQL] Finding ${ object } ...` ) ;
76+ const driver = this . getDriver ( object ) ;
77+ console . log ( `[ObjectQL] Finding ${ object } on ${ driver . name } ...` ) ;
3678
3779 // Transform simplified filters to QueryAST
3880 // This is a simplified "Mock" transform.
@@ -45,27 +87,30 @@ export class ObjectQL {
4587 sort : filters . sort || [ ]
4688 } ;
4789
48- return this . driver . find ( object , ast , options ) ;
90+ return driver . find ( object , ast , options ) ;
4991 }
5092
5193 async insert ( object : string , data : Record < string , any > , options ?: DriverOptions ) {
52- console . log ( `[ObjectQL] Creating ${ object } ...` ) ;
94+ const driver = this . getDriver ( object ) ;
95+ console . log ( `[ObjectQL] Creating ${ object } on ${ driver . name } ...` ) ;
5396 // 1. Validate Schema
5497 // 2. Run "Before Insert" Triggers
5598
56- const result = await this . driver . create ( object , data , options ) ;
99+ const result = await driver . create ( object , data , options ) ;
57100
58101 // 3. Run "After Insert" Triggers
59102 return result ;
60103 }
61104
62105 async update ( object : string , id : string , data : Record < string , any > , options ?: DriverOptions ) {
106+ const driver = this . getDriver ( object ) ;
63107 console . log ( `[ObjectQL] Updating ${ object } ${ id } ...` ) ;
64- return this . driver . update ( object , id , data , options ) ;
108+ return driver . update ( object , id , data , options ) ;
65109 }
66110
67111 async delete ( object : string , id : string , options ?: DriverOptions ) {
112+ const driver = this . getDriver ( object ) ;
68113 console . log ( `[ObjectQL] Deleting ${ object } ${ id } ...` ) ;
69- return this . driver . delete ( object , id , options ) ;
114+ return driver . delete ( object , id , options ) ;
70115 }
71116}
0 commit comments