HADOOP-1789 output formatting
git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk/src/contrib/hbase@580487 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1236b87f48
commit
354c848546
@ -81,7 +81,8 @@ Trunk (unreleased changes)
|
||||
HADOOP-1884 Remove useless debugging log messages from hbase.mapred
|
||||
HADOOP-1856 Add Jar command to hbase shell using Hadoop RunJar util
|
||||
(Edward Yoon via Stack)
|
||||
HADOOP-1928 ] Have master pass the regionserver the filesystem to use
|
||||
HADOOP-1928 Have master pass the regionserver the filesystem to use
|
||||
HADOOP-1789 Output formatting
|
||||
|
||||
|
||||
Below are the list of changes before 2007-08-18
|
||||
|
@ -55,9 +55,11 @@ public abstract class HAbstractScanner implements HInternalScannerInterface {
|
||||
/**
|
||||
* This class provides column matching functions that are more sophisticated
|
||||
* than a simple string compare. There are three types of matching:
|
||||
* 1. Match on the column family name only
|
||||
* 2. Match on the column family + column key regex
|
||||
* 3. Simple match: compare column family + column key literally
|
||||
* <ol>
|
||||
* <li>Match on the column family name only</li>
|
||||
* <li>Match on the column family + column key regex</li>
|
||||
* <li>Simple match: compare column family + column key literally</li>
|
||||
* </ul>
|
||||
*/
|
||||
private static class ColumnMatcher {
|
||||
private boolean wildCardmatch;
|
||||
@ -137,11 +139,11 @@ public abstract class HAbstractScanner implements HInternalScannerInterface {
|
||||
matchers = new Vector<ColumnMatcher>();
|
||||
}
|
||||
ColumnMatcher matcher = new ColumnMatcher(targetCols[i]);
|
||||
if(matcher.isWildCardMatch()) {
|
||||
if (matcher.isWildCardMatch()) {
|
||||
this.wildcardMatch = true;
|
||||
}
|
||||
matchers.add(matcher);
|
||||
if(matchers.size() > 1) {
|
||||
if (matchers.size() > 1) {
|
||||
this.multipleMatchers = true;
|
||||
}
|
||||
okCols.put(family, matchers);
|
||||
@ -272,4 +274,4 @@ public abstract class HAbstractScanner implements HInternalScannerInterface {
|
||||
}
|
||||
return insertedItem;
|
||||
}
|
||||
}
|
||||
}
|
@ -211,7 +211,6 @@ public class HColumnDescriptor implements WritableComparable {
|
||||
return this.bloomFilter;
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public String toString() {
|
||||
// Output a name minus ':'.
|
||||
|
@ -1052,9 +1052,14 @@ public class HRegion implements HConstants {
|
||||
|
||||
/**
|
||||
* Return an iterator that scans over the HRegion, returning the indicated
|
||||
* columns for only the rows that match the data filter. This Iterator must be closed by the caller.
|
||||
* columns for only the rows that match the data filter. This Iterator must
|
||||
* be closed by the caller.
|
||||
*
|
||||
* @param cols columns desired in result set
|
||||
* @param cols columns to scan. If column name is a column family, all
|
||||
* columns of the specified column family are returned. Its also possible
|
||||
* to pass a regex in the column qualifier. A column qualifier is judged to
|
||||
* be a regex if it contains at least one of the following characters:
|
||||
* <code>\+|^&*$[]]}{)(</code>.
|
||||
* @param firstRow row which is the starting point of the scan
|
||||
* @param timestamp only return rows whose timestamp is <= this value
|
||||
* @param filter row filter
|
||||
@ -1070,7 +1075,6 @@ public class HRegion implements HConstants {
|
||||
for(int i = 0; i < cols.length; i++) {
|
||||
families.add(HStoreKey.extractFamily(cols[i]));
|
||||
}
|
||||
|
||||
List<HStore> storelist = new ArrayList<HStore>();
|
||||
for (Text family: families) {
|
||||
HStore s = stores.get(family);
|
||||
@ -1540,8 +1544,8 @@ public class HRegion implements HConstants {
|
||||
private HInternalScannerInterface[] scanners;
|
||||
private TreeMap<Text, byte []>[] resultSets;
|
||||
private HStoreKey[] keys;
|
||||
private boolean wildcardMatch;
|
||||
private boolean multipleMatchers;
|
||||
private boolean wildcardMatch = false;
|
||||
private boolean multipleMatchers = false;
|
||||
private RowFilterInterface dataFilter;
|
||||
|
||||
/** Create an HScanner with a handle on many HStores. */
|
||||
@ -1555,8 +1559,6 @@ public class HRegion implements HConstants {
|
||||
this.scanners = new HInternalScannerInterface[stores.length + 1];
|
||||
this.resultSets = new TreeMap[scanners.length];
|
||||
this.keys = new HStoreKey[scanners.length];
|
||||
this.wildcardMatch = false;
|
||||
this.multipleMatchers = false;
|
||||
|
||||
// Advance to the first key in each store.
|
||||
// All results will match the required column-set and scanTime.
|
||||
@ -1601,21 +1603,14 @@ public class HRegion implements HConstants {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public boolean isWildcardScanner() {
|
||||
return wildcardMatch;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public boolean isMultipleMatchScanner() {
|
||||
return multipleMatchers;
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
public boolean next(HStoreKey key, SortedMap<Text, byte[]> results)
|
||||
throws IOException {
|
||||
// Filtered flag is set by filters. If a cell has been 'filtered out'
|
||||
|
@ -131,7 +131,11 @@ public interface HRegionInterface extends VersionedProtocol {
|
||||
* Opens a remote scanner with a RowFilter.
|
||||
*
|
||||
* @param regionName name of region to scan
|
||||
* @param columns columns to scan
|
||||
* @param columns columns to scan. If column name is a column family, all
|
||||
* columns of the specified column family are returned. Its also possible
|
||||
* to pass a regex for column family name. A column name is judged to be
|
||||
* regex if it contains at least one of the following characters:
|
||||
* <code>\+|^&*$[]]}{)(</code>.
|
||||
* @param startRow starting row to scan
|
||||
* @param timestamp only return values whose timestamp is <= this value
|
||||
* @param filter RowFilter for filtering results at the row-level.
|
||||
|
@ -1093,11 +1093,9 @@ public class HRegionServer implements HConstants, HRegionInterface, Runnable {
|
||||
// remote scanner interface
|
||||
//
|
||||
|
||||
/** {@inheritDoc} */
|
||||
public long openScanner(Text regionName, Text[] cols, Text firstRow,
|
||||
final long timestamp, final RowFilterInterface filter)
|
||||
throws IOException {
|
||||
|
||||
final long timestamp, final RowFilterInterface filter)
|
||||
throws IOException {
|
||||
requestCount.incrementAndGet();
|
||||
try {
|
||||
HRegion r = getRegion(regionName);
|
||||
|
@ -1447,7 +1447,6 @@ class HStore implements HConstants {
|
||||
}
|
||||
|
||||
} catch (Exception ex) {
|
||||
LOG.error("Failed construction", ex);
|
||||
close();
|
||||
IOException e = new IOException("HStoreScanner failed construction");
|
||||
e.initCause(ex);
|
||||
|
@ -322,8 +322,8 @@ public class HTable implements HConstants {
|
||||
/**
|
||||
* Get all the data for the specified row
|
||||
*
|
||||
* @param row - row key
|
||||
* @return - map of colums to values
|
||||
* @param row row key
|
||||
* @return map of colums to values
|
||||
* @throws IOException
|
||||
*/
|
||||
public SortedMap<Text, byte[]> getRow(Text row) throws IOException {
|
||||
@ -373,7 +373,11 @@ public class HTable implements HConstants {
|
||||
* Get a scanner on the current table starting at the specified row.
|
||||
* Return the specified columns.
|
||||
*
|
||||
* @param columns array of columns to return
|
||||
* @param columns columns to scan. If column name is a column family, all
|
||||
* columns of the specified column family are returned. Its also possible
|
||||
* to pass a regex in the column qualifier. A column qualifier is judged to
|
||||
* be a regex if it contains at least one of the following characters:
|
||||
* <code>\+|^&*$[]]}{)(</code>.
|
||||
* @param startRow starting row in table to scan
|
||||
* @return scanner
|
||||
* @throws IOException
|
||||
@ -388,7 +392,11 @@ public class HTable implements HConstants {
|
||||
* Get a scanner on the current table starting at the specified row.
|
||||
* Return the specified columns.
|
||||
*
|
||||
* @param columns array of columns to return
|
||||
* @param columns columns to scan. If column name is a column family, all
|
||||
* columns of the specified column family are returned. Its also possible
|
||||
* to pass a regex in the column qualifier. A column qualifier is judged to
|
||||
* be a regex if it contains at least one of the following characters:
|
||||
* <code>\+|^&*$[]]}{)(</code>.
|
||||
* @param startRow starting row in table to scan
|
||||
* @param timestamp only return results whose timestamp <= this value
|
||||
* @return scanner
|
||||
@ -404,7 +412,11 @@ public class HTable implements HConstants {
|
||||
* Get a scanner on the current table starting at the specified row.
|
||||
* Return the specified columns.
|
||||
*
|
||||
* @param columns array of columns to return
|
||||
* @param columns columns to scan. If column name is a column family, all
|
||||
* columns of the specified column family are returned. Its also possible
|
||||
* to pass a regex in the column qualifier. A column qualifier is judged to
|
||||
* be a regex if it contains at least one of the following characters:
|
||||
* <code>\+|^&*$[]]}{)(</code>.
|
||||
* @param startRow starting row in table to scan
|
||||
* @param filter a row filter using row-key regexp and/or column data filter.
|
||||
* @return scanner
|
||||
@ -420,7 +432,11 @@ public class HTable implements HConstants {
|
||||
* Get a scanner on the current table starting at the specified row.
|
||||
* Return the specified columns.
|
||||
*
|
||||
* @param columns array of columns to return
|
||||
* @param columns columns to scan. If column name is a column family, all
|
||||
* columns of the specified column family are returned. Its also possible
|
||||
* to pass a regex in the column qualifier. A column qualifier is judged to
|
||||
* be a regex if it contains at least one of the following characters:
|
||||
* <code>\+|^&*$[]]}{)(</code>.
|
||||
* @param startRow starting row in table to scan
|
||||
* @param timestamp only return results whose timestamp <= this value
|
||||
* @param filter a row filter using row-key regexp and/or column data filter.
|
||||
|
@ -93,7 +93,7 @@ public class Shell {
|
||||
|
||||
/** Return the string of prompt start string */
|
||||
private static String getPrompt(final StringBuilder queryStr) {
|
||||
return (queryStr.toString().equals("")) ? "Hbase > " : " --> ";
|
||||
return (queryStr.toString().equals("")) ? "Hbase> " : " --> ";
|
||||
}
|
||||
|
||||
/**
|
||||
@ -102,8 +102,9 @@ public class Shell {
|
||||
* @param end end of time interval
|
||||
* @return a string of code execution time. */
|
||||
public static String executeTime(boolean watch, long start, long end) {
|
||||
return (watch) ?
|
||||
"(" + String.format("%.2f", (end - start) * 0.001) + " sec)" :
|
||||
"";
|
||||
return watch?
|
||||
" (" + String.format("%.2f", Double.valueOf((end - start) * 0.001)) +
|
||||
" sec)":
|
||||
"";
|
||||
}
|
||||
}
|
||||
|
@ -51,4 +51,4 @@ public abstract class BasicCommand implements Command, CommandFactory {
|
||||
return (!column.endsWith(FAMILY_INDICATOR))?
|
||||
column + FAMILY_INDICATOR: column;
|
||||
}
|
||||
}
|
||||
}
|
@ -44,4 +44,4 @@ public class ClearCommand extends BasicCommand {
|
||||
System.out.print("\033c");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,170 +0,0 @@
|
||||
/**
|
||||
* Copyright 2007 The Apache Software Foundation
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.hadoop.hbase.shell;
|
||||
|
||||
import java.io.PrintStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
/**
|
||||
* Manufactures console table, but stupid.
|
||||
*/
|
||||
public class ConsoleTable {
|
||||
|
||||
private static PrintStream out;
|
||||
private static final String sBar = "+------+----------------------+";
|
||||
private static final String lBar = "----------------------+----------------------+";
|
||||
|
||||
static {
|
||||
try {
|
||||
out = new PrintStream(System.out, true, "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void printHead(String name) {
|
||||
out.println(sBar);
|
||||
out.print("| No. | ");
|
||||
printCell(name, " |", true);
|
||||
}
|
||||
|
||||
public static void printFoot() {
|
||||
out.println(sBar);
|
||||
out.println();
|
||||
}
|
||||
|
||||
public static void printTable(int count, String name) {
|
||||
out.println(sBar);
|
||||
if (name.length() > 20) {
|
||||
int interval = 20;
|
||||
out.print("| ");
|
||||
out.printf("%-4s", Integer.valueOf(count + 1));
|
||||
out.print(" | ");
|
||||
printCell(name.substring(0, interval), " |", true);
|
||||
for (int i = 0; i < name.length() / interval; i++) {
|
||||
out.print("| ");
|
||||
out.printf("%-4s", "");
|
||||
out.print(" | ");
|
||||
|
||||
int end = ((interval * i) + interval + interval);
|
||||
if (end > name.length()) {
|
||||
printCell(name.substring(end - interval, name.length()), " |", true);
|
||||
} else {
|
||||
printCell(name.substring(end - interval, end), " |", true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
out.print("| ");
|
||||
out.printf("%-4s", Integer.valueOf(count + 1));
|
||||
out.print(" | ");
|
||||
printCell(name, " |", true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void selectHead() {
|
||||
out.println(sBar + lBar);
|
||||
out.print("| No. | ");
|
||||
printCell("Row", " | ", false);
|
||||
printCell("Column", " | ", false);
|
||||
printCell("Cell", " | ", true);
|
||||
}
|
||||
|
||||
public static void printLine(int count, String key, String column,
|
||||
String cellData) {
|
||||
out.println(sBar + lBar);
|
||||
if (key.length() > 20 || column.length() > 20 || cellData.length() > 20) {
|
||||
int interval = 20;
|
||||
out.print("| ");
|
||||
out.printf("%-4s", Integer.valueOf(count + 1));
|
||||
out.print(" | ");
|
||||
|
||||
printLongCell(key, interval);
|
||||
printLongCell(column, interval);
|
||||
printLongCell(cellData, interval);
|
||||
|
||||
int biggerStrLength = getBiggerInt(new int[] { key.length(),
|
||||
column.length(), cellData.length() });
|
||||
|
||||
for (int i = 0; i < (biggerStrLength / interval); i++) {
|
||||
out.print("| ");
|
||||
out.printf("%-4s", "");
|
||||
out.print(" | ");
|
||||
|
||||
int end = ((interval * i) + interval + interval);
|
||||
|
||||
printLongCellData(key, end, interval, false);
|
||||
printLongCellData(column, end, interval, false);
|
||||
printLongCellData(cellData, end, interval, false);
|
||||
}
|
||||
} else {
|
||||
out.print("| ");
|
||||
out.printf("%-4s", Integer.valueOf(count + 1));
|
||||
out.print(" | ");
|
||||
printCell(key, " | ", false);
|
||||
printCell(column, " | ", false);
|
||||
printCell(cellData, " |", true);
|
||||
}
|
||||
}
|
||||
|
||||
private static void printLongCellData(String key, int end, int interval,
|
||||
boolean newLine) {
|
||||
if (end > key.length()) {
|
||||
if (key.length() > interval && end - interval < key.length()) {
|
||||
out.printf("%-20s", key.substring(end - interval, key.length()));
|
||||
} else {
|
||||
out.printf("%-20s", "");
|
||||
}
|
||||
} else {
|
||||
out.printf("%-20s", key.substring(end - interval, end));
|
||||
}
|
||||
out.print(" | ");
|
||||
if (newLine)
|
||||
out.println();
|
||||
}
|
||||
|
||||
private static void printLongCell(String iKey, int interval) {
|
||||
if (iKey.length() > 20)
|
||||
printCell(iKey.substring(0, interval), " | ", true);
|
||||
else
|
||||
printCell(iKey, " | ", true);
|
||||
}
|
||||
|
||||
private static void printCell(String data, String end, boolean newLine) {
|
||||
out.printf("%-20s", data);
|
||||
out.printf(end);
|
||||
if (newLine)
|
||||
out.println();
|
||||
}
|
||||
|
||||
public static int getBiggerInt(int[] integers) {
|
||||
int result = -1;
|
||||
for (int i = 0; i < integers.length; i++) {
|
||||
if (integers[i] > result) {
|
||||
result = integers[i];
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void selectFoot() {
|
||||
out.println(sBar + lBar);
|
||||
out.println();
|
||||
}
|
||||
}
|
@ -32,16 +32,17 @@ import org.apache.hadoop.io.Text;
|
||||
* Prints information about tables.
|
||||
*/
|
||||
public class DescCommand extends BasicCommand {
|
||||
|
||||
private static final String [] HEADER =
|
||||
new String [] {"Column Family Descriptor"};
|
||||
private Text tableName;
|
||||
|
||||
public ReturnMsg execute(Configuration conf) {
|
||||
if (this.tableName == null)
|
||||
return new ReturnMsg(0, "Syntax error : Please check 'Describe' syntax.");
|
||||
return new ReturnMsg(0, "Syntax error : Please check 'Describe' syntax");
|
||||
try {
|
||||
HConnection conn = HConnectionManager.getConnection(conf);
|
||||
if (!conn.tableExists(this.tableName)) {
|
||||
return new ReturnMsg(0, "Table not found.");
|
||||
return new ReturnMsg(0, "Table not found");
|
||||
}
|
||||
HTableDescriptor [] tables = conn.listTables();
|
||||
HColumnDescriptor [] columns = null;
|
||||
@ -52,13 +53,21 @@ public class DescCommand extends BasicCommand {
|
||||
break;
|
||||
}
|
||||
}
|
||||
ConsoleTable.printHead("ColumnFamily");
|
||||
for (int ii = 0; ii < columns.length; ii++) {
|
||||
String tmp = columns[ii].toString();
|
||||
ConsoleTable.printTable(ii, tmp.substring(1, tmp.length() - 1));
|
||||
TableFormatter formatter = TableFormatterFactory.get();
|
||||
formatter.header(HEADER);
|
||||
// Do a toString on the HColumnDescriptors
|
||||
String [] columnStrs = new String[columns.length];
|
||||
for (int i = 0; i < columns.length; i++) {
|
||||
String tmp = columns[i].toString();
|
||||
// Strip the curly-brackets if present.
|
||||
if (tmp.length() > 2 && tmp.startsWith("{") && tmp.endsWith("}")) {
|
||||
tmp = tmp.substring(1, tmp.length() - 1);
|
||||
}
|
||||
columnStrs[i] = tmp;
|
||||
}
|
||||
ConsoleTable.printFoot();
|
||||
return new ReturnMsg(1, columns.length + " columnfamilie(s) found.");
|
||||
formatter.row(columnStrs);
|
||||
formatter.footer();
|
||||
return new ReturnMsg(1, columns.length + " columnfamily(s) in set");
|
||||
} catch (IOException e) {
|
||||
return new ReturnMsg(0, "error msg : " + e.toString());
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ TOKEN: /** for HQL statements */
|
||||
|
||||
TOKEN : /** Literals */
|
||||
{
|
||||
<ID: (["A"-"Z","a"-"z","0"-"9","_","-",".",":","/"])+ >
|
||||
<ID: ["A"-"Z","a"-"z","_","-",".",":","/"] (["A"-"Z","a"-"z","0"-"9","_","-",".",":","/"])* >
|
||||
| <INTEGER_LITERAL: (["0"-"9"])+ >
|
||||
| <FLOATING_POINT_LITERAL:
|
||||
(["0"-"9"])+ "." (["0"-"9"])+ (<EXPONENT>)?
|
||||
@ -555,8 +555,7 @@ SelectCommand selectCommand() :
|
||||
]
|
||||
|
||||
[
|
||||
<NUM_VERSIONS>
|
||||
numVersion = Number()
|
||||
<NUM_VERSIONS><EQUALS> numVersion = Number()
|
||||
{
|
||||
select.setVersion(numVersion);
|
||||
}
|
||||
|
@ -21,19 +21,22 @@ package org.apache.hadoop.hbase.shell;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.hbase.HBaseAdmin;
|
||||
import org.apache.hadoop.hbase.HBaseConfiguration;
|
||||
import org.apache.hadoop.hbase.HConstants;
|
||||
import org.apache.hadoop.hbase.HRegionInfo;
|
||||
import org.apache.hadoop.hbase.HScannerInterface;
|
||||
import org.apache.hadoop.hbase.HStoreKey;
|
||||
import org.apache.hadoop.hbase.HTable;
|
||||
import org.apache.hadoop.hbase.HTableDescriptor;
|
||||
import org.apache.hadoop.io.DataInputBuffer;
|
||||
import org.apache.hadoop.hbase.shell.generated.ParseException;
|
||||
import org.apache.hadoop.hbase.shell.generated.Parser;
|
||||
import org.apache.hadoop.hbase.util.Writables;
|
||||
import org.apache.hadoop.io.Text;
|
||||
|
||||
/**
|
||||
@ -48,122 +51,190 @@ public class SelectCommand extends BasicCommand {
|
||||
private List<String> columns;
|
||||
private long timestamp;
|
||||
private int limit;
|
||||
// Count of versions to return.
|
||||
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 =
|
||||
new String [] {"Row", "Column", "Cell"};
|
||||
|
||||
public ReturnMsg execute(Configuration conf) {
|
||||
if (this.tableName.equals("") || this.rowKey == null ||
|
||||
this.columns.size() == 0) {
|
||||
return new ReturnMsg(0, "Syntax error : Please check 'Select' syntax.");
|
||||
}
|
||||
|
||||
try {
|
||||
HTable table = new HTable(conf, this.tableName);
|
||||
HBaseAdmin admin = new HBaseAdmin(conf);
|
||||
int count = 0;
|
||||
if (this.whereClause) {
|
||||
compoundWherePrint(table, admin);
|
||||
count = compoundWherePrint(table, admin);
|
||||
} else {
|
||||
scanPrint(table, admin);
|
||||
count = scanPrint(table, admin);
|
||||
}
|
||||
return new ReturnMsg(1, "Successfully print out the selected data.");
|
||||
return new ReturnMsg(1, Integer.toString(count) + " row(s) in set");
|
||||
} catch (IOException e) {
|
||||
String[] msg = e.getMessage().split("[,]");
|
||||
return new ReturnMsg(0, msg[0]);
|
||||
}
|
||||
}
|
||||
|
||||
private void compoundWherePrint(HTable table, HBaseAdmin admin) {
|
||||
private int compoundWherePrint(HTable table, HBaseAdmin admin) {
|
||||
int count = 0;
|
||||
TableFormatter formatter = TableFormatterFactory.get();
|
||||
try {
|
||||
if (this.version != 0) {
|
||||
// A number of versions has been specified.
|
||||
byte[][] result = null;
|
||||
Text[] cols = getColumns(admin);
|
||||
for (int i = 0; i < cols.length; i++) {
|
||||
if (this.timestamp == 0) {
|
||||
result = table.get(this.rowKey, cols[i], this.timestamp, this.version);
|
||||
ParsedColumns parsedColumns = getColumns(admin, false);
|
||||
boolean multiple = parsedColumns.isMultiple() || this.version > 1;
|
||||
formatter.header(multiple? HEADER_COLUMN_CELL: null);
|
||||
for (Text column: parsedColumns.getColumns()) {
|
||||
if (this.timestamp != 0) {
|
||||
result = table.get(this.rowKey, column, this.timestamp,
|
||||
this.version);
|
||||
} else {
|
||||
result = table.get(this.rowKey, cols[i], this.version);
|
||||
result = table.get(this.rowKey, column, this.version);
|
||||
}
|
||||
|
||||
ConsoleTable.selectHead();
|
||||
for (int ii = 0; ii < result.length; ii++) {
|
||||
ConsoleTable.printLine(i, this.rowKey.toString(), cols[i].toString(),
|
||||
new String(result[ii], HConstants.UTF8_ENCODING));
|
||||
}
|
||||
ConsoleTable.selectFoot();
|
||||
}
|
||||
} else {
|
||||
int count = 0;
|
||||
ConsoleTable.selectHead();
|
||||
|
||||
for (Map.Entry<Text, byte[]> entry : table.getRow(this.rowKey).entrySet()) {
|
||||
byte[] value = entry.getValue();
|
||||
String cellData = new String(value, HConstants.UTF8_ENCODING);
|
||||
|
||||
if (entry.getKey().equals(HConstants.COL_REGIONINFO)) {
|
||||
DataInputBuffer inbuf = new DataInputBuffer();
|
||||
HRegionInfo info = new HRegionInfo();
|
||||
inbuf.reset(value, value.length);
|
||||
info.readFields(inbuf);
|
||||
cellData = String.valueOf(info.getRegionId());
|
||||
}
|
||||
|
||||
if (columns.contains(entry.getKey().toString()) || columns.contains("*")) {
|
||||
ConsoleTable.printLine(count, this.rowKey.toString(), entry.getKey()
|
||||
.toString(), cellData);
|
||||
for (int ii = 0; result != null && ii < result.length; ii++) {
|
||||
if (multiple) {
|
||||
formatter.row(new String [] {column.toString(),
|
||||
toString(column, result[ii])});
|
||||
} else {
|
||||
formatter.row(new String [] {toString(column, result[ii])});
|
||||
}
|
||||
count++;
|
||||
}
|
||||
}
|
||||
ConsoleTable.selectFoot();
|
||||
} else {
|
||||
formatter.header(isMultiple()? HEADER_COLUMN_CELL: null);
|
||||
for (Map.Entry<Text, byte[]> e: table.getRow(this.rowKey).entrySet()) {
|
||||
Text key = e.getKey();
|
||||
if (!this.columns.contains(key.toString())) {
|
||||
continue;
|
||||
}
|
||||
String cellData = toString(key, e.getValue());
|
||||
if (isMultiple()) {
|
||||
formatter.row(new String [] {key.toString(), cellData});
|
||||
} else {
|
||||
formatter.row(new String [] {cellData});
|
||||
}
|
||||
count++;
|
||||
}
|
||||
}
|
||||
formatter.footer();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
private void scanPrint(HTable table, HBaseAdmin admin) {
|
||||
|
||||
private String toString(final Text columnName, final byte [] cell)
|
||||
throws IOException {
|
||||
String result = null;
|
||||
if (columnName.equals(HConstants.COL_REGIONINFO) ||
|
||||
columnName.equals(HConstants.COL_SPLITA) ||
|
||||
columnName.equals(HConstants.COL_SPLITA)) {
|
||||
result = Writables.getHRegionInfoOrNull(cell).toString();
|
||||
} else if (columnName.equals(HConstants.COL_STARTCODE)) {
|
||||
result = Long.toString(Writables.bytesToLong(cell));
|
||||
} else {
|
||||
result = Writables.bytesToString(cell);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Data structure with columns to use scanning and whether or not the
|
||||
* scan could return more than one column.
|
||||
*/
|
||||
class ParsedColumns {
|
||||
private final List<Text> cols;
|
||||
private final boolean isMultiple;
|
||||
|
||||
ParsedColumns(final List<Text> columns) {
|
||||
this(columns, true);
|
||||
}
|
||||
|
||||
ParsedColumns(final List<Text> columns, final boolean isMultiple) {
|
||||
this.cols = columns;
|
||||
this.isMultiple = isMultiple;
|
||||
}
|
||||
|
||||
public List<Text> getColumns() {
|
||||
return this.cols;
|
||||
}
|
||||
|
||||
public boolean isMultiple() {
|
||||
return this.isMultiple;
|
||||
}
|
||||
}
|
||||
|
||||
private int scanPrint(HTable table, HBaseAdmin admin) {
|
||||
int count = 0;
|
||||
HScannerInterface scan = null;
|
||||
try {
|
||||
ParsedColumns parsedColumns = getColumns(admin, true);
|
||||
Text [] cols = parsedColumns.getColumns().toArray(new Text [] {});
|
||||
if (this.timestamp == 0) {
|
||||
scan = table.obtainScanner(getColumns(admin), this.rowKey);
|
||||
scan = table.obtainScanner(cols, this.rowKey);
|
||||
} else {
|
||||
scan = table.obtainScanner(getColumns(admin), this.rowKey, this.timestamp);
|
||||
scan = table.obtainScanner(cols, this.rowKey, this.timestamp);
|
||||
}
|
||||
|
||||
HStoreKey key = new HStoreKey();
|
||||
TreeMap<Text, byte[]> results = new TreeMap<Text, byte[]>();
|
||||
|
||||
ConsoleTable.selectHead();
|
||||
int count = 0;
|
||||
|
||||
TableFormatter formatter = TableFormatterFactory.get();
|
||||
// If only one column in query, then don't print out the column.
|
||||
formatter.header((parsedColumns.isMultiple())? HEADER: HEADER_ROW_CELL);
|
||||
while (scan.next(key, results) && checkLimit(count)) {
|
||||
Text rowKey = key.getRow();
|
||||
|
||||
Text r = key.getRow();
|
||||
for (Text columnKey : results.keySet()) {
|
||||
String cellData = new String(results.get(columnKey), HConstants.UTF8_ENCODING);
|
||||
ConsoleTable.printLine(count, rowKey.toString(), columnKey.toString(), cellData);
|
||||
String cellData = toString(columnKey, results.get(columnKey));
|
||||
if (parsedColumns.isMultiple()) {
|
||||
formatter.row(new String [] {r.toString(), columnKey.toString(),
|
||||
cellData});
|
||||
} else {
|
||||
// Don't print out the column since only one specified in query.
|
||||
formatter.row(new String [] {r.toString(), cellData});
|
||||
}
|
||||
count++;
|
||||
if (this.limit > 0 && count >= this.limit) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
count++;
|
||||
}
|
||||
ConsoleTable.selectFoot();
|
||||
formatter.footer();
|
||||
scan.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
public Text[] getColumns(HBaseAdmin admin) {
|
||||
Text[] cols = null;
|
||||
|
||||
/**
|
||||
* Make sense of the supplied list of columns.
|
||||
* @param admin Admin to use.
|
||||
* @return Interpretation of supplied list of columns.
|
||||
*/
|
||||
public ParsedColumns getColumns(final HBaseAdmin admin,
|
||||
final boolean scanning) {
|
||||
ParsedColumns result = null;
|
||||
try {
|
||||
if (this.columns.contains("*")) {
|
||||
HTableDescriptor[] tables = admin.listTables();
|
||||
if (this.tableName.equals(HConstants.ROOT_TABLE_NAME)
|
||||
|| this.tableName.equals(HConstants.META_TABLE_NAME)) {
|
||||
cols = HConstants.COLUMN_FAMILY_ARRAY;
|
||||
result =
|
||||
new ParsedColumns(Arrays.asList(HConstants.COLUMN_FAMILY_ARRAY));
|
||||
} else {
|
||||
HTableDescriptor[] tables = admin.listTables();
|
||||
for (int i = 0; i < tables.length; i++) {
|
||||
if (tables[i].getName().equals(this.tableName)) {
|
||||
cols = tables[i].families().keySet().toArray(new Text[] {});
|
||||
result = new ParsedColumns(new ArrayList<Text>(tables[i].
|
||||
families().keySet()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -171,19 +242,30 @@ public class SelectCommand extends BasicCommand {
|
||||
List<Text> tmpList = new ArrayList<Text>();
|
||||
for (int i = 0; i < this.columns.size(); i++) {
|
||||
Text column = null;
|
||||
if(this.columns.get(i).contains(":"))
|
||||
column = new Text(this.columns.get(i));
|
||||
else
|
||||
column = new Text(this.columns.get(i) + ":");
|
||||
|
||||
// Add '$' to column name if we are scanning. Scanners support
|
||||
// regex column names. Adding '$', the column becomes a
|
||||
// regex that does an explicit match on the supplied column name.
|
||||
// Otherwise, if the specified column is a column family, then
|
||||
// default behavior is to fetch all columns that have a matching
|
||||
// column family.
|
||||
column = (this.columns.get(i).contains(":"))?
|
||||
new Text(this.columns.get(i) + (scanning? "$": "")):
|
||||
new Text(this.columns.get(i) + ":" + (scanning? "$": ""));
|
||||
tmpList.add(column);
|
||||
}
|
||||
cols = tmpList.toArray(new Text[] {});
|
||||
result = new ParsedColumns(tmpList, tmpList.size() > 1);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return cols;
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* @return True if query contains multiple columns.
|
||||
*/
|
||||
private boolean isMultiple() {
|
||||
return this.columns.size() > 1 || this.columns.contains("*");
|
||||
}
|
||||
|
||||
private boolean checkLimit(int count) {
|
||||
@ -218,7 +300,17 @@ public class SelectCommand extends BasicCommand {
|
||||
this.rowKey = new Text(rowKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param version Set maximum versions for this selection
|
||||
*/
|
||||
public void setVersion(int version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws ParseException {
|
||||
// For debugging
|
||||
Parser parser = new Parser("select * from -ROOT-;");
|
||||
Command cmd = parser.terminatedCommand();
|
||||
ReturnMsg rm = cmd.execute(new HBaseConfiguration());
|
||||
}
|
||||
}
|
||||
|
@ -29,34 +29,32 @@ import org.apache.hadoop.hbase.HTableDescriptor;
|
||||
* Shows all available tables.
|
||||
*/
|
||||
public class ShowCommand extends BasicCommand {
|
||||
|
||||
private static final String [] HEADER = new String [] {"Table Name"};
|
||||
private String command;
|
||||
|
||||
public ReturnMsg execute(Configuration conf) {
|
||||
if (this.command == null)
|
||||
return new ReturnMsg(0, "Syntax error : Please check 'Show' syntax.");
|
||||
|
||||
if (this.command == null) {
|
||||
return new ReturnMsg(0, "Syntax error : Please check 'Show' syntax");
|
||||
}
|
||||
try {
|
||||
HBaseAdmin admin = new HBaseAdmin(conf);
|
||||
|
||||
int tableLength = 0;
|
||||
if ("tables".equals(this.command)) {
|
||||
HTableDescriptor[] tables = admin.listTables();
|
||||
tableLength = tables.length;
|
||||
if (tableLength == 0) {
|
||||
return new ReturnMsg(0, "Table not found.");
|
||||
return new ReturnMsg(0, "Table not found");
|
||||
}
|
||||
|
||||
ConsoleTable.printHead("Table Name");
|
||||
TableFormatter formatter = TableFormatterFactory.get();
|
||||
formatter.header(HEADER);
|
||||
for (int i = 0; i < tableLength; i++) {
|
||||
String tableName = tables[i].getName().toString();
|
||||
ConsoleTable.printTable(i, tableName);
|
||||
formatter.row(new String [] {tableName});
|
||||
}
|
||||
ConsoleTable.printFoot();
|
||||
|
||||
return new ReturnMsg(1, tableLength + " table(s) found.");
|
||||
formatter.footer();
|
||||
return new ReturnMsg(1, tableLength + " table(s) in set");
|
||||
}
|
||||
return new ReturnMsg(0, "Missing parameters. Please check 'Show' syntax.");
|
||||
return new ReturnMsg(0, "Missing parameters. Please check 'Show' syntax");
|
||||
} catch (IOException e) {
|
||||
return new ReturnMsg(0, "error msg : " + e.toString());
|
||||
}
|
||||
@ -65,4 +63,4 @@ public class ShowCommand extends BasicCommand {
|
||||
public void setArgument(String argument) {
|
||||
this.command = argument;
|
||||
}
|
||||
}
|
||||
}
|
42
src/java/org/apache/hadoop/hbase/shell/TableFormatter.java
Normal file
42
src/java/org/apache/hadoop/hbase/shell/TableFormatter.java
Normal file
@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Copyright 2007 The Apache Software Foundation
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.hadoop.hbase.shell;
|
||||
|
||||
/**
|
||||
* Interface implemented by table formatters outputting select results.
|
||||
*/
|
||||
public interface TableFormatter {
|
||||
/**
|
||||
* Output header.
|
||||
* @param titles Titles to emit.
|
||||
*/
|
||||
public void header(final String [] titles);
|
||||
|
||||
/**
|
||||
* Output footer.
|
||||
*/
|
||||
public void footer();
|
||||
|
||||
/**
|
||||
* Output a row.
|
||||
* @param cells
|
||||
*/
|
||||
public void row(final String [] cells);
|
||||
}
|
@ -0,0 +1,171 @@
|
||||
/**
|
||||
* Copyright 2007 The Apache Software Foundation
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.hadoop.hbase.shell;
|
||||
|
||||
import java.io.PrintStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
/**
|
||||
* Table formatter.
|
||||
* TODO: Make a factory that chooses the formatter to use based off
|
||||
* configuration. Read a property from hbase-site or from System properties.
|
||||
* For now, default is the internal AsciiTableFormatter.
|
||||
* TODO: Mysql has --skip-column-names and --silent which inserts a tab as
|
||||
* separator. Also has --html and --xml.
|
||||
*/
|
||||
public class TableFormatterFactory {
|
||||
private static final TableFormatterFactory factory =
|
||||
new TableFormatterFactory();
|
||||
private final TableFormatter formatter;
|
||||
|
||||
private TableFormatterFactory() {
|
||||
this.formatter = new AsciiTableFormatter();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Configured table formatter.
|
||||
*/
|
||||
public static TableFormatter get() {
|
||||
return factory.formatter;
|
||||
}
|
||||
|
||||
/*
|
||||
* Formmatter that outputs data in UTF-8 inside an ASCII table on STDOUT.
|
||||
* If only a single cell result, then no formatting is done. Presumption is
|
||||
* that client manages serial access outputting tables.
|
||||
*/
|
||||
private class AsciiTableFormatter implements TableFormatter {
|
||||
private PrintStream out;
|
||||
private static final String COLUMN_DELIMITER = "| ";
|
||||
private static final String COLUMN_CLOSER = "|";
|
||||
private static final int DEFAULT_COLUMN_WIDTH = 26;
|
||||
// Width is a line of content + delimiter
|
||||
private int columnWidth = DEFAULT_COLUMN_WIDTH;
|
||||
// Amount of width to use for a line of content.
|
||||
private int columnContentWidth =
|
||||
DEFAULT_COLUMN_WIDTH - COLUMN_DELIMITER.length();
|
||||
// COLUMN_LINE is put at head and foot of a column and per column, is drawn
|
||||
// as row delimiter
|
||||
private String columnHorizLine;
|
||||
private final String COLUMN_HORIZ_LINE_CLOSER = "+";
|
||||
// Used padding content to fill column
|
||||
private final String PADDING_CHAR = " ";
|
||||
// True if we are to output no formatting.
|
||||
private boolean noFormatting = false;
|
||||
|
||||
/*
|
||||
* Constructor.
|
||||
*/
|
||||
protected AsciiTableFormatter() {
|
||||
try {
|
||||
this.out = new PrintStream(System.out, true, "UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException("Failed setting output to UTF-8", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param titles List of titles. Pass null if no formatting (i.e.
|
||||
* no header, no footer, etc.
|
||||
*/
|
||||
public void header(String[] titles) {
|
||||
if (titles == null) {
|
||||
// print nothing.
|
||||
this.noFormatting = true;
|
||||
return;
|
||||
}
|
||||
// Calculate width of columns.
|
||||
this.columnWidth = titles.length == 1? 3 * DEFAULT_COLUMN_WIDTH:
|
||||
titles.length == 2? 39: DEFAULT_COLUMN_WIDTH;
|
||||
this.columnContentWidth = this.columnWidth - COLUMN_DELIMITER.length();
|
||||
// Create the horizontal line to draw across the top of each column.
|
||||
this.columnHorizLine = calculateColumnHorizLine(this.columnWidth);
|
||||
// Print out a column topper per column.
|
||||
printRowDelimiter(titles.length);
|
||||
row(titles);
|
||||
}
|
||||
|
||||
public void row(String [] cells) {
|
||||
if (this.noFormatting) {
|
||||
this.out.print(cells[0]);
|
||||
return;
|
||||
}
|
||||
// Ok. Output cells a line at a time w/ delimiters between cells.
|
||||
int [] indexes = new int[cells.length];
|
||||
for (int i = 0; i < indexes.length; i++) {
|
||||
indexes[i] = 0;
|
||||
}
|
||||
int allFinished = 0;
|
||||
while (allFinished < indexes.length) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
for (int i = 0; i < cells.length; i++) {
|
||||
sb.append(COLUMN_DELIMITER);
|
||||
int offset = indexes[i];
|
||||
if (offset + this.columnContentWidth >= cells[i].length()) {
|
||||
String substr = cells[i].substring(offset);
|
||||
if (substr.length() > 0) {
|
||||
// This column is finished
|
||||
allFinished++;
|
||||
sb.append(substr);
|
||||
}
|
||||
for (int j = 0; j < this.columnContentWidth - substr.length(); j++) {
|
||||
sb.append(PADDING_CHAR);
|
||||
}
|
||||
indexes[i] = cells[i].length();
|
||||
} else {
|
||||
String substr = cells[i].substring(indexes[i],
|
||||
indexes[i] + this.columnContentWidth);
|
||||
indexes[i] += this.columnContentWidth;
|
||||
sb.append(substr);
|
||||
}
|
||||
}
|
||||
sb.append(COLUMN_CLOSER);
|
||||
this.out.println(sb.toString());
|
||||
}
|
||||
printRowDelimiter(cells.length);
|
||||
}
|
||||
|
||||
public void footer() {
|
||||
if (this.noFormatting) {
|
||||
// If no formatting, output a newline to delimit cell and the
|
||||
// result summary output at end of every command.
|
||||
this.out.println();
|
||||
}
|
||||
// We're done. Clear flag.
|
||||
this.noFormatting = false;
|
||||
}
|
||||
|
||||
private void printRowDelimiter(final int columnCount) {
|
||||
for (int i = 0; i < columnCount; i++) {
|
||||
this.out.print(this.columnHorizLine);
|
||||
}
|
||||
this.out.println(COLUMN_HORIZ_LINE_CLOSER);
|
||||
}
|
||||
|
||||
private String calculateColumnHorizLine(final int width) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append("+");
|
||||
for (int i = 1; i < width; i++) {
|
||||
sb.append("-");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
}
|
@ -676,6 +676,7 @@ public class Parser implements ParserConstants {
|
||||
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
|
||||
case NUM_VERSIONS:
|
||||
jj_consume_token(NUM_VERSIONS);
|
||||
jj_consume_token(EQUALS);
|
||||
numVersion = Number();
|
||||
select.setVersion(numVersion);
|
||||
break;
|
||||
@ -969,6 +970,11 @@ public class Parser implements ParserConstants {
|
||||
finally { jj_save(0, xla); }
|
||||
}
|
||||
|
||||
final private boolean jj_3R_11() {
|
||||
if (jj_scan_token(ID)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
final private boolean jj_3R_10() {
|
||||
Token xsp;
|
||||
xsp = jj_scanpos;
|
||||
@ -995,11 +1001,6 @@ public class Parser implements ParserConstants {
|
||||
return false;
|
||||
}
|
||||
|
||||
final private boolean jj_3R_11() {
|
||||
if (jj_scan_token(ID)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public ParserTokenManager token_source;
|
||||
SimpleCharStream jj_input_stream;
|
||||
public Token token, jj_nt;
|
||||
|
@ -38,36 +38,36 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0)
|
||||
{
|
||||
case 0:
|
||||
if ((active0 & 0x800000000L) != 0L)
|
||||
return 31;
|
||||
return 32;
|
||||
if ((active0 & 0xfffe03ffffffe0L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 1:
|
||||
if ((active0 & 0x200002000L) != 0L)
|
||||
return 0;
|
||||
return 1;
|
||||
if ((active0 & 0xfffe01ffffdfe0L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 1;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 2:
|
||||
if ((active0 & 0x40000104004000L) != 0L)
|
||||
return 0;
|
||||
return 1;
|
||||
if ((active0 & 0xbffe00fbff9fe0L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 2;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 3:
|
||||
if ((active0 & 0x100002029720L) != 0L)
|
||||
return 0;
|
||||
return 1;
|
||||
if ((active0 & 0xbfee00f9fd08c0L) != 0L)
|
||||
{
|
||||
if (jjmatchedPos != 3)
|
||||
@ -75,113 +75,113 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0)
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 3;
|
||||
}
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 4:
|
||||
if ((active0 & 0x2000810400c0L) != 0L)
|
||||
return 0;
|
||||
if ((active0 & 0xbfce0078f90a00L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 4;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x2000810400c0L) != 0L)
|
||||
return 1;
|
||||
return -1;
|
||||
case 5:
|
||||
if ((active0 & 0x80400008390800L) != 0L)
|
||||
return 0;
|
||||
if ((active0 & 0x3f8e0070c00200L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 5;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x80400008390800L) != 0L)
|
||||
return 1;
|
||||
return -1;
|
||||
case 6:
|
||||
if ((active0 & 0x400000L) != 0L)
|
||||
return 0;
|
||||
if ((active0 & 0x3f8e0070800200L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 6;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x400000L) != 0L)
|
||||
return 1;
|
||||
return -1;
|
||||
case 7:
|
||||
if ((active0 & 0x10000000800200L) != 0L)
|
||||
return 0;
|
||||
if ((active0 & 0x2f8e0070000000L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 7;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x10000000800200L) != 0L)
|
||||
return 1;
|
||||
return -1;
|
||||
case 8:
|
||||
if ((active0 & 0x800020000000L) != 0L)
|
||||
return 0;
|
||||
if ((active0 & 0x2f0e0050000000L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 8;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x800020000000L) != 0L)
|
||||
return 1;
|
||||
return -1;
|
||||
case 9:
|
||||
if ((active0 & 0x40000000000L) != 0L)
|
||||
return 0;
|
||||
if ((active0 & 0x2f0a0050000000L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 9;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x40000000000L) != 0L)
|
||||
return 1;
|
||||
return -1;
|
||||
case 10:
|
||||
if ((active0 & 0x29080000000000L) != 0L)
|
||||
return 0;
|
||||
return 1;
|
||||
if ((active0 & 0x6020050000000L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 10;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 11:
|
||||
if ((active0 & 0x20040000000L) != 0L)
|
||||
return 0;
|
||||
if ((active0 & 0x6000010000000L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 11;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x20040000000L) != 0L)
|
||||
return 1;
|
||||
return -1;
|
||||
case 12:
|
||||
if ((active0 & 0x6000010000000L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 12;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 13:
|
||||
if ((active0 & 0x10000000L) != 0L)
|
||||
return 0;
|
||||
if ((active0 & 0x6000000000000L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 13;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x10000000L) != 0L)
|
||||
return 1;
|
||||
return -1;
|
||||
case 14:
|
||||
if ((active0 & 0x6000000000000L) != 0L)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 14;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 15:
|
||||
@ -189,7 +189,7 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 15;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 16:
|
||||
@ -197,7 +197,7 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 16;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 17:
|
||||
@ -205,7 +205,7 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 17;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 18:
|
||||
@ -213,7 +213,7 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 18;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
case 19:
|
||||
@ -221,10 +221,10 @@ private final int jjStopStringLiteralDfa_0(int pos, long active0)
|
||||
{
|
||||
jjmatchedKind = 56;
|
||||
jjmatchedPos = 19;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
if ((active0 & 0x2000000000000L) != 0L)
|
||||
return 0;
|
||||
return 1;
|
||||
return -1;
|
||||
default :
|
||||
return -1;
|
||||
@ -261,7 +261,7 @@ private final int jjMoveStringLiteralDfa0_0()
|
||||
case 44:
|
||||
return jjStopAtPos(0, 34);
|
||||
case 46:
|
||||
return jjStartNfaWithStates_0(0, 35, 31);
|
||||
return jjStartNfaWithStates_0(0, 35, 32);
|
||||
case 59:
|
||||
return jjStopAtPos(0, 62);
|
||||
case 60:
|
||||
@ -323,7 +323,7 @@ private final int jjMoveStringLiteralDfa0_0()
|
||||
case 119:
|
||||
return jjMoveStringLiteralDfa1_0(0x1000000L);
|
||||
default :
|
||||
return jjMoveNfa_0(1, 0);
|
||||
return jjMoveNfa_0(0, 0);
|
||||
}
|
||||
}
|
||||
private final int jjMoveStringLiteralDfa1_0(long active0)
|
||||
@ -366,12 +366,12 @@ private final int jjMoveStringLiteralDfa1_0(long active0)
|
||||
case 82:
|
||||
case 114:
|
||||
if ((active0 & 0x200000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(1, 33, 0);
|
||||
return jjStartNfaWithStates_0(1, 33, 1);
|
||||
return jjMoveStringLiteralDfa2_0(active0, 0x2001800L);
|
||||
case 83:
|
||||
case 115:
|
||||
if ((active0 & 0x2000L) != 0L)
|
||||
return jjStartNfaWithStates_0(1, 13, 0);
|
||||
return jjStartNfaWithStates_0(1, 13, 1);
|
||||
break;
|
||||
case 84:
|
||||
case 116:
|
||||
@ -412,9 +412,9 @@ private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
|
||||
case 68:
|
||||
case 100:
|
||||
if ((active0 & 0x100000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(2, 32, 0);
|
||||
return jjStartNfaWithStates_0(2, 32, 1);
|
||||
else if ((active0 & 0x40000000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(2, 54, 0);
|
||||
return jjStartNfaWithStates_0(2, 54, 1);
|
||||
break;
|
||||
case 69:
|
||||
case 101:
|
||||
@ -437,7 +437,7 @@ private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
|
||||
case 82:
|
||||
case 114:
|
||||
if ((active0 & 0x4000L) != 0L)
|
||||
return jjStartNfaWithStates_0(2, 14, 0);
|
||||
return jjStartNfaWithStates_0(2, 14, 1);
|
||||
break;
|
||||
case 83:
|
||||
case 115:
|
||||
@ -451,7 +451,7 @@ private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
|
||||
case 87:
|
||||
case 119:
|
||||
if ((active0 & 0x4000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(2, 26, 0);
|
||||
return jjStartNfaWithStates_0(2, 26, 1);
|
||||
break;
|
||||
case 88:
|
||||
case 120:
|
||||
@ -491,7 +491,7 @@ private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
|
||||
case 69:
|
||||
case 101:
|
||||
if ((active0 & 0x100000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(3, 44, 0);
|
||||
return jjStartNfaWithStates_0(3, 44, 1);
|
||||
return jjMoveStringLiteralDfa4_0(active0, 0x20190040L);
|
||||
case 73:
|
||||
case 105:
|
||||
@ -502,7 +502,7 @@ private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
|
||||
case 77:
|
||||
case 109:
|
||||
if ((active0 & 0x2000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(3, 25, 0);
|
||||
return jjStartNfaWithStates_0(3, 25, 1);
|
||||
return jjMoveStringLiteralDfa4_0(active0, 0x800000000000L);
|
||||
case 78:
|
||||
case 110:
|
||||
@ -510,14 +510,14 @@ private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
|
||||
case 79:
|
||||
case 111:
|
||||
if ((active0 & 0x20000L) != 0L)
|
||||
return jjStartNfaWithStates_0(3, 17, 0);
|
||||
return jjStartNfaWithStates_0(3, 17, 1);
|
||||
return jjMoveStringLiteralDfa4_0(active0, 0x5400000000000L);
|
||||
case 80:
|
||||
case 112:
|
||||
if ((active0 & 0x20L) != 0L)
|
||||
return jjStartNfaWithStates_0(3, 5, 0);
|
||||
return jjStartNfaWithStates_0(3, 5, 1);
|
||||
else if ((active0 & 0x1000L) != 0L)
|
||||
return jjStartNfaWithStates_0(3, 12, 0);
|
||||
return jjStartNfaWithStates_0(3, 12, 1);
|
||||
return jjMoveStringLiteralDfa4_0(active0, 0x80000000000L);
|
||||
case 82:
|
||||
case 114:
|
||||
@ -525,7 +525,7 @@ private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
|
||||
case 84:
|
||||
case 116:
|
||||
if ((active0 & 0x8000L) != 0L)
|
||||
return jjStartNfaWithStates_0(3, 15, 0);
|
||||
return jjStartNfaWithStates_0(3, 15, 1);
|
||||
return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000L);
|
||||
case 85:
|
||||
case 117:
|
||||
@ -533,7 +533,7 @@ private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
|
||||
case 87:
|
||||
case 119:
|
||||
if ((active0 & 0x100L) != 0L)
|
||||
return jjStartNfaWithStates_0(3, 8, 0);
|
||||
return jjStartNfaWithStates_0(3, 8, 1);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
@ -560,9 +560,9 @@ private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
|
||||
case 69:
|
||||
case 101:
|
||||
if ((active0 & 0x40000L) != 0L)
|
||||
return jjStartNfaWithStates_0(4, 18, 0);
|
||||
return jjStartNfaWithStates_0(4, 18, 1);
|
||||
else if ((active0 & 0x1000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(4, 24, 0);
|
||||
return jjStartNfaWithStates_0(4, 24, 1);
|
||||
return jjMoveStringLiteralDfa5_0(active0, 0x20800008000000L);
|
||||
case 71:
|
||||
case 103:
|
||||
@ -573,7 +573,7 @@ private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
|
||||
case 75:
|
||||
case 107:
|
||||
if ((active0 & 0x200000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(4, 45, 0);
|
||||
return jjStartNfaWithStates_0(4, 45, 1);
|
||||
break;
|
||||
case 76:
|
||||
case 108:
|
||||
@ -587,9 +587,9 @@ private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
|
||||
case 82:
|
||||
case 114:
|
||||
if ((active0 & 0x40L) != 0L)
|
||||
return jjStartNfaWithStates_0(4, 6, 0);
|
||||
return jjStartNfaWithStates_0(4, 6, 1);
|
||||
else if ((active0 & 0x80L) != 0L)
|
||||
return jjStartNfaWithStates_0(4, 7, 0);
|
||||
return jjStartNfaWithStates_0(4, 7, 1);
|
||||
return jjMoveStringLiteralDfa5_0(active0, 0x480000010200L);
|
||||
case 83:
|
||||
case 115:
|
||||
@ -597,7 +597,7 @@ private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
|
||||
case 84:
|
||||
case 116:
|
||||
if ((active0 & 0x80000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(4, 31, 0);
|
||||
return jjStartNfaWithStates_0(4, 31, 1);
|
||||
return jjMoveStringLiteralDfa5_0(active0, 0x2000000880800L);
|
||||
case 85:
|
||||
case 117:
|
||||
@ -630,18 +630,18 @@ private final int jjMoveStringLiteralDfa5_0(long old0, long active0)
|
||||
case 68:
|
||||
case 100:
|
||||
if ((active0 & 0x400000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(5, 46, 0);
|
||||
return jjStartNfaWithStates_0(5, 46, 1);
|
||||
break;
|
||||
case 69:
|
||||
case 101:
|
||||
if ((active0 & 0x800L) != 0L)
|
||||
return jjStartNfaWithStates_0(5, 11, 0);
|
||||
return jjStartNfaWithStates_0(5, 11, 1);
|
||||
else if ((active0 & 0x80000L) != 0L)
|
||||
return jjStartNfaWithStates_0(5, 19, 0);
|
||||
return jjStartNfaWithStates_0(5, 19, 1);
|
||||
else if ((active0 & 0x200000L) != 0L)
|
||||
return jjStartNfaWithStates_0(5, 21, 0);
|
||||
return jjStartNfaWithStates_0(5, 21, 1);
|
||||
else if ((active0 & 0x80000000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(5, 55, 0);
|
||||
return jjStartNfaWithStates_0(5, 55, 1);
|
||||
return jjMoveStringLiteralDfa6_0(active0, 0xe0040000000L);
|
||||
case 70:
|
||||
case 102:
|
||||
@ -664,14 +664,14 @@ private final int jjMoveStringLiteralDfa5_0(long old0, long active0)
|
||||
case 83:
|
||||
case 115:
|
||||
if ((active0 & 0x8000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(5, 27, 0);
|
||||
return jjStartNfaWithStates_0(5, 27, 1);
|
||||
break;
|
||||
case 84:
|
||||
case 116:
|
||||
if ((active0 & 0x10000L) != 0L)
|
||||
return jjStartNfaWithStates_0(5, 16, 0);
|
||||
return jjStartNfaWithStates_0(5, 16, 1);
|
||||
else if ((active0 & 0x100000L) != 0L)
|
||||
return jjStartNfaWithStates_0(5, 20, 0);
|
||||
return jjStartNfaWithStates_0(5, 20, 1);
|
||||
return jjMoveStringLiteralDfa6_0(active0, 0x20000000L);
|
||||
default :
|
||||
break;
|
||||
@ -700,7 +700,7 @@ private final int jjMoveStringLiteralDfa6_0(long old0, long active0)
|
||||
case 69:
|
||||
case 101:
|
||||
if ((active0 & 0x400000L) != 0L)
|
||||
return jjStartNfaWithStates_0(6, 22, 0);
|
||||
return jjStartNfaWithStates_0(6, 22, 1);
|
||||
break;
|
||||
case 70:
|
||||
case 102:
|
||||
@ -748,17 +748,17 @@ private final int jjMoveStringLiteralDfa7_0(long old0, long active0)
|
||||
case 69:
|
||||
case 101:
|
||||
if ((active0 & 0x200L) != 0L)
|
||||
return jjStartNfaWithStates_0(7, 9, 0);
|
||||
return jjStartNfaWithStates_0(7, 9, 1);
|
||||
return jjMoveStringLiteralDfa8_0(active0, 0x4000000000000L);
|
||||
case 71:
|
||||
case 103:
|
||||
if ((active0 & 0x800000L) != 0L)
|
||||
return jjStartNfaWithStates_0(7, 23, 0);
|
||||
return jjStartNfaWithStates_0(7, 23, 1);
|
||||
return jjMoveStringLiteralDfa8_0(active0, 0x2040000000000L);
|
||||
case 72:
|
||||
case 104:
|
||||
if ((active0 & 0x10000000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(7, 52, 0);
|
||||
return jjStartNfaWithStates_0(7, 52, 1);
|
||||
break;
|
||||
case 76:
|
||||
case 108:
|
||||
@ -802,7 +802,7 @@ private final int jjMoveStringLiteralDfa8_0(long old0, long active0)
|
||||
case 80:
|
||||
case 112:
|
||||
if ((active0 & 0x20000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(8, 29, 0);
|
||||
return jjStartNfaWithStates_0(8, 29, 1);
|
||||
break;
|
||||
case 84:
|
||||
case 116:
|
||||
@ -810,7 +810,7 @@ private final int jjMoveStringLiteralDfa8_0(long old0, long active0)
|
||||
case 89:
|
||||
case 121:
|
||||
if ((active0 & 0x800000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(8, 47, 0);
|
||||
return jjStartNfaWithStates_0(8, 47, 1);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
@ -839,7 +839,7 @@ private final int jjMoveStringLiteralDfa9_0(long old0, long active0)
|
||||
case 72:
|
||||
case 104:
|
||||
if ((active0 & 0x40000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(9, 42, 0);
|
||||
return jjStartNfaWithStates_0(9, 42, 1);
|
||||
break;
|
||||
case 73:
|
||||
case 105:
|
||||
@ -872,7 +872,7 @@ private final int jjMoveStringLiteralDfa10_0(long old0, long active0)
|
||||
case 69:
|
||||
case 101:
|
||||
if ((active0 & 0x8000000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(10, 51, 0);
|
||||
return jjStartNfaWithStates_0(10, 51, 1);
|
||||
break;
|
||||
case 76:
|
||||
case 108:
|
||||
@ -880,17 +880,17 @@ private final int jjMoveStringLiteralDfa10_0(long old0, long active0)
|
||||
case 78:
|
||||
case 110:
|
||||
if ((active0 & 0x80000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(10, 43, 0);
|
||||
return jjStartNfaWithStates_0(10, 43, 1);
|
||||
return jjMoveStringLiteralDfa11_0(active0, 0x20040000000L);
|
||||
case 82:
|
||||
case 114:
|
||||
if ((active0 & 0x1000000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(10, 48, 0);
|
||||
return jjStartNfaWithStates_0(10, 48, 1);
|
||||
break;
|
||||
case 83:
|
||||
case 115:
|
||||
if ((active0 & 0x20000000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(10, 53, 0);
|
||||
return jjStartNfaWithStates_0(10, 53, 1);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
@ -920,9 +920,9 @@ private final int jjMoveStringLiteralDfa11_0(long old0, long active0)
|
||||
case 83:
|
||||
case 115:
|
||||
if ((active0 & 0x40000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(11, 30, 0);
|
||||
return jjStartNfaWithStates_0(11, 30, 1);
|
||||
else if ((active0 & 0x20000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(11, 41, 0);
|
||||
return jjStartNfaWithStates_0(11, 41, 1);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
@ -971,7 +971,7 @@ private final int jjMoveStringLiteralDfa13_0(long old0, long active0)
|
||||
case 83:
|
||||
case 115:
|
||||
if ((active0 & 0x10000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(13, 28, 0);
|
||||
return jjStartNfaWithStates_0(13, 28, 1);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
@ -1105,7 +1105,7 @@ private final int jjMoveStringLiteralDfa19_0(long old0, long active0)
|
||||
case 82:
|
||||
case 114:
|
||||
if ((active0 & 0x2000000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(19, 49, 0);
|
||||
return jjStartNfaWithStates_0(19, 49, 1);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
@ -1126,7 +1126,7 @@ private final int jjMoveStringLiteralDfa20_0(long old0, long active0)
|
||||
case 82:
|
||||
case 114:
|
||||
if ((active0 & 0x4000000000000L) != 0L)
|
||||
return jjStartNfaWithStates_0(20, 50, 0);
|
||||
return jjStartNfaWithStates_0(20, 50, 1);
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
@ -1170,7 +1170,7 @@ private final int jjMoveNfa_0(int startState, int curPos)
|
||||
{
|
||||
int[] nextStates;
|
||||
int startsAt = 0;
|
||||
jjnewStateCnt = 31;
|
||||
jjnewStateCnt = 32;
|
||||
int i = 1;
|
||||
jjstateSet[0] = startState;
|
||||
int j, kind = 0x7fffffff;
|
||||
@ -1185,173 +1185,177 @@ private final int jjMoveNfa_0(int startState, int curPos)
|
||||
{
|
||||
switch(jjstateSet[--i])
|
||||
{
|
||||
case 31:
|
||||
case 0:
|
||||
if ((0x3ff000000000000L & l) != 0L)
|
||||
{
|
||||
if (kind > 57)
|
||||
kind = 57;
|
||||
jjCheckNAddStates(0, 6);
|
||||
}
|
||||
else if ((0x400e00000000000L & l) != 0L)
|
||||
{
|
||||
if (kind > 56)
|
||||
kind = 56;
|
||||
jjCheckNAdd(1);
|
||||
}
|
||||
else if (curChar == 39)
|
||||
jjCheckNAddStates(7, 9);
|
||||
else if (curChar == 34)
|
||||
jjCheckNAdd(8);
|
||||
if (curChar == 46)
|
||||
jjCheckNAdd(3);
|
||||
break;
|
||||
case 32:
|
||||
if ((0x7ffe00000000000L & l) != 0L)
|
||||
{
|
||||
if (kind > 56)
|
||||
kind = 56;
|
||||
jjCheckNAdd(0);
|
||||
jjCheckNAdd(1);
|
||||
}
|
||||
if ((0x3ff000000000000L & l) != 0L)
|
||||
{
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAddTwoStates(2, 3);
|
||||
jjCheckNAddTwoStates(3, 4);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if ((0x7ffe00000000000L & l) != 0L)
|
||||
{
|
||||
if (kind > 56)
|
||||
kind = 56;
|
||||
jjCheckNAdd(0);
|
||||
}
|
||||
else if (curChar == 39)
|
||||
jjCheckNAddStates(0, 2);
|
||||
else if (curChar == 34)
|
||||
jjCheckNAdd(7);
|
||||
if ((0x3ff000000000000L & l) != 0L)
|
||||
{
|
||||
if (kind > 57)
|
||||
kind = 57;
|
||||
jjCheckNAddStates(3, 9);
|
||||
}
|
||||
else if (curChar == 46)
|
||||
jjCheckNAdd(2);
|
||||
break;
|
||||
case 0:
|
||||
if ((0x7ffe00000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 56)
|
||||
kind = 56;
|
||||
jjCheckNAdd(0);
|
||||
jjCheckNAdd(1);
|
||||
break;
|
||||
case 2:
|
||||
if (curChar == 46)
|
||||
jjCheckNAdd(3);
|
||||
break;
|
||||
case 3:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAddTwoStates(2, 3);
|
||||
break;
|
||||
case 4:
|
||||
if ((0x280000000000L & l) != 0L)
|
||||
jjCheckNAdd(5);
|
||||
jjCheckNAddTwoStates(3, 4);
|
||||
break;
|
||||
case 5:
|
||||
if ((0x280000000000L & l) != 0L)
|
||||
jjCheckNAdd(6);
|
||||
break;
|
||||
case 6:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAdd(5);
|
||||
break;
|
||||
case 6:
|
||||
if (curChar == 34)
|
||||
jjCheckNAdd(7);
|
||||
jjCheckNAdd(6);
|
||||
break;
|
||||
case 7:
|
||||
if ((0xfffffffbffffffffL & l) != 0L)
|
||||
jjCheckNAddTwoStates(7, 8);
|
||||
if (curChar == 34)
|
||||
jjCheckNAdd(8);
|
||||
break;
|
||||
case 8:
|
||||
if ((0xfffffffbffffffffL & l) != 0L)
|
||||
jjCheckNAddTwoStates(8, 9);
|
||||
break;
|
||||
case 9:
|
||||
if (curChar == 34 && kind > 60)
|
||||
kind = 60;
|
||||
break;
|
||||
case 9:
|
||||
if (curChar == 39)
|
||||
jjCheckNAddStates(0, 2);
|
||||
break;
|
||||
case 10:
|
||||
if ((0xffffff7fffffffffL & l) != 0L)
|
||||
jjCheckNAddStates(0, 2);
|
||||
if (curChar == 39)
|
||||
jjCheckNAddStates(7, 9);
|
||||
break;
|
||||
case 11:
|
||||
if (curChar == 39)
|
||||
jjCheckNAddStates(10, 12);
|
||||
if ((0xffffff7fffffffffL & l) != 0L)
|
||||
jjCheckNAddStates(7, 9);
|
||||
break;
|
||||
case 12:
|
||||
if (curChar == 39)
|
||||
jjstateSet[jjnewStateCnt++] = 11;
|
||||
jjCheckNAddStates(10, 12);
|
||||
break;
|
||||
case 13:
|
||||
if (curChar == 39)
|
||||
jjstateSet[jjnewStateCnt++] = 12;
|
||||
break;
|
||||
case 14:
|
||||
if ((0xffffff7fffffffffL & l) != 0L)
|
||||
jjCheckNAddStates(10, 12);
|
||||
break;
|
||||
case 14:
|
||||
case 15:
|
||||
if (curChar == 39 && kind > 61)
|
||||
kind = 61;
|
||||
break;
|
||||
case 15:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 57)
|
||||
kind = 57;
|
||||
jjCheckNAddStates(3, 9);
|
||||
break;
|
||||
case 16:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 57)
|
||||
kind = 57;
|
||||
jjCheckNAdd(16);
|
||||
jjCheckNAddStates(0, 6);
|
||||
break;
|
||||
case 17:
|
||||
if ((0x3ff000000000000L & l) != 0L)
|
||||
jjCheckNAddTwoStates(17, 18);
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 57)
|
||||
kind = 57;
|
||||
jjCheckNAdd(17);
|
||||
break;
|
||||
case 18:
|
||||
if (curChar == 46)
|
||||
jjCheckNAdd(19);
|
||||
if ((0x3ff000000000000L & l) != 0L)
|
||||
jjCheckNAddTwoStates(18, 19);
|
||||
break;
|
||||
case 19:
|
||||
if (curChar == 46)
|
||||
jjCheckNAdd(20);
|
||||
break;
|
||||
case 20:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAddTwoStates(19, 20);
|
||||
break;
|
||||
case 21:
|
||||
if ((0x280000000000L & l) != 0L)
|
||||
jjCheckNAdd(22);
|
||||
jjCheckNAddTwoStates(20, 21);
|
||||
break;
|
||||
case 22:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAdd(22);
|
||||
if ((0x280000000000L & l) != 0L)
|
||||
jjCheckNAdd(23);
|
||||
break;
|
||||
case 23:
|
||||
if ((0x3ff000000000000L & l) != 0L)
|
||||
jjCheckNAddTwoStates(23, 24);
|
||||
break;
|
||||
case 25:
|
||||
if ((0x280000000000L & l) != 0L)
|
||||
jjCheckNAdd(26);
|
||||
break;
|
||||
case 26:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAdd(26);
|
||||
jjCheckNAdd(23);
|
||||
break;
|
||||
case 24:
|
||||
if ((0x3ff000000000000L & l) != 0L)
|
||||
jjCheckNAddTwoStates(24, 25);
|
||||
break;
|
||||
case 26:
|
||||
if ((0x280000000000L & l) != 0L)
|
||||
jjCheckNAdd(27);
|
||||
break;
|
||||
case 27:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAddTwoStates(27, 28);
|
||||
jjCheckNAdd(27);
|
||||
break;
|
||||
case 29:
|
||||
if ((0x280000000000L & l) != 0L)
|
||||
jjCheckNAdd(30);
|
||||
break;
|
||||
case 30:
|
||||
case 28:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAdd(30);
|
||||
jjCheckNAddTwoStates(28, 29);
|
||||
break;
|
||||
case 30:
|
||||
if ((0x280000000000L & l) != 0L)
|
||||
jjCheckNAdd(31);
|
||||
break;
|
||||
case 31:
|
||||
if ((0x3ff000000000000L & l) == 0L)
|
||||
break;
|
||||
if (kind > 58)
|
||||
kind = 58;
|
||||
jjCheckNAdd(31);
|
||||
break;
|
||||
default : break;
|
||||
}
|
||||
@ -1364,43 +1368,43 @@ private final int jjMoveNfa_0(int startState, int curPos)
|
||||
{
|
||||
switch(jjstateSet[--i])
|
||||
{
|
||||
case 31:
|
||||
case 0:
|
||||
if ((0x7fffffe87fffffeL & l) == 0L)
|
||||
break;
|
||||
if (kind > 56)
|
||||
kind = 56;
|
||||
jjCheckNAdd(0);
|
||||
jjCheckNAdd(1);
|
||||
break;
|
||||
case 32:
|
||||
case 1:
|
||||
if ((0x7fffffe87fffffeL & l) == 0L)
|
||||
break;
|
||||
if (kind > 56)
|
||||
kind = 56;
|
||||
jjCheckNAdd(0);
|
||||
jjCheckNAdd(1);
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
if ((0x2000000020L & l) != 0L)
|
||||
jjAddStates(13, 14);
|
||||
break;
|
||||
case 7:
|
||||
case 8:
|
||||
jjAddStates(15, 16);
|
||||
break;
|
||||
case 10:
|
||||
jjCheckNAddStates(0, 2);
|
||||
case 11:
|
||||
jjCheckNAddStates(7, 9);
|
||||
break;
|
||||
case 13:
|
||||
case 14:
|
||||
jjCheckNAddStates(10, 12);
|
||||
break;
|
||||
case 20:
|
||||
case 21:
|
||||
if ((0x2000000020L & l) != 0L)
|
||||
jjAddStates(17, 18);
|
||||
break;
|
||||
case 24:
|
||||
case 25:
|
||||
if ((0x2000000020L & l) != 0L)
|
||||
jjAddStates(19, 20);
|
||||
break;
|
||||
case 28:
|
||||
case 29:
|
||||
if ((0x2000000020L & l) != 0L)
|
||||
jjAddStates(21, 22);
|
||||
break;
|
||||
@ -1416,15 +1420,15 @@ private final int jjMoveNfa_0(int startState, int curPos)
|
||||
{
|
||||
switch(jjstateSet[--i])
|
||||
{
|
||||
case 7:
|
||||
case 8:
|
||||
if ((jjbitVec0[i2] & l2) != 0L)
|
||||
jjAddStates(15, 16);
|
||||
break;
|
||||
case 10:
|
||||
case 11:
|
||||
if ((jjbitVec0[i2] & l2) != 0L)
|
||||
jjCheckNAddStates(0, 2);
|
||||
jjCheckNAddStates(7, 9);
|
||||
break;
|
||||
case 13:
|
||||
case 14:
|
||||
if ((jjbitVec0[i2] & l2) != 0L)
|
||||
jjCheckNAddStates(10, 12);
|
||||
break;
|
||||
@ -1439,15 +1443,15 @@ private final int jjMoveNfa_0(int startState, int curPos)
|
||||
kind = 0x7fffffff;
|
||||
}
|
||||
++curPos;
|
||||
if ((i = jjnewStateCnt) == (startsAt = 31 - (jjnewStateCnt = startsAt)))
|
||||
if ((i = jjnewStateCnt) == (startsAt = 32 - (jjnewStateCnt = startsAt)))
|
||||
return curPos;
|
||||
try { curChar = input_stream.readChar(); }
|
||||
catch(java.io.IOException e) { return curPos; }
|
||||
}
|
||||
}
|
||||
static final int[] jjnextStates = {
|
||||
10, 12, 14, 16, 17, 18, 23, 24, 27, 28, 12, 13, 14, 4, 5, 7,
|
||||
8, 21, 22, 25, 26, 29, 30,
|
||||
17, 18, 19, 24, 25, 28, 29, 11, 13, 15, 13, 14, 15, 5, 6, 8,
|
||||
9, 22, 23, 26, 27, 30, 31,
|
||||
};
|
||||
public static final String[] jjstrLiteralImages = {
|
||||
"", null, null, null, null, null, null, null, null, null, null, null, null,
|
||||
@ -1465,8 +1469,8 @@ static final long[] jjtoSkip = {
|
||||
0x1eL,
|
||||
};
|
||||
protected SimpleCharStream input_stream;
|
||||
private final int[] jjrounds = new int[31];
|
||||
private final int[] jjstateSet = new int[62];
|
||||
private final int[] jjrounds = new int[32];
|
||||
private final int[] jjstateSet = new int[64];
|
||||
protected char curChar;
|
||||
public ParserTokenManager(SimpleCharStream stream){
|
||||
if (SimpleCharStream.staticFlag)
|
||||
@ -1488,7 +1492,7 @@ private final void ReInitRounds()
|
||||
{
|
||||
int i;
|
||||
jjround = 0x80000001;
|
||||
for (i = 31; i-- > 0;)
|
||||
for (i = 32; i-- > 0;)
|
||||
jjrounds[i] = 0x80000000;
|
||||
}
|
||||
public void ReInit(SimpleCharStream stream, int lexState)
|
||||
|
@ -70,6 +70,57 @@ public class TestScanner2 extends HBaseClusterTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getting scanners with regexes for column names.
|
||||
* @throws IOException
|
||||
*/
|
||||
public void testRegexForColumnName() throws IOException {
|
||||
// Setup HClient, ensure that it is running correctly
|
||||
HBaseAdmin admin = new HBaseAdmin(conf);
|
||||
|
||||
// Setup colkeys to be inserted
|
||||
Text tableName = new Text(getName());
|
||||
createTable(admin, tableName);
|
||||
HTable table = new HTable(this.conf, tableName);
|
||||
// Add a row to columns without qualifiers and then two with. Make one
|
||||
// numbers only so easy to find w/ a regex.
|
||||
long id = table.startUpdate(new Text(getName()));
|
||||
final String firstColkeyFamily = Character.toString(FIRST_COLKEY) + ":";
|
||||
table.put(id, new Text(firstColkeyFamily + getName()), GOOD_BYTES);
|
||||
table.put(id, new Text(firstColkeyFamily + "22222"), GOOD_BYTES);
|
||||
table.put(id, new Text(firstColkeyFamily), GOOD_BYTES);
|
||||
table.commit(id);
|
||||
// Now do a scan using a regex for a column name.
|
||||
checkRegexingScanner(table, firstColkeyFamily + "\\d+");
|
||||
// Do a new scan that only matches on column family.
|
||||
checkRegexingScanner(table, firstColkeyFamily + "$");
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a scanner w/ passed in column name regex. Assert we only get
|
||||
* back one column that matches.
|
||||
* @param table
|
||||
* @param regexColumnname
|
||||
* @throws IOException
|
||||
*/
|
||||
private void checkRegexingScanner(final HTable table,
|
||||
final String regexColumnname) throws IOException {
|
||||
Text [] regexCol = new Text [] {new Text(regexColumnname)};
|
||||
HScannerInterface scanner =
|
||||
table.obtainScanner(regexCol, HConstants.EMPTY_START_ROW);
|
||||
HStoreKey key = new HStoreKey();
|
||||
TreeMap<Text, byte []> results = new TreeMap<Text, byte []>();
|
||||
int count = 0;
|
||||
while (scanner.next(key, results)) {
|
||||
for (Text c: results.keySet()) {
|
||||
assertTrue(c.toString().matches(regexColumnname));
|
||||
count++;
|
||||
}
|
||||
}
|
||||
assertTrue(count == 1);
|
||||
scanner.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the scanner's handling of various filters.
|
||||
*
|
||||
@ -80,17 +131,8 @@ public class TestScanner2 extends HBaseClusterTestCase {
|
||||
HBaseAdmin admin = new HBaseAdmin(conf);
|
||||
|
||||
// Setup colkeys to be inserted
|
||||
HTableDescriptor htd = new HTableDescriptor(getName());
|
||||
Text tableName = new Text(getName());
|
||||
Text[] colKeys = new Text[(LAST_COLKEY - FIRST_COLKEY) + 1];
|
||||
for (char i = 0; i < colKeys.length; i++) {
|
||||
colKeys[i] = new Text(new String(new char[] {
|
||||
(char)(FIRST_COLKEY + i), ':' }));
|
||||
htd.addFamily(new HColumnDescriptor(colKeys[i].toString()));
|
||||
}
|
||||
admin.createTable(htd);
|
||||
assertTrue("Table with name " + tableName + " created successfully.",
|
||||
admin.tableExists(tableName));
|
||||
Text [] colKeys = createTable(admin, tableName);
|
||||
assertTrue("Master is running.", admin.isMasterRunning());
|
||||
|
||||
// Enter data
|
||||
@ -109,6 +151,28 @@ public class TestScanner2 extends HBaseClusterTestCase {
|
||||
rowFilterSetTest(table, colKeys);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param admin
|
||||
* @param tableName
|
||||
* @return Returns column keys used making table.
|
||||
* @throws IOException
|
||||
*/
|
||||
private Text [] createTable(final HBaseAdmin admin, final Text tableName)
|
||||
throws IOException {
|
||||
// Setup colkeys to be inserted
|
||||
HTableDescriptor htd = new HTableDescriptor(getName());
|
||||
Text[] colKeys = new Text[(LAST_COLKEY - FIRST_COLKEY) + 1];
|
||||
for (char i = 0; i < colKeys.length; i++) {
|
||||
colKeys[i] = new Text(new String(new char[] {
|
||||
(char)(FIRST_COLKEY + i), ':' }));
|
||||
htd.addFamily(new HColumnDescriptor(colKeys[i].toString()));
|
||||
}
|
||||
admin.createTable(htd);
|
||||
assertTrue("Table with name " + tableName + " created successfully.",
|
||||
admin.tableExists(tableName));
|
||||
return colKeys;
|
||||
}
|
||||
|
||||
private void regExpFilterTest(HTable table, Text[] colKeys)
|
||||
throws Exception {
|
||||
// Get the filter. The RegExpRowFilter used should filter out vowels.
|
||||
|
@ -25,14 +25,10 @@ import junit.textui.TestRunner;
|
||||
|
||||
/**
|
||||
* Test the console table class
|
||||
* TODO: Console table needs fixing.
|
||||
*/
|
||||
public class TestConsoleTable extends TestCase {
|
||||
public void testPrintLine() {
|
||||
ConsoleTable.printLine(0, "smallkey", "smallcolumn", "smallcelldata");
|
||||
ConsoleTable.printLine(0, "a large key too big for column", "smallcolumn",
|
||||
"smallcelldata");
|
||||
ConsoleTable.printLine(0, "smallkey", "smallcolumn", "smallcelldata");
|
||||
public void testPrintTable() {
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user