@@ -5,6 +5,7 @@ import {produce} from 'immer';
55import department from '../resources/Department.json' ;
66import doctor from '../resources/Doctor.json' ;
77import patient from '../resources/Patient.json' ;
8+ import relation from '../Relation' ;
89
910export const CHANGE_EXPR = 'CHANGE_EXPR' ;
1011export const RESET_EXPR = 'RESET_EXPR' ;
@@ -86,6 +87,29 @@ function getCombinedColumns(left: {[string]: any}, right: {[string]: any}) {
8687 return combinedColumns ;
8788}
8889
90+ function getAliasedOutput ( relation : { [ string ] : any } , alias : string ) {
91+ const newColumns : Array < string > = [];
92+ const newData: Array< { [ string ] : any } > = [ ] ;
93+ for ( const column of relation . columns ) {
94+ const newColumnName = alias + '.' + column ;
95+ newColumns . push ( newColumnName ) ;
96+ }
97+ for ( const datum of relation . data ) {
98+ let newDatum : { [ string ] : any } = { } ;
99+ for ( const column of relation . columns ) {
100+ newDatum [ alias + '.' + column ] = datum [ column ] ;
101+ }
102+ newData . push ( newDatum ) ;
103+ }
104+
105+ const output : Output = {
106+ name : alias ,
107+ columns : newColumns ,
108+ data : newData ,
109+ } ;
110+ return output ;
111+ }
112+
89113function getCombinedData (
90114 leftName : string ,
91115 leftRow : { [ string ] : any } ,
@@ -327,6 +351,12 @@ function applyExpr(
327351 // Make a copy of the data from a source table and return it
328352 return { ...sourceData [ expr . relation ] } ;
329353
354+ case 'alias' :
355+ return getAliasedOutput (
356+ sourceData [ expr . alias . value ] ,
357+ expr . alias . alias_value
358+ ) ;
359+
330360 case 'order_by' :
331361 let ordData = applyExpr ( expr . order_by . children [ 0 ] , sourceData ) ;
332362
0 commit comments