From bb3a9440f724f287f5720260752212e544fea2e2 Mon Sep 17 00:00:00 2001 From: Colin Dellow Date: Sun, 4 Mar 2018 21:05:26 -0500 Subject: [PATCH] Add query test framework, fix xFilter --- parquet/parquet.cc | 23 +--- parquet/parquet_cursor.cc | 40 ++++--- parquet/parquet_cursor.h | 2 + tests/queries/001-table-scan-1-rowgroup.sql | 103 ++++++++++++++++++ tests/queries/002-table-scan-10-rowgroups.sql | 103 ++++++++++++++++++ tests/queries/003-cross-join-count.sql | 3 + tests/test-all | 1 + tests/test-queries | 41 +++++++ 8 files changed, 284 insertions(+), 32 deletions(-) create mode 100644 tests/queries/001-table-scan-1-rowgroup.sql create mode 100644 tests/queries/002-table-scan-10-rowgroups.sql create mode 100644 tests/queries/003-cross-join-count.sql create mode 100755 tests/test-queries diff --git a/parquet/parquet.cc b/parquet/parquet.cc index 4b2eea9..c854a0d 100644 --- a/parquet/parquet.cc +++ b/parquet/parquet.cc @@ -121,6 +121,7 @@ static int parquetCreate( */ static int parquetClose(sqlite3_vtab_cursor *cur){ sqlite3_vtab_cursor_parquet* p = (sqlite3_vtab_cursor_parquet*)cur; + p->cursor->close(); delete p->cursor; sqlite3_free(cur); return SQLITE_OK; @@ -249,28 +250,14 @@ static int parquetEof(sqlite3_vtab_cursor *cur){ ** the beginning. */ static int parquetFilter( - sqlite3_vtab_cursor *pVtabCursor, + sqlite3_vtab_cursor *cur, int idxNum, const char *idxStr, int argc, sqlite3_value **argv ){ printf("xFilter\n"); - //sqlite3_vtab_cursor_parquet *pCur = (sqlite3_vtab_cursor_parquet*)pVtabCursor; - //sqlite3_vtab_parquet *pTab = (sqlite3_vtab_parquet*)pVtabCursor->pVtab; - - /* - pCur->iRowid = 0; - if( pCur->rdr.in==0 ){ - assert( pCur->rdr.zIn==pTab->zData ); - assert( pTab->iStart>=0 ); - assert( (size_t)pTab->iStart<=pCur->rdr.nIn ); - pCur->rdr.iIn = pTab->iStart; - }else{ - fseek(pCur->rdr.in, pTab->iStart, SEEK_SET); - pCur->rdr.iIn = 0; - pCur->rdr.nIn = 0; - } - */ - return parquetNext(pVtabCursor); + ParquetCursor* cursor = ((sqlite3_vtab_cursor_parquet*)cur)->cursor; + cursor->reset(); + return parquetNext(cur); } /* diff --git a/parquet/parquet_cursor.cc b/parquet/parquet_cursor.cc index 906ad91..5aaf1b1 100644 --- a/parquet/parquet_cursor.cc +++ b/parquet/parquet_cursor.cc @@ -2,27 +2,17 @@ ParquetCursor::ParquetCursor(ParquetTable* table) { this->table = table; - this->rowId = -1; - // TODO: consider having a long lived handle in ParquetTable that can be borrowed - // without incurring the cost of opening the file from scratch twice - this->reader = parquet::ParquetFileReader::OpenFile(this->table->file.data()); - - this->rowGroupId = -1; - // TODO: handle the case where rowgroups have disjoint schemas? - // TODO: or at least, fail fast if detected - this->rowsLeftInRowGroup = 0; - - this->numRows = reader->metadata()->num_rows(); - this->numRowGroups = reader->metadata()->num_row_groups(); + reader = NULL; + reset(); } bool ParquetCursor::nextRowGroup() { // TODO: skip row groups that cannot satisfy the constraints - if((this->rowGroupId + 1) >= this->numRowGroups) + if((rowGroupId + 1) >= numRowGroups) return false; rowGroupId++; - rowGroupMetadata = this->reader->metadata()->RowGroup(0); + rowGroupMetadata = reader->metadata()->RowGroup(0); rowsLeftInRowGroup = rowGroupMetadata->num_rows(); rowGroup = reader->RowGroup(rowGroupId); for(unsigned int i = 0; i < scanners.size(); i++) @@ -235,3 +225,25 @@ parquet::Type::type ParquetCursor::getPhysicalType(int col) { parquet::LogicalType::type ParquetCursor::getLogicalType(int col) { return logicalTypes[col]; } + +void ParquetCursor::close() { + if(reader != NULL) { + reader->Close(); + } +} + +void ParquetCursor::reset() { + close(); + rowId = -1; + // TODO: consider having a long lived handle in ParquetTable that can be borrowed + // without incurring the cost of opening the file from scratch twice + reader = parquet::ParquetFileReader::OpenFile(table->file.data()); + + rowGroupId = -1; + // TODO: handle the case where rowgroups have disjoint schemas? + // TODO: or at least, fail fast if detected + rowsLeftInRowGroup = 0; + + numRows = reader->metadata()->num_rows(); + numRowGroups = reader->metadata()->num_row_groups(); +} diff --git a/parquet/parquet_cursor.h b/parquet/parquet_cursor.h index 16f5128..88c0a5e 100644 --- a/parquet/parquet_cursor.h +++ b/parquet/parquet_cursor.h @@ -32,6 +32,8 @@ public: ParquetCursor(ParquetTable* table); int getRowId(); void next(); + void close(); + void reset(); bool eof(); void ensureColumn(int col); diff --git a/tests/queries/001-table-scan-1-rowgroup.sql b/tests/queries/001-table-scan-1-rowgroup.sql new file mode 100644 index 0000000..a150a5b --- /dev/null +++ b/tests/queries/001-table-scan-1-rowgroup.sql @@ -0,0 +1,103 @@ +100-rows-1.parquet +select * from test; +1|50|5000|50000000|50000000000|490665600000|100.0|0|000|| +0|49|4900|49000000|49000000000|490752000000|50.0|1|001|| +1|48|4800|48000000|48000000000|490838400000|33.3333333333333|2|002|| +0|47|4700|47000000|47000000000|490924800000|25.0|3|003|| +1|46|4600|46000000|46000000000|491011200000|20.0|4|004|| +0|45|4500|45000000|45000000000|491097600000|16.6666666666667|5|005|| +1|44|4400|44000000|44000000000|491184000000|14.2857142857143|6|006|| +0|43|4300|43000000|43000000000|491270400000|12.5|7|007|| +1|42|4200|42000000|42000000000|491356800000|11.1111111111111|8|008|| +0|41|4100|41000000|41000000000|491443200000|10.0|9|009|| +1|40|4000|40000000|40000000000|491529600000|9.09090909090909|10|010|| + +0|39|3900|39000000|39000000000|491616000000|8.33333333333333|11|011|| +1|38|3800|38000000|38000000000|491702400000|7.69230769230769|12|012|| +0|37|3700|37000000|37000000000|491788800000|7.14285714285714|13|013|| +1|36|3600|36000000|36000000000|491875200000|6.66666666666667|14|014|| +0|35|3500|35000000|35000000000|491961600000|6.25|15|015|| +1|34|3400|34000000|34000000000|492048000000|5.88235294117647|16|016|| +0|33|3300|33000000|33000000000|492134400000|5.55555555555556|17|017|| +1|32|3200|32000000|32000000000|492220800000|5.26315789473684|18|018|| +0|31|3100|31000000|31000000000|492307200000|5.0|19|019|| +1|30|3000|30000000|30000000000|492393600000|4.76190476190476|20|020|| +0|29|2900|29000000|29000000000|492480000000|4.54545454545455|21|021|| +1|28|2800|28000000|28000000000|492566400000|4.34782608695652|22|022|| +0|27|2700|27000000|27000000000|492652800000|4.16666666666667|23|023|| +1|26|2600|26000000|26000000000|492739200000|4.0|24|024|| +0|25|2500|25000000|25000000000|492825600000|3.84615384615385|25|025|| +1|24|2400|24000000|24000000000|492912000000|3.7037037037037|26|026|| +0|23|2300|23000000|23000000000|492998400000|3.57142857142857|27|027|| +1|22|2200|22000000|22000000000|493084800000|3.44827586206897|28|028|| +0|21|2100|21000000|21000000000|493171200000|3.33333333333333|29|029|| +1|20|2000|20000000|20000000000|493257600000|3.2258064516129|30|030|| +0|19|1900|19000000|19000000000|493344000000|3.125|31|031|| +1|18|1800|18000000|18000000000|493430400000|3.03030303030303|32|032|| +0|17|1700|17000000|17000000000|493516800000|2.94117647058824|33|033||! +1|16|1600|16000000|16000000000|493603200000|2.85714285714286|34|034||" +0|15|1500|15000000|15000000000|493689600000|2.77777777777778|35|035||# +1|14|1400|14000000|14000000000|493776000000|2.7027027027027|36|036||$ +0|13|1300|13000000|13000000000|493862400000|2.63157894736842|37|037||% +1|12|1200|12000000|12000000000|493948800000|2.56410256410256|38|038||& +0|11|1100|11000000|11000000000|494035200000|2.5|39|039||' +1|10|1000|10000000|10000000000|494121600000|2.4390243902439|40|040||( +0|9|900|9000000|9000000000|494208000000|2.38095238095238|41|041||) +1|8|800|8000000|8000000000|494294400000|2.32558139534884|42|042||* +0|7|700|7000000|7000000000|494380800000|2.27272727272727|43|043||+ +1|6|600|6000000|6000000000|494467200000|2.22222222222222|44|044||, +0|5|500|5000000|5000000000|494553600000|2.17391304347826|45|045||- +1|4|400|4000000|4000000000|494640000000|2.12765957446809|46|046||. +0|3|300|3000000|3000000000|494726400000|2.08333333333333|47|047||/ +1|2|200|2000000|2000000000|494812800000|2.04081632653061|48|048||0 +0|1|100|1000000|1000000000|494899200000|2.0|49|049||1 +1|0|0|0|0|494985600000|1.96078431372549|50|050||2 +0|-1|-100|-1000000|-1000000000|495072000000|1.92307692307692|51|051||3 +1|-2|-200|-2000000|-2000000000|495158400000|1.88679245283019|52|052||4 +0|-3|-300|-3000000|-3000000000|495244800000|1.85185185185185|53|053||5 +1|-4|-400|-4000000|-4000000000|495331200000|1.81818181818182|54|054||6 +0|-5|-500|-5000000|-5000000000|495417600000|1.78571428571429|55|055||7 +1|-6|-600|-6000000|-6000000000|495504000000|1.75438596491228|56|056||8 +0|-7|-700|-7000000|-7000000000|495590400000|1.72413793103448|57|057||9 +1|-8|-800|-8000000|-8000000000|495676800000|1.69491525423729|58|058||: +0|-9|-900|-9000000|-9000000000|495763200000|1.66666666666667|59|059||; +1|-10|-1000|-10000000|-10000000000|495849600000|1.63934426229508|60|060||< +0|-11|-1100|-11000000|-11000000000|495936000000|1.61290322580645|61|061||= +1|-12|-1200|-12000000|-12000000000|496022400000|1.58730158730159|62|062||> +0|-13|-1300|-13000000|-13000000000|496108800000|1.5625|63|063||? +1|-14|-1400|-14000000|-14000000000|496195200000|1.53846153846154|64|064||@ +0|-15|-1500|-15000000|-15000000000|496281600000|1.51515151515152|65|065||A +1|-16|-1600|-16000000|-16000000000|496368000000|1.49253731343284|66|066||B +0|-17|-1700|-17000000|-17000000000|496454400000|1.47058823529412|67|067||C +1|-18|-1800|-18000000|-18000000000|496540800000|1.44927536231884|68|068||D +0|-19|-1900|-19000000|-19000000000|496627200000|1.42857142857143|69|069||E +1|-20|-2000|-20000000|-20000000000|496713600000|1.40845070422535|70|070||F +0|-21|-2100|-21000000|-21000000000|496800000000|1.38888888888889|71|071||G +1|-22|-2200|-22000000|-22000000000|496886400000|1.36986301369863|72|072||H +0|-23|-2300|-23000000|-23000000000|496972800000|1.35135135135135|73|073||I +1|-24|-2400|-24000000|-24000000000|497059200000|1.33333333333333|74|074||J +0|-25|-2500|-25000000|-25000000000|497145600000|1.31578947368421|75|075||K +1|-26|-2600|-26000000|-26000000000|497232000000|1.2987012987013|76|076||L +0|-27|-2700|-27000000|-27000000000|497318400000|1.28205128205128|77|077||M +1|-28|-2800|-28000000|-28000000000|497404800000|1.26582278481013|78|078||N +0|-29|-2900|-29000000|-29000000000|497491200000|1.25|79|079||O +1|-30|-3000|-30000000|-30000000000|497577600000|1.23456790123457|80|080||P +0|-31|-3100|-31000000|-31000000000|497664000000|1.21951219512195|81|081||Q +1|-32|-3200|-32000000|-32000000000|497750400000|1.20481927710843|82|082||R +0|-33|-3300|-33000000|-33000000000|497836800000|1.19047619047619|83|083||S +1|-34|-3400|-34000000|-34000000000|497923200000|1.17647058823529|84|084||T +0|-35|-3500|-35000000|-35000000000|498009600000|1.16279069767442|85|085||U +1|-36|-3600|-36000000|-36000000000|498096000000|1.14942528735632|86|086||V +0|-37|-3700|-37000000|-37000000000|498182400000|1.13636363636364|87|087||W +1|-38|-3800|-38000000|-38000000000|498268800000|1.12359550561798|88|088||X +0|-39|-3900|-39000000|-39000000000|498355200000|1.11111111111111|89|089||Y +1|-40|-4000|-40000000|-40000000000|498441600000|1.0989010989011|90|090||Z +0|-41|-4100|-41000000|-41000000000|498528000000|1.08695652173913|91|091||[ +1|-42|-4200|-42000000|-42000000000|498614400000|1.0752688172043|92|092||\ +0|-43|-4300|-43000000|-43000000000|498700800000|1.06382978723404|93|093||] +1|-44|-4400|-44000000|-44000000000|498787200000|1.05263157894737|94|094||^ +0|-45|-4500|-45000000|-45000000000|498873600000|1.04166666666667|95|095||_ +1|-46|-4600|-46000000|-46000000000|498960000000|1.03092783505155|96|096||` +0|-47|-4700|-47000000|-47000000000|499046400000|1.02040816326531|97|097||a +1|-48|-4800|-48000000|-48000000000|499132800000|1.01010101010101|98|098||b +0|-49|-4900|-49000000|-49000000000|499219200000|1.0|99|099||c diff --git a/tests/queries/002-table-scan-10-rowgroups.sql b/tests/queries/002-table-scan-10-rowgroups.sql new file mode 100644 index 0000000..5061a30 --- /dev/null +++ b/tests/queries/002-table-scan-10-rowgroups.sql @@ -0,0 +1,103 @@ +100-rows-10.parquet +select * from test; +1|50|5000|50000000|50000000000|490665600000|100.0|0|000|| +0|49|4900|49000000|49000000000|490752000000|50.0|1|001|| +1|48|4800|48000000|48000000000|490838400000|33.3333333333333|2|002|| +0|47|4700|47000000|47000000000|490924800000|25.0|3|003|| +1|46|4600|46000000|46000000000|491011200000|20.0|4|004|| +0|45|4500|45000000|45000000000|491097600000|16.6666666666667|5|005|| +1|44|4400|44000000|44000000000|491184000000|14.2857142857143|6|006|| +0|43|4300|43000000|43000000000|491270400000|12.5|7|007|| +1|42|4200|42000000|42000000000|491356800000|11.1111111111111|8|008|| +0|41|4100|41000000|41000000000|491443200000|10.0|9|009|| +1|40|4000|40000000|40000000000|491529600000|9.09090909090909|10|010|| + +0|39|3900|39000000|39000000000|491616000000|8.33333333333333|11|011|| +1|38|3800|38000000|38000000000|491702400000|7.69230769230769|12|012|| +0|37|3700|37000000|37000000000|491788800000|7.14285714285714|13|013|| +1|36|3600|36000000|36000000000|491875200000|6.66666666666667|14|014|| +0|35|3500|35000000|35000000000|491961600000|6.25|15|015|| +1|34|3400|34000000|34000000000|492048000000|5.88235294117647|16|016|| +0|33|3300|33000000|33000000000|492134400000|5.55555555555556|17|017|| +1|32|3200|32000000|32000000000|492220800000|5.26315789473684|18|018|| +0|31|3100|31000000|31000000000|492307200000|5.0|19|019|| +1|30|3000|30000000|30000000000|492393600000|4.76190476190476|20|020|| +0|29|2900|29000000|29000000000|492480000000|4.54545454545455|21|021|| +1|28|2800|28000000|28000000000|492566400000|4.34782608695652|22|022|| +0|27|2700|27000000|27000000000|492652800000|4.16666666666667|23|023|| +1|26|2600|26000000|26000000000|492739200000|4.0|24|024|| +0|25|2500|25000000|25000000000|492825600000|3.84615384615385|25|025|| +1|24|2400|24000000|24000000000|492912000000|3.7037037037037|26|026|| +0|23|2300|23000000|23000000000|492998400000|3.57142857142857|27|027|| +1|22|2200|22000000|22000000000|493084800000|3.44827586206897|28|028|| +0|21|2100|21000000|21000000000|493171200000|3.33333333333333|29|029|| +1|20|2000|20000000|20000000000|493257600000|3.2258064516129|30|030|| +0|19|1900|19000000|19000000000|493344000000|3.125|31|031|| +1|18|1800|18000000|18000000000|493430400000|3.03030303030303|32|032|| +0|17|1700|17000000|17000000000|493516800000|2.94117647058824|33|033||! +1|16|1600|16000000|16000000000|493603200000|2.85714285714286|34|034||" +0|15|1500|15000000|15000000000|493689600000|2.77777777777778|35|035||# +1|14|1400|14000000|14000000000|493776000000|2.7027027027027|36|036||$ +0|13|1300|13000000|13000000000|493862400000|2.63157894736842|37|037||% +1|12|1200|12000000|12000000000|493948800000|2.56410256410256|38|038||& +0|11|1100|11000000|11000000000|494035200000|2.5|39|039||' +1|10|1000|10000000|10000000000|494121600000|2.4390243902439|40|040||( +0|9|900|9000000|9000000000|494208000000|2.38095238095238|41|041||) +1|8|800|8000000|8000000000|494294400000|2.32558139534884|42|042||* +0|7|700|7000000|7000000000|494380800000|2.27272727272727|43|043||+ +1|6|600|6000000|6000000000|494467200000|2.22222222222222|44|044||, +0|5|500|5000000|5000000000|494553600000|2.17391304347826|45|045||- +1|4|400|4000000|4000000000|494640000000|2.12765957446809|46|046||. +0|3|300|3000000|3000000000|494726400000|2.08333333333333|47|047||/ +1|2|200|2000000|2000000000|494812800000|2.04081632653061|48|048||0 +0|1|100|1000000|1000000000|494899200000|2.0|49|049||1 +1|0|0|0|0|494985600000|1.96078431372549|50|050||2 +0|-1|-100|-1000000|-1000000000|495072000000|1.92307692307692|51|051||3 +1|-2|-200|-2000000|-2000000000|495158400000|1.88679245283019|52|052||4 +0|-3|-300|-3000000|-3000000000|495244800000|1.85185185185185|53|053||5 +1|-4|-400|-4000000|-4000000000|495331200000|1.81818181818182|54|054||6 +0|-5|-500|-5000000|-5000000000|495417600000|1.78571428571429|55|055||7 +1|-6|-600|-6000000|-6000000000|495504000000|1.75438596491228|56|056||8 +0|-7|-700|-7000000|-7000000000|495590400000|1.72413793103448|57|057||9 +1|-8|-800|-8000000|-8000000000|495676800000|1.69491525423729|58|058||: +0|-9|-900|-9000000|-9000000000|495763200000|1.66666666666667|59|059||; +1|-10|-1000|-10000000|-10000000000|495849600000|1.63934426229508|60|060||< +0|-11|-1100|-11000000|-11000000000|495936000000|1.61290322580645|61|061||= +1|-12|-1200|-12000000|-12000000000|496022400000|1.58730158730159|62|062||> +0|-13|-1300|-13000000|-13000000000|496108800000|1.5625|63|063||? +1|-14|-1400|-14000000|-14000000000|496195200000|1.53846153846154|64|064||@ +0|-15|-1500|-15000000|-15000000000|496281600000|1.51515151515152|65|065||A +1|-16|-1600|-16000000|-16000000000|496368000000|1.49253731343284|66|066||B +0|-17|-1700|-17000000|-17000000000|496454400000|1.47058823529412|67|067||C +1|-18|-1800|-18000000|-18000000000|496540800000|1.44927536231884|68|068||D +0|-19|-1900|-19000000|-19000000000|496627200000|1.42857142857143|69|069||E +1|-20|-2000|-20000000|-20000000000|496713600000|1.40845070422535|70|070||F +0|-21|-2100|-21000000|-21000000000|496800000000|1.38888888888889|71|071||G +1|-22|-2200|-22000000|-22000000000|496886400000|1.36986301369863|72|072||H +0|-23|-2300|-23000000|-23000000000|496972800000|1.35135135135135|73|073||I +1|-24|-2400|-24000000|-24000000000|497059200000|1.33333333333333|74|074||J +0|-25|-2500|-25000000|-25000000000|497145600000|1.31578947368421|75|075||K +1|-26|-2600|-26000000|-26000000000|497232000000|1.2987012987013|76|076||L +0|-27|-2700|-27000000|-27000000000|497318400000|1.28205128205128|77|077||M +1|-28|-2800|-28000000|-28000000000|497404800000|1.26582278481013|78|078||N +0|-29|-2900|-29000000|-29000000000|497491200000|1.25|79|079||O +1|-30|-3000|-30000000|-30000000000|497577600000|1.23456790123457|80|080||P +0|-31|-3100|-31000000|-31000000000|497664000000|1.21951219512195|81|081||Q +1|-32|-3200|-32000000|-32000000000|497750400000|1.20481927710843|82|082||R +0|-33|-3300|-33000000|-33000000000|497836800000|1.19047619047619|83|083||S +1|-34|-3400|-34000000|-34000000000|497923200000|1.17647058823529|84|084||T +0|-35|-3500|-35000000|-35000000000|498009600000|1.16279069767442|85|085||U +1|-36|-3600|-36000000|-36000000000|498096000000|1.14942528735632|86|086||V +0|-37|-3700|-37000000|-37000000000|498182400000|1.13636363636364|87|087||W +1|-38|-3800|-38000000|-38000000000|498268800000|1.12359550561798|88|088||X +0|-39|-3900|-39000000|-39000000000|498355200000|1.11111111111111|89|089||Y +1|-40|-4000|-40000000|-40000000000|498441600000|1.0989010989011|90|090||Z +0|-41|-4100|-41000000|-41000000000|498528000000|1.08695652173913|91|091||[ +1|-42|-4200|-42000000|-42000000000|498614400000|1.0752688172043|92|092||\ +0|-43|-4300|-43000000|-43000000000|498700800000|1.06382978723404|93|093||] +1|-44|-4400|-44000000|-44000000000|498787200000|1.05263157894737|94|094||^ +0|-45|-4500|-45000000|-45000000000|498873600000|1.04166666666667|95|095||_ +1|-46|-4600|-46000000|-46000000000|498960000000|1.03092783505155|96|096||` +0|-47|-4700|-47000000|-47000000000|499046400000|1.02040816326531|97|097||a +1|-48|-4800|-48000000|-48000000000|499132800000|1.01010101010101|98|098||b +0|-49|-4900|-49000000|-49000000000|499219200000|1.0|99|099||c diff --git a/tests/queries/003-cross-join-count.sql b/tests/queries/003-cross-join-count.sql new file mode 100644 index 0000000..536f1bf --- /dev/null +++ b/tests/queries/003-cross-join-count.sql @@ -0,0 +1,3 @@ +100-rows-10.parquet +select count(*) from (select * from test t1, test t2); +10000 diff --git a/tests/test-all b/tests/test-all index 5e50d4f..11d0f91 100755 --- a/tests/test-all +++ b/tests/test-all @@ -6,3 +6,4 @@ here=$(dirname "${BASH_SOURCE[0]}") set -x "$here"/test-unsupported "$here"/test-supported +"$here"/test-queries diff --git a/tests/test-queries b/tests/test-queries new file mode 100755 index 0000000..7c7c994 --- /dev/null +++ b/tests/test-queries @@ -0,0 +1,41 @@ +#!/bin/bash +set -euo pipefail + +# For each files in tests/queries/*, mount that parquet file, run the query, and compare +# its output. + +run_query() { + file=${1:?must provide testcase file} + parquet_file=${2:?must provide parquet file to load} + query=${3:?must provide query to run} + basename=$(basename "$file") + cat < /dev/null 2> testcase-err.txt; then + echo "...FAILED; check testcase-{out,err}.txt" >&2 + exit 1 + fi + + diff testcase-out.txt <(echo "$results") + done < <(echo "$queries") +} + +main "$@"