Index: src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/generated/Parser.java =================================================================== --- src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/generated/Parser.java (revision 605823) +++ src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/generated/Parser.java (working copy) @@ -77,7 +77,7 @@ case DISABLE: case SAVE: case ID: - case 71: + case 72: switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case HELP: case ALTER: @@ -103,7 +103,7 @@ jj_la1[0] = jj_gen; ; } - jj_consume_token(71); + jj_consume_token(72); break; case 0: jj_consume_token(0); @@ -705,6 +705,7 @@ SelectCommand select = new SelectCommand(this.out, this.formatter); List columns = null; String rowKey = ""; + String stopRow = ""; String timestamp = null; int numVersion = 0; String tableName = null; @@ -736,9 +737,19 @@ } rowKey = getStringLiteral(); select.setRowKey(rowKey); + switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { + case UNTIL: + jj_consume_token(UNTIL); + stopRow = getStringLiteral(); + select.setStopRow(stopRow); + break; + default: + jj_la1[23] = jj_gen; + ; + } break; default: - jj_la1[23] = jj_gen; + jj_la1[24] = jj_gen; ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -748,7 +759,7 @@ select.setTimestamp(timestamp); break; default: - jj_la1[24] = jj_gen; + jj_la1[25] = jj_gen; ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -759,7 +770,7 @@ select.setVersion(numVersion); break; default: - jj_la1[25] = jj_gen; + jj_la1[26] = jj_gen; ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -774,7 +785,7 @@ } break; default: - jj_la1[26] = jj_gen; + jj_la1[27] = jj_gen; ; } {if (true) return select;} @@ -855,7 +866,7 @@ } break; default: - jj_la1[27] = jj_gen; + jj_la1[28] = jj_gen; ; } break; @@ -881,7 +892,7 @@ substitute.setCondition(condition); break; default: - jj_la1[28] = jj_gen; + jj_la1[29] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -922,7 +933,7 @@ ; break; default: - jj_la1[29] = jj_gen; + jj_la1[30] = jj_gen; break label_7; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -945,7 +956,7 @@ jj_consume_token(QUOTED_IDENTIFIER); break; default: - jj_la1[30] = jj_gen; + jj_la1[31] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -952,7 +963,7 @@ values.removeAll(values); break; default: - jj_la1[31] = jj_gen; + jj_la1[32] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -972,7 +983,7 @@ s = jj_consume_token(QUOTED_IDENTIFIER); break; default: - jj_la1[32] = jj_gen; + jj_la1[33] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -998,7 +1009,7 @@ col = jj_consume_token(ASTERISK); break; default: - jj_la1[33] = jj_gen; + jj_la1[34] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1014,7 +1025,7 @@ col = jj_consume_token(STRING_LITERAL); break; default: - jj_la1[34] = jj_gen; + jj_la1[35] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1021,7 +1032,7 @@ {if (true) return col.image.substring(1,col.image.toString().length() - 1);} break; default: - jj_la1[35] = jj_gen; + jj_la1[36] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1041,7 +1052,7 @@ ; break; default: - jj_la1[36] = jj_gen; + jj_la1[37] = jj_gen; break label_8; } jj_consume_token(COMMA); @@ -1065,7 +1076,7 @@ ; break; default: - jj_la1[37] = jj_gen; + jj_la1[38] = jj_gen; break label_9; } jj_consume_token(COMMA); @@ -1092,7 +1103,7 @@ ; break; default: - jj_la1[38] = jj_gen; + jj_la1[39] = jj_gen; break label_10; } jj_consume_token(COMMA); @@ -1114,7 +1125,7 @@ t = jj_consume_token(INTEGER_LITERAL); break; default: - jj_la1[39] = jj_gen; + jj_la1[40] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1143,7 +1154,7 @@ t = jj_consume_token(ROOT_TABLE); break; default: - jj_la1[40] = jj_gen; + jj_la1[41] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1159,7 +1170,7 @@ t = jj_consume_token(STRING_LITERAL); break; default: - jj_la1[41] = jj_gen; + jj_la1[42] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1166,7 +1177,7 @@ {if (true) return t.image.substring(1,t.image.toString().length() - 1);} break; default: - jj_la1[42] = jj_gen; + jj_la1[43] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1191,7 +1202,7 @@ ; break; default: - jj_la1[43] = jj_gen; + jj_la1[44] = jj_gen; break label_11; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -1204,7 +1215,7 @@ connector = " OR "; break; default: - jj_la1[44] = jj_gen; + jj_la1[45] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1248,7 +1259,7 @@ searchName += ".ROW"; break; default: - jj_la1[45] = jj_gen; + jj_la1[46] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1254,7 +1265,7 @@ } break; default: - jj_la1[46] = jj_gen; + jj_la1[47] = jj_gen; ; } comparator = getComparator(); @@ -1284,7 +1295,7 @@ comparand += "." + joinColumn.image.toString(); break; default: - jj_la1[47] = jj_gen; + jj_la1[48] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1290,7 +1301,7 @@ } break; default: - jj_la1[48] = jj_gen; + jj_la1[49] = jj_gen; ; } break; @@ -1310,7 +1321,7 @@ } break; default: - jj_la1[49] = jj_gen; + jj_la1[50] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1339,7 +1350,7 @@ comparator += "="; break; default: - jj_la1[50] = jj_gen; + jj_la1[51] = jj_gen; ; } break; @@ -1352,7 +1363,7 @@ comparator += "="; break; default: - jj_la1[51] = jj_gen; + jj_la1[52] = jj_gen; ; } break; @@ -1365,7 +1376,7 @@ comparator = ">" + comparator; break; default: - jj_la1[52] = jj_gen; + jj_la1[53] = jj_gen; ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -1374,7 +1385,7 @@ comparator = "<" + comparator; break; default: - jj_la1[53] = jj_gen; + jj_la1[54] = jj_gen; ; } break; @@ -1392,7 +1403,7 @@ comparator = "=="; break; default: - jj_la1[54] = jj_gen; + jj_la1[55] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1414,12 +1425,12 @@ finally { jj_save(0, xla); } } - final private boolean jj_3R_12() { + final private boolean jj_3R_14() { Token xsp; xsp = jj_scanpos; - if (jj_3R_13()) { + if (jj_scan_token(70)) { jj_scanpos = xsp; - if (jj_3R_14()) return true; + if (jj_scan_token(71)) return true; } return false; } @@ -1424,12 +1435,15 @@ return false; } - final private boolean jj_3R_14() { + final private boolean jj_3R_13() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(69)) { + if (jj_scan_token(66)) { jj_scanpos = xsp; - if (jj_scan_token(70)) return true; + if (jj_scan_token(61)) { + jj_scanpos = xsp; + if (jj_scan_token(62)) return true; + } } return false; } @@ -1434,15 +1448,12 @@ return false; } - final private boolean jj_3R_13() { + final private boolean jj_3R_12() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(65)) { + if (jj_3R_13()) { jj_scanpos = xsp; - if (jj_scan_token(60)) { - jj_scanpos = xsp; - if (jj_scan_token(61)) return true; - } + if (jj_3R_14()) return true; } return false; } @@ -1462,7 +1473,7 @@ public boolean lookingAhead = false; private boolean jj_semLA; private int jj_gen; - final private int[] jj_la1 = new int[55]; + final private int[] jj_la1 = new int[56]; static private int[] jj_la1_0; static private int[] jj_la1_1; static private int[] jj_la1_2; @@ -1472,13 +1483,13 @@ jj_la1_2(); } private static void jj_la1_0() { - jj_la1_0 = new int[] {0x79ffe0,0x79ffe1,0x79ffe0,0x0,0x0,0x0,0x0,0x0,0x19fbc0,0x19fbc0,0x0,0x600,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x1000000,0x1800000,0x1800000,0x20000000,0x40000000,0x80000000,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; + jj_la1_0 = new int[] {0x79ffe0,0x79ffe1,0x79ffe0,0x0,0x0,0x0,0x0,0x0,0x19fbc0,0x19fbc0,0x0,0x600,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x0,0x1000000,0x1800000,0x4000000,0x1800000,0x40000000,0x80000000,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0x8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; } private static void jj_la1_1() { - jj_la1_1 = new int[] {0x40000000,0x40000000,0x40000000,0x0,0x8,0x8,0x0,0x0,0xc0000000,0xc0000000,0x30000000,0x0,0x398e000,0x70000,0x700000,0x398e000,0x4,0x4,0xc000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x80000000,0x4,0x0,0x4,0x0,0x1000,0x0,0x1000,0x4,0x4,0x4,0x0,0x30000000,0x0,0x30000000,0x3,0x3,0x0,0x8,0x0,0x8,0x10,0x40,0x40,0x80,0x100,0xfc0,}; + jj_la1_1 = new int[] {0x80000000,0x80000000,0x80000000,0x0,0x10,0x10,0x0,0x0,0x80000000,0x80000000,0x60000000,0x0,0x731c000,0xe0000,0xe00000,0x731c000,0x8,0x8,0x18000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x0,0x8,0x0,0x8,0x0,0x2000,0x0,0x2000,0x8,0x8,0x8,0x0,0x60000000,0x0,0x60000000,0x6,0x6,0x0,0x10,0x0,0x10,0x20,0x80,0x80,0x100,0x200,0x1f80,}; } private static void jj_la1_2() { - jj_la1_2 = new int[] {0x2,0x82,0x2,0x2,0xe,0xe,0xe,0xe,0x2,0x2,0x62,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x62,0x62,0x62,0x60,0x6,0x60,0x66,0x0,0x0,0x0,0x6,0x2,0x60,0x62,0x0,0x0,0x2,0x0,0x2,0x0,0x46,0x0,0x0,0x0,0x0,0x0,}; + jj_la1_2 = new int[] {0x4,0x104,0x4,0x4,0x1c,0x1c,0x1c,0x1c,0x5,0x5,0xc4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0xc4,0xc4,0xc4,0xc0,0xc,0xc0,0xcc,0x0,0x0,0x0,0xc,0x4,0xc0,0xc4,0x0,0x0,0x4,0x0,0x4,0x0,0x8c,0x0,0x0,0x0,0x0,0x0,}; } final private JJCalls[] jj_2_rtns = new JJCalls[1]; private boolean jj_rescan = false; @@ -1493,7 +1504,7 @@ token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 55; i++) jj_la1[i] = -1; + for (int i = 0; i < 56; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -1506,7 +1517,7 @@ token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 55; i++) jj_la1[i] = -1; + for (int i = 0; i < 56; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -1516,7 +1527,7 @@ token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 55; i++) jj_la1[i] = -1; + for (int i = 0; i < 56; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -1526,7 +1537,7 @@ token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 55; i++) jj_la1[i] = -1; + for (int i = 0; i < 56; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -1535,7 +1546,7 @@ token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 55; i++) jj_la1[i] = -1; + for (int i = 0; i < 56; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -1544,7 +1555,7 @@ token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 55; i++) jj_la1[i] = -1; + for (int i = 0; i < 56; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -1655,8 +1666,8 @@ public ParseException generateParseException() { jj_expentries.removeAllElements(); - boolean[] la1tokens = new boolean[72]; - for (int i = 0; i < 72; i++) { + boolean[] la1tokens = new boolean[73]; + for (int i = 0; i < 73; i++) { la1tokens[i] = false; } if (jj_kind >= 0) { @@ -1663,7 +1674,7 @@ la1tokens[jj_kind] = true; jj_kind = -1; } - for (int i = 0; i < 55; i++) { + for (int i = 0; i < 56; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1< 66) - kind = 66; + if (kind > 67) + kind = 67; jjCheckNAddStates(0, 6); } else if ((0x400a00000000000L & l) != 0L) @@ -1246,8 +1251,8 @@ } else if ((0x400a00000000000L & l) != 0L) { - if (kind > 65) - kind = 65; + if (kind > 66) + kind = 66; jjCheckNAdd(1); } else if (curChar == 39) @@ -1260,8 +1265,8 @@ case 1: if ((0x7ffa00000000000L & l) == 0L) break; - if (kind > 65) - kind = 65; + if (kind > 66) + kind = 66; jjCheckNAdd(1); break; case 2: @@ -1271,8 +1276,8 @@ case 3: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 67) - kind = 67; + if (kind > 68) + kind = 68; jjCheckNAddTwoStates(3, 4); break; case 5: @@ -1282,8 +1287,8 @@ case 6: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 67) - kind = 67; + if (kind > 68) + kind = 68; jjCheckNAdd(6); break; case 7: @@ -1295,8 +1300,8 @@ jjCheckNAddTwoStates(8, 9); break; case 9: - if (curChar == 34 && kind > 69) - kind = 69; + if (curChar == 34 && kind > 70) + kind = 70; break; case 10: if (curChar == 39) @@ -1319,8 +1324,8 @@ jjCheckNAddStates(10, 12); break; case 15: - if (curChar == 39 && kind > 70) - kind = 70; + if (curChar == 39 && kind > 71) + kind = 71; break; case 16: if ((0x3ff000000000000L & l) == 0L) @@ -1325,8 +1330,8 @@ case 16: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 66) - kind = 66; + if (kind > 67) + kind = 67; jjCheckNAddStates(0, 6); break; case 17: @@ -1332,8 +1337,8 @@ case 17: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 66) - kind = 66; + if (kind > 67) + kind = 67; jjCheckNAdd(17); break; case 18: @@ -1347,8 +1352,8 @@ case 20: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 67) - kind = 67; + if (kind > 68) + kind = 68; jjCheckNAddTwoStates(20, 21); break; case 22: @@ -1358,8 +1363,8 @@ case 23: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 67) - kind = 67; + if (kind > 68) + kind = 68; jjCheckNAdd(23); break; case 24: @@ -1373,8 +1378,8 @@ case 27: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 67) - kind = 67; + if (kind > 68) + kind = 68; jjCheckNAdd(27); break; case 28: @@ -1380,8 +1385,8 @@ case 28: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 67) - kind = 67; + if (kind > 68) + kind = 68; jjCheckNAddTwoStates(28, 29); break; case 30: @@ -1391,8 +1396,8 @@ case 31: if ((0x3ff000000000000L & l) == 0L) break; - if (kind > 67) - kind = 67; + if (kind > 68) + kind = 68; jjCheckNAdd(31); break; default : break; @@ -1410,8 +1415,8 @@ case 1: if ((0x47fffffe87fffffeL & l) == 0L) break; - if (kind > 65) - kind = 65; + if (kind > 66) + kind = 66; jjCheckNAdd(1); break; case 4: @@ -1487,10 +1492,10 @@ public static final String[] jjstrLiteralImages = { "", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, -null, null, null, null, null, null, null, "\54", "\56", "\50", "\51", "\75", "\76", -"\74", null, null, "\41\75", "\52", null, null, null, null, null, null, null, null, +null, null, null, null, null, null, null, null, "\54", "\56", "\50", "\51", "\75", +"\76", "\74", null, null, "\41\75", "\52", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, -null, null, null, null, "\73", }; +null, null, null, null, null, "\73", }; public static final String[] lexStateNames = { "DEFAULT", }; @@ -1495,7 +1500,7 @@ "DEFAULT", }; static final long[] jjtoToken = { - 0xffffffffffffffe1L, 0xefL, + 0xffffffffffffffe1L, 0x1dfL, }; static final long[] jjtoSkip = { 0x1eL, 0x0L, Index: src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/HBaseShell.jj =================================================================== --- src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/HBaseShell.jj (revision 605823) +++ src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/HBaseShell.jj (working copy) @@ -92,6 +92,7 @@ | | | + | | | | @@ -561,6 +562,7 @@ SelectCommand select = new SelectCommand(this.out, this.formatter); List columns = null; String rowKey = ""; + String stopRow = ""; String timestamp = null; int numVersion = 0; String tableName = null; @@ -585,6 +587,9 @@ { select.setRowKey(rowKey); } + [ + stopRow = getStringLiteral() + {select.setStopRow(stopRow);} ] ] [ Index: src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/SelectCommand.java =================================================================== --- src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/SelectCommand.java (revision 605823) +++ src/contrib/hbase/src/java/org/apache/hadoop/hbase/shell/SelectCommand.java (working copy) @@ -38,6 +38,8 @@ import org.apache.hadoop.hbase.HTable; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.Shell; +import org.apache.hadoop.hbase.filter.RowFilterInterface; +import org.apache.hadoop.hbase.filter.StopRowFilter; import org.apache.hadoop.hbase.shell.generated.Parser; import org.apache.hadoop.hbase.util.Writables; import org.apache.hadoop.io.Text; @@ -50,6 +52,7 @@ public class SelectCommand extends BasicCommand { private Text tableName; private Text rowKey = new Text(""); + private Text stopRow = new Text(""); private List columns; private long timestamp; private int limit; @@ -57,8 +60,7 @@ private int version; private boolean whereClause = false; private static final String[] HEADER_ROW_CELL = new String[] { "Row", "Cell" }; - private static final String[] HEADER_COLUMN_CELL = new String[] { "Column", - "Cell" }; + private static final String[] HEADER_COLUMN_CELL = new String[] { "Column", "Cell" }; private static final String[] HEADER = new String[] { "Row", "Column", "Cell" }; private static final String STAR = "*"; @@ -215,6 +217,11 @@ } else { scan = table.obtainScanner(cols, this.rowKey, this.timestamp); } + if(this.stopRow.toString().length() > 0) { + RowFilterInterface filter = new StopRowFilter(this.stopRow); + scan = table.obtainScanner(cols, this.rowKey, filter); + } + HStoreKey key = new HStoreKey(); TreeMap results = new TreeMap(); // If only one column in query, then don't print out the column. @@ -340,6 +347,10 @@ this.rowKey = new Text(rowKey); } + public void setStopRow(String stopRow) { + this.stopRow = new Text(stopRow); + } + /** * @param version Set maximum versions for this selection */