public byte[] getStartCol() { return columnRangeSelection.getStartCol(); }
@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; }
@Override protected FullQuery getRowsColumnRangeFullyLoadedRowsSubQuery( List<byte[]> rows, long ts, ColumnRangeSelection columnRangeSelection) { String query = " /* GET_ROWS_COLUMN_RANGE_FULLY_LOADED_ROWS (" + tableName + ") */ " + "SELECT * FROM ( SELECT 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.ts < ? " + (columnRangeSelection.getStartCol().length > 0 ? " AND m.col_name >= ?" : "") + (columnRangeSelection.getEndCol().length > 0 ? " AND m.col_name < ?" : "") + " GROUP BY m.row_name, m.col_name" + " ORDER BY m.row_name ASC, m.col_name ASC )"; String wrappedQuery = wrapQueryWithIncludeValue("GET_ROWS_COLUMN_RANGE_FULLY_LOADED_ROWS", query, true); FullQuery fullQuery = new FullQuery(wrappedQuery).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; }
@Override protected FullQuery getRowsColumnRangeFullyLoadedRowsSubQuery( List<byte[]> rows, long ts, ColumnRangeSelection columnRangeSelection) { String query = " /* GET_ROWS_COLUMN_RANGE_FULLY_LOADED_ROW (" + 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 < ? " + (columnRangeSelection.getStartCol().length > 0 ? " AND m.col_name >= ?" : "") + (columnRangeSelection.getEndCol().length > 0 ? " AND m.col_name < ?" : "") + " GROUP BY m.row_name, m.col_name" + " ORDER BY m.row_name ASC, m.col_name ASC"; String wrappedQuery = wrapQueryWithIncludeValue("GET_ROWS_COLUMN_RANGE_FULLY_LOADED_ROW", query, true); FullQuery fullQuery = new FullQuery(wrappedQuery).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; } }
public static Arg<ColumnRangeSelection> columnRangeSelection(TableReference tableReference, ColumnRangeSelection columnRangeSelection) { String startCol = PtBytes.toString(columnRangeSelection.getStartCol()); String endCol = PtBytes.toString(columnRangeSelection.getEndCol()); return getArg("columnRangeSelection", columnRangeSelection, logArbitrator.isColumnNameSafe(tableReference, startCol) && logArbitrator.isColumnNameSafe(tableReference, endCol)); }
private RowColumnRangeIterator getColumnRangeForSingleRow(ConcurrentSkipListMap<Key, byte[]> table, byte[] row, ColumnRangeSelection columnRangeSelection, long timestamp) { Cell rowBegin; if (columnRangeSelection.getStartCol().length > 0) { rowBegin = Cell.create(row, columnRangeSelection.getStartCol()); } else { rowBegin = Cells.createSmallestCellForRow(row); } // Inclusive last cell. Cell rowEnd; if (columnRangeSelection.getEndCol().length > 0) { rowEnd = Cell.create(row, RangeRequests.previousLexicographicName(columnRangeSelection.getEndCol())); } else { rowEnd = Cells.createLargestCellForRow(row); } PeekingIterator<Entry<Key, byte[]>> entries = Iterators.peekingIterator(table.subMap( new Key(rowBegin, Long.MIN_VALUE), new Key(rowEnd, timestamp)).entrySet().iterator()); Map<Cell, Value> rowResults = new LinkedHashMap<>(); while (entries.hasNext()) { Entry<Key, byte[]> entry = entries.peek(); Key key = entry.getKey(); Iterator<Entry<Key, byte[]>> cellIter = takeCell(entries, key); getLatestVersionOfCell(row, key, cellIter, timestamp, rowResults); } return new LocalRowColumnRangeIterator(rowResults.entrySet().iterator()); }
public byte[] getStartCol() { return columnRangeSelection.getStartCol(); }
@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; }
@Override protected FullQuery getRowsColumnRangeFullyLoadedRowsSubQuery( List<byte[]> rows, long ts, ColumnRangeSelection columnRangeSelection) { String query = " /* GET_ROWS_COLUMN_RANGE_FULLY_LOADED_ROWS (" + tableName + ") */ " + "SELECT * FROM ( SELECT 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.ts < ? " + (columnRangeSelection.getStartCol().length > 0 ? " AND m.col_name >= ?" : "") + (columnRangeSelection.getEndCol().length > 0 ? " AND m.col_name < ?" : "") + " GROUP BY m.row_name, m.col_name" + " ORDER BY m.row_name ASC, m.col_name ASC )"; String wrappedQuery = wrapQueryWithIncludeValue("GET_ROWS_COLUMN_RANGE_FULLY_LOADED_ROWS", query, true); FullQuery fullQuery = new FullQuery(wrappedQuery).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; }
@Override protected FullQuery getRowsColumnRangeFullyLoadedRowsSubQuery( List<byte[]> rows, long ts, ColumnRangeSelection columnRangeSelection) { String query = " /* GET_ROWS_COLUMN_RANGE_FULLY_LOADED_ROW (" + 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 < ? " + (columnRangeSelection.getStartCol().length > 0 ? " AND m.col_name >= ?" : "") + (columnRangeSelection.getEndCol().length > 0 ? " AND m.col_name < ?" : "") + " GROUP BY m.row_name, m.col_name" + " ORDER BY m.row_name ASC, m.col_name ASC"; String wrappedQuery = wrapQueryWithIncludeValue("GET_ROWS_COLUMN_RANGE_FULLY_LOADED_ROW", query, true); FullQuery fullQuery = new FullQuery(wrappedQuery).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; } }
public static Arg<ColumnRangeSelection> columnRangeSelection(TableReference tableReference, ColumnRangeSelection columnRangeSelection) { String startCol = PtBytes.toString(columnRangeSelection.getStartCol()); String endCol = PtBytes.toString(columnRangeSelection.getEndCol()); return getArg("columnRangeSelection", columnRangeSelection, logArbitrator.isColumnNameSafe(tableReference, startCol) && logArbitrator.isColumnNameSafe(tableReference, endCol)); }
private RowColumnRangeIterator getColumnRangeForSingleRow(ConcurrentSkipListMap<Key, byte[]> table, byte[] row, ColumnRangeSelection columnRangeSelection, long timestamp) { Cell rowBegin; if (columnRangeSelection.getStartCol().length > 0) { rowBegin = Cell.create(row, columnRangeSelection.getStartCol()); } else { rowBegin = Cells.createSmallestCellForRow(row); } // Inclusive last cell. Cell rowEnd; if (columnRangeSelection.getEndCol().length > 0) { rowEnd = Cell.create(row, RangeRequests.previousLexicographicName(columnRangeSelection.getEndCol())); } else { rowEnd = Cells.createLargestCellForRow(row); } PeekingIterator<Entry<Key, byte[]>> entries = Iterators.peekingIterator(table.subMap( new Key(rowBegin, Long.MIN_VALUE), new Key(rowEnd, timestamp)).entrySet().iterator()); Map<Cell, Value> rowResults = new LinkedHashMap<>(); while (entries.hasNext()) { Entry<Key, byte[]> entry = entries.peek(); Key key = entry.getKey(); Iterator<Entry<Key, byte[]>> cellIter = takeCell(entries, key); getLatestVersionOfCell(row, key, cellIter, timestamp, rowResults); } return new LocalRowColumnRangeIterator(rowResults.entrySet().iterator()); }