@@ -5,6 +5,7 @@ import {produce} from 'immer';
5
5
import department from '../resources/Department.json' ;
6
6
import doctor from '../resources/Doctor.json' ;
7
7
import patient from '../resources/Patient.json' ;
8
+ import relation from '../Relation' ;
8
9
9
10
export const CHANGE_EXPR = 'CHANGE_EXPR' ;
10
11
export const RESET_EXPR = 'RESET_EXPR' ;
@@ -86,6 +87,29 @@ function getCombinedColumns(left: {[string]: any}, right: {[string]: any}) {
86
87
return combinedColumns ;
87
88
}
88
89
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
+
89
113
function getCombinedData (
90
114
leftName : string ,
91
115
leftRow : { [ string ] : any } ,
@@ -327,6 +351,12 @@ function applyExpr(
327
351
// Make a copy of the data from a source table and return it
328
352
return { ...sourceData [ expr . relation ] } ;
329
353
354
+ case 'alias' :
355
+ return getAliasedOutput (
356
+ sourceData [ expr . alias . value ] ,
357
+ expr . alias . alias_value
358
+ ) ;
359
+
330
360
case 'order_by' :
331
361
let ordData = applyExpr ( expr . order_by . children [ 0 ] , sourceData ) ;
332
362
0 commit comments