private FullQuery addRowTsArgs(FullQuery fullQuery, Iterable<Entry<byte[], Long>> rows) { for (Entry<byte[], Long> entry : rows) { fullQuery.withArgs(entry.getKey(), entry.getValue()); } return fullQuery; }
private FullQuery addCellTsArgs(FullQuery fullQuery, Collection<Entry<Cell, Long>> cells) { for (Entry<Cell, Long> entry : cells) { Cell cell = entry.getKey(); fullQuery.withArgs(cell.getRowName(), cell.getColumnName(), entry.getValue()); } return fullQuery; }
private FullQuery addCellArgs(FullQuery fullQuery, Iterable<Cell> cells) { for (Cell cell : cells) { fullQuery.withArgs(cell.getRowName(), cell.getColumnName()); } return fullQuery; }
@Override public FullQuery getRowsColumnRangeQuery( Map<byte[], BatchColumnRangeSelection> columnRangeSelectionsByRow, long ts) { List<String> subQueries = new ArrayList<>(columnRangeSelectionsByRow.size()); int totalArgs = 0; for (BatchColumnRangeSelection columnRangeSelection : columnRangeSelectionsByRow.values()) { totalArgs += 2 + ((columnRangeSelection.getStartCol().length > 0) ? 1 : 0) + ((columnRangeSelection.getEndCol().length > 0) ? 1 : 0); } List<Object> args = new ArrayList<>(totalArgs); for (Map.Entry<byte[], BatchColumnRangeSelection> entry : columnRangeSelectionsByRow.entrySet()) { FullQuery query = getRowsColumnRangeSubQuery(entry.getKey(), ts, entry.getValue()); subQueries.add(query.getQuery()); for (Object arg : query.getArgs()) { args.add(arg); } } String query = Joiner.on(") UNION ALL (").appendTo(new StringBuilder("("), subQueries).append(")") .append(" ORDER BY row_name ASC, col_name ASC").toString(); return new FullQuery(query).withArgs(args); }
private FullQuery addOrdering(Order order, FullQuery query) { return new FullQuery(query.getQuery() + order).withArgs(Arrays.asList(query.getArgs())); }
@Override public FullQuery getRangeQuery(RangeRequest range, long ts, int maxRows) { List<String> bounds = Lists.newArrayListWithCapacity(2); List<Object> args = Lists.newArrayListWithCapacity(2); byte[] start = range.getStartInclusive(); byte[] end = range.getEndExclusive(); if (start.length > 0) { bounds.add(range.isReverse() ? "m.row_name <= ?" : "m.row_name >= ?"); args.add(start); } if (end.length > 0) { bounds.add(range.isReverse() ? "m.row_name > ?" : "m.row_name < ?"); args.add(end); } String query = " /* GET_RANGE_ROWS (" + tableName + ") */ " + " SELECT DISTINCT m.row_name " + " FROM " + prefixedTableName() + " m " + (bounds.isEmpty() ? "" : " WHERE " + Joiner.on(" AND ").join(bounds)) + " ORDER BY m.row_name " + (range.isReverse() ? "DESC" : "ASC") + " LIMIT " + maxRows; return new FullQuery(query).withArgs(args); }
@Override public FullQuery getAllRowQuery(byte[] row, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ROW (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, m.ts" + (includeValue ? ", m.val " : " ") + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name = ? " + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))); FullQuery fullQuery = new FullQuery(query).withArgs(row, ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getAllCellQuery(Cell cell, long ts, boolean includeValue) { String query = " /* GET_ALL_CELL (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, m.ts" + (includeValue ? ", m.val " : " ") + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name = ? " + " AND m.col_name = ? " + " AND m.ts < ? "; return new FullQuery(query).withArgs(cell.getRowName(), cell.getColumnName(), ts); }
@Override public FullQuery getAllRowsQuery(Iterable<byte[]> rows, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ROWS (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, m.ts" + (includeValue ? ", m.val " : " ") + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name IN " + numParams(Iterables.size(rows)) + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))); FullQuery fullQuery = new FullQuery(query).withArgs(rows).withArg(ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getLatestRowQuery(byte[] row, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ROW_INNER (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name = ? " + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))) + " GROUP BY m.row_name, m.col_name"; query = wrapQueryWithIncludeValue("GET_LATEST_ROW", query, includeValue); FullQuery fullQuery = new FullQuery(query).withArgs(row, ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getLatestRowsQuery(Iterable<byte[]> rows, long ts, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ROWS_INNER (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name IN " + numParams(Iterables.size(rows)) + " AND m.ts < ? " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))) + " GROUP BY m.row_name, m.col_name "; query = wrapQueryWithIncludeValue("GET_LATEST_ROW", query, includeValue); FullQuery fullQuery = new FullQuery(query).withArgs(rows).withArg(ts); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getAllCellQuery(Cell cell, long ts, boolean includeValue) { String query = " /* GET_ALL_ONE_CELL (" + tableName + ") */ " + " SELECT" + " /*+ INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, m.ts" + getValueSubselect("m", includeValue) + " FROM " + tableName + " m " + " WHERE m.row_name = ? " + " AND m.col_name = ? " + " AND m.ts < ? "; return new FullQuery(query).withArgs(cell.getRowName(), cell.getColumnName(), ts); }
@Override public FullQuery getAllCellsQuery(Iterable<Cell> cells, long ts, boolean includeValue) { String query = " /* GET_ALL_CELLS_SINGLE_BOUND (" + tableName + ") */ " + " SELECT" + " /*+ USE_NL(t m) CARDINALITY(t 1) CARDINALITY(m 10) INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, m.ts" + getValueSubselect("m", includeValue) + " FROM " + tableName + " m, TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE)) t " + " WHERE m.row_name = t.row_name " + " AND m.col_name = t.col_name " + " AND m.ts < ? "; return new FullQuery(query).withArgs(cellsToOracleArray(cells), ts); }
@Override public FullQuery getLatestCellQuery(Cell cell, long ts, boolean includeValue) { String query = " /* GET_LATEST_CELL_INNER (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name = ? " + " AND m.col_name = ? " + " AND m.ts < ? " + " GROUP BY m.row_name, m.col_name " + " LIMIT 1"; query = wrapQueryWithIncludeValue("GET_LATEST_CELL", query, includeValue); return new FullQuery(query).withArgs(cell.getRowName(), cell.getColumnName(), ts); }
@Override public FullQuery getLatestCellQuery(Cell cell, long ts, boolean includeValue) { String query = " /* GET_LATEST_ONE_CELLS_INNER (" + tableName + ") */ " + " SELECT " + " /*+ INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + tableName + " m " + " WHERE m.row_name = ? " + " AND m.col_name = ? " + " AND m.ts < ? " + " GROUP BY m.row_name, m.col_name"; query = wrapQueryWithIncludeValue("GET_LATEST_ONE_CELL", query, includeValue); return new FullQuery(query).withArgs(cell.getRowName(), cell.getColumnName(), ts); }
@Override public FullQuery getAllRowsQuery(Collection<Entry<byte[], Long>> rows, ColumnSelection columns, boolean includeValue) { String query = " /* GET_ALL_ROWS (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, m.ts" + (includeValue ? ", m.val " : " ") + " FROM " + prefixedTableName() + " m," + " (VALUES " + groupOfNumParams(2, rows.size()) + ") t(row_name, ts) " + " WHERE m.row_name = t.row_name " + " AND m.ts < t.ts " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))); FullQuery fullQuery = addRowTsArgs(new FullQuery(query), rows); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getLatestCellsQuery(Iterable<Cell> cells, long ts, boolean includeValue) { String query = " /* GET_LATEST_CELLS_SINGLE_BOUND_INNER (" + tableName + ") */ " + " SELECT" + " /*+ USE_NL(t m) CARDINALITY(t 1) CARDINALITY(m 10) INDEX(m " + PrimaryKeyConstraintNames.get(tableName) + ") */ " + " m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + tableName + " m, TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE)) t " + " WHERE m.row_name = t.row_name " + " AND m.col_name = t.col_name " + " AND m.ts < ? " + " GROUP BY m.row_name, m.col_name"; query = wrapQueryWithIncludeValue("GET_LATEST_CELLS_SINGLE_BOUND", query, includeValue); return new FullQuery(query).withArgs(cellsToOracleArray(cells), ts); }
@Override public FullQuery getLatestRowsQuery(Collection<Entry<byte[], Long>> rows, ColumnSelection columns, boolean includeValue) { String query = " /* GET_LATEST_ROWS_INNER (" + tableName + ") */ " + " SELECT m.row_name, m.col_name, max(m.ts) as ts " + " FROM " + prefixedTableName() + " m," + " (VALUES " + groupOfNumParams(2, rows.size()) + ") t(row_name, ts) " + " WHERE m.row_name = t.row_name " + " AND m.ts < t.ts " + (columns.allColumnsSelected() ? "" : " AND m.col_name IN " + numParams(Iterables.size(columns.getSelectedColumns()))) + " GROUP BY m.row_name, m.col_name "; query = wrapQueryWithIncludeValue("GET_LATEST_ROW", query, includeValue); FullQuery fullQuery = addRowTsArgs(new FullQuery(query), rows); return columns.allColumnsSelected() ? fullQuery : fullQuery.withArgs(columns.getSelectedColumns()); }
@Override public FullQuery getRowsColumnRangeCountsQuery( Iterable<byte[]> rows, long ts, ColumnRangeSelection columnRangeSelection) { String query = " /* GET_ROWS_COLUMN_RANGE_COUNT(" + tableName + ") */" + " SELECT m.row_name, COUNT(m.col_name) AS column_count " + " FROM " + prefixedTableName() + " m " + " WHERE m.row_name IN " + numParams(Iterables.size(rows)) + " AND m.ts < ? " + (columnRangeSelection.getStartCol().length > 0 ? " AND m.col_name >= ?" : "") + (columnRangeSelection.getEndCol().length > 0 ? " AND m.col_name < ?" : "") + " GROUP BY m.row_name"; FullQuery fullQuery = new FullQuery(query).withArgs(rows).withArg(ts); if (columnRangeSelection.getStartCol().length > 0) { fullQuery = fullQuery.withArg(columnRangeSelection.getStartCol()); } if (columnRangeSelection.getEndCol().length > 0) { fullQuery = fullQuery.withArg(columnRangeSelection.getEndCol()); } return fullQuery; }
@Override public FullQuery getRowsColumnRangeCountsQuery( Iterable<byte[]> rows, long ts, ColumnRangeSelection columnRangeSelection) { String query = " /* GET_ROWS_COLUMN_RANGE_COUNT(" + tableName + ") */" + " SELECT m.row_name, COUNT(m.col_name) AS column_count " + " FROM " + tableName + " m, TABLE(CAST(? AS " + structArrayPrefix() + "CELL_TS_TABLE)) t " + " WHERE m.row_name = t.row_name " + " AND m.ts < ? " + (columnRangeSelection.getStartCol().length > 0 ? " AND m.col_name >= ?" : "") + (columnRangeSelection.getEndCol().length > 0 ? " AND m.col_name < ?" : "") + " GROUP BY m.row_name"; FullQuery fullQuery = new FullQuery(query).withArgs(rowsToOracleArray(rows), ts); if (columnRangeSelection.getStartCol().length > 0) { fullQuery = fullQuery.withArg(columnRangeSelection.getStartCol()); } if (columnRangeSelection.getEndCol().length > 0) { fullQuery = fullQuery.withArg(columnRangeSelection.getEndCol()); } return fullQuery; }