diff --git a/executor.go b/executor.go index ae63759f8..15d6fb571 100644 --- a/executor.go +++ b/executor.go @@ -1295,7 +1295,10 @@ func (e *executor) executePercentile(ctx context.Context, qcx *Qcx, index string min, max := minVal.Val, maxVal.Val // estimate nth val, eg median when nth=0.5 for min < max { - possibleNthVal := (max + min) / 2 + // compute average without integer overflow, then correct for division of + // odd numbers by 2 + possibleNthVal := ((max / 2) + (min / 2)) + (((max % 2) + (min % 2)) / 2) + // possibleNthVal = (max + min) / 2 // get left count rangeCall.Args[fieldName] = &pql.Condition{ Op: pql.Token(pql.LT), diff --git a/executor_test.go b/executor_test.go index 2b37c36b2..9427914b2 100644 --- a/executor_test.go +++ b/executor_test.go @@ -6939,7 +6939,7 @@ func variousQueriesOnPercentiles(t *testing.T, c *test.Cluster) { possibleNthVal := int64(0) // bin search for min < max { - possibleNthVal = (max + min) / 2 + possibleNthVal = ((max / 2) + (min / 2)) + (((max % 2) + (min % 2)) / 2) leftCount, rightCount := int64(0), int64(0) for _, num := range nums { if num < possibleNthVal { diff --git a/lattice/.gitignore b/lattice/.gitignore new file mode 100644 index 000000000..a17dd714d --- /dev/null +++ b/lattice/.gitignore @@ -0,0 +1,16 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/lattice/src/App/QueryBuilder/QueryBuilder.tsx b/lattice/src/App/QueryBuilder/QueryBuilder.tsx index b8a048556..fcad11f97 100644 --- a/lattice/src/App/QueryBuilder/QueryBuilder.tsx +++ b/lattice/src/App/QueryBuilder/QueryBuilder.tsx @@ -104,10 +104,13 @@ export const QueryBuilder: FC = ({ useEffect(() => { setGroupByFilters( queriesList.filter( - (q) => q.table === selectedTable.name && q.operation === 'Extract' + (q) => + q.table === selectedTable.name && + q.operation === 'Extract' && + q.rowCalls.length > 0 ) ); - }, [selectedTable]); + }, [selectedTable, queriesList]); const getColumnsToShow = (cols?: { name: string; show: boolean }[]) => { let columns: string[] = [];