@@ -858,6 +858,132 @@ describe('SQL Generation', () => {
858858 expect ( cubeSQL ) . toMatch ( / \( \s * \( .* t y p e \s * = \s * \$ \d \$ .* O R .* t y p e \s * = \s * \$ \d \$ .* \) \s * A N D \s * \( .* t y p e \s * = \s * \$ \d \$ .* O R .* t y p e \s * = \s * \$ \d \$ .* \) \s * \) / ) ;
859859 } ) ;
860860 } ) ;
861+
862+ describe ( 'FILTER_GROUP' , ( ) => {
863+ /** @type {Compilers } */
864+ const compilers = prepareYamlCompiler (
865+ createSchemaYaml ( {
866+ cubes : [
867+ {
868+ name : 'Order' ,
869+ sql : `select * from order where {FILTER_GROUP(
870+ FILTER_PARAMS.Order.dim0.filter('dim0'),
871+ FILTER_PARAMS.Order.dim1.filter('dim1')
872+ )}` ,
873+ measures : [ {
874+ name : 'count' ,
875+ type : 'count' ,
876+ } ] ,
877+ dimensions : [
878+ {
879+ name : 'dim0' ,
880+ sql : 'dim0' ,
881+ type : 'string'
882+ } ,
883+ {
884+ name : 'dim1' ,
885+ sql : 'dim1' ,
886+ type : 'string'
887+ }
888+ ]
889+ } ,
890+ ]
891+ } )
892+ ) ;
893+
894+ it ( 'inserts "or" filter' , async ( ) => {
895+ await compilers . compiler . compile ( ) ;
896+ const query = new BaseQuery ( compilers , {
897+ measures : [ 'Order.count' ] ,
898+ filters : [
899+ {
900+ or : [
901+ {
902+ member : 'Order.dim0' ,
903+ operator : 'equals' ,
904+ values : [ 'val0' ] ,
905+ } ,
906+ {
907+ member : 'Order.dim1' ,
908+ operator : 'equals' ,
909+ values : [ 'val1' ] ,
910+ } ,
911+ ]
912+ }
913+ ] ,
914+ } ) ;
915+ const cubeSQL = query . cubeSql ( 'Order' ) ;
916+ expect ( cubeSQL ) . toContain ( 'where (((dim0 = $0$) OR (dim1 = $1$)))' ) ;
917+ } ) ;
918+
919+ it ( 'inserts "and" filter' , async ( ) => {
920+ await compilers . compiler . compile ( ) ;
921+ const query = new BaseQuery ( compilers , {
922+ measures : [ 'Order.count' ] ,
923+ filters : [
924+ {
925+ and : [
926+ {
927+ member : 'Order.dim0' ,
928+ operator : 'equals' ,
929+ values : [ 'val0' ] ,
930+ } ,
931+ {
932+ member : 'Order.dim1' ,
933+ operator : 'equals' ,
934+ values : [ 'val1' ] ,
935+ } ,
936+ ]
937+ }
938+ ] ,
939+ } ) ;
940+ const cubeSQL = query . cubeSql ( 'Order' ) ;
941+ expect ( cubeSQL ) . toContain ( 'where (((dim0 = $0$) AND (dim1 = $1$)))' ) ;
942+ } ) ;
943+
944+ it ( 'inserts "or + and" filter' , async ( ) => {
945+ await compilers . compiler . compile ( ) ;
946+ const query = new BaseQuery ( compilers , {
947+ measures : [ 'Order.count' ] ,
948+ filters : [
949+ {
950+ or : [
951+ {
952+ and : [
953+ {
954+ member : 'Order.dim0' ,
955+ operator : 'equals' ,
956+ values : [ 'val0' ] ,
957+ } ,
958+ {
959+ member : 'Order.dim1' ,
960+ operator : 'equals' ,
961+ values : [ 'val1' ] ,
962+ }
963+ ]
964+ } ,
965+ {
966+ and : [
967+ {
968+ member : 'Order.dim0' ,
969+ operator : 'equals' ,
970+ values : [ 'another_val0' ] ,
971+ } ,
972+ {
973+ member : 'Order.dim1' ,
974+ operator : 'equals' ,
975+ values : [ 'another_val1' ] ,
976+ }
977+ ]
978+ }
979+ ]
980+ }
981+ ]
982+ } ) ;
983+ const cubeSQL = query . cubeSql ( 'Order' ) ;
984+ expect ( cubeSQL ) . toContain ( 'where ((((dim0 = $0$) AND (dim1 = $1$)) OR ((dim0 = $2$) AND (dim1 = $3$))))' ) ;
985+ } ) ;
986+ } ) ;
861987} ) ;
862988
863989describe ( 'Class unit tests' , ( ) => {
0 commit comments