merge master

Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/7d3b544a
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/7d3b544a
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/7d3b544a

Branch: refs/heads/txn
Commit: 7d3b544ad3ae11f1da03f3db518052794faa702e
Parents: d81e660 72633b9
Author: Thomas D'Silva <[email protected]>
Authored: Mon Nov 2 14:48:30 2015 -0800
Committer: Thomas D'Silva <[email protected]>
Committed: Mon Nov 2 14:48:30 2015 -0800

----------------------------------------------------------------------
 .gitignore                                      |     8 +
 NOTICE                                          |    15 +
 bin/daemon.py                                   |   989 +
 bin/end2endTest.py                              |     8 +-
 bin/log4j.properties                            |     9 +-
 bin/performance.py                              |    21 +-
 bin/phoenix_sandbox.py                          |     3 +
 bin/phoenix_utils.py                            |   155 +-
 bin/psql.py                                     |    43 +-
 bin/queryserver.py                              |   203 +
 bin/sqlline-thin.py                             |   123 +
 bin/sqlline.py                                  |    44 +-
 bin/traceserver.py                              |   188 +
 dev/eclipse_prefs_phoenix.epf                   |     2 +-
 dev/jenkinsEnv.sh                               |    31 +
 dev/make_rc.sh                                  |    53 +-
 dev/smart-apply-patch.sh                        |    96 +
 dev/test-patch.properties                       |    35 +
 dev/test-patch.sh                               |  1081 +
 phoenix-assembly/pom.xml                        |    62 +-
 phoenix-assembly/src/build/client.xml           |    41 +-
 .../src/build/components-major-client.xml       |     2 +
 .../src/build/components-minimal.xml            |     2 +
 .../components/all-common-dependencies.xml      |     1 +
 .../src/build/components/all-common-files.xml   |    17 +-
 .../src/build/components/all-common-jars.xml    |    35 +-
 .../src/build/server-without-antlr.xml          |     2 +
 phoenix-assembly/src/build/server.xml           |     3 +
 phoenix-assembly/src/build/src.xml              |     4 +-
 phoenix-core/pom.xml                            |    32 +-
 .../wal/ReadWriteKeyValuesWithCodecIT.java      |    14 +-
 ...ReplayWithIndexWritesAndCompressedWALIT.java |    38 +-
 .../phoenix/end2end/AbsFunctionEnd2EndIT.java   |   108 +
 .../apache/phoenix/end2end/AlterSessionIT.java  |    92 +
 .../apache/phoenix/end2end/AlterTableIT.java    |    86 +-
 .../phoenix/end2end/AlterTableWithViewsIT.java  |  1118 +
 .../phoenix/end2end/ArithmeticQueryIT.java      |    88 +
 .../phoenix/end2end/ArrayAppendFunctionIT.java  |   650 +
 .../phoenix/end2end/ArrayConcatFunctionIT.java  |   578 +
 .../phoenix/end2end/ArrayFillFunctionIT.java    |   531 +
 .../org/apache/phoenix/end2end/ArrayIT.java     |   955 +-
 .../phoenix/end2end/ArrayPrependFunctionIT.java |   652 +
 .../end2end/ArrayToStringFunctionIT.java        |   654 +
 .../phoenix/end2end/ArraysWithNullsIT.java      |   300 +
 .../org/apache/phoenix/end2end/BaseQueryIT.java |    10 -
 .../end2end/BaseTenantSpecificViewIndexIT.java  |    33 +-
 .../org/apache/phoenix/end2end/BaseViewIT.java  |     3 +
 .../phoenix/end2end/CSVCommonsLoaderIT.java     |    58 +-
 .../phoenix/end2end/CbrtFunctionEnd2EndIT.java  |   143 +
 .../end2end/ClientTimeArithmeticQueryIT.java    |    10 +-
 .../phoenix/end2end/CoalesceFunctionIT.java     |     2 +-
 .../phoenix/end2end/ConnectionUtilIT.java       |    84 +
 .../end2end/ConvertTimezoneFunctionIT.java      |    42 +-
 .../apache/phoenix/end2end/CreateTableIT.java   |    25 +
 .../org/apache/phoenix/end2end/DateTimeIT.java  |   637 +
 .../phoenix/end2end/DecodeFunctionIT.java       |     9 +-
 .../org/apache/phoenix/end2end/DeleteIT.java    |    63 +
 .../apache/phoenix/end2end/DerivedTableIT.java  |     6 +-
 .../phoenix/end2end/EncodeFunctionIT.java       |    16 +-
 .../phoenix/end2end/End2EndTestDriver.java      |    19 +-
 .../phoenix/end2end/EvaluationOfORIT.java       |    11 +
 .../phoenix/end2end/ExpFunctionEnd2EndIT.java   |   152 +
 .../end2end/GetSetByteBitFunctionEnd2EndIT.java |   100 +
 .../org/apache/phoenix/end2end/GroupByIT.java   |    72 +
 .../org/apache/phoenix/end2end/HashJoinIT.java  |    64 +-
 .../org/apache/phoenix/end2end/InListIT.java    |    53 +-
 .../apache/phoenix/end2end/InstrFunctionIT.java |   126 +
 .../org/apache/phoenix/end2end/IsNullIT.java    |    52 +-
 .../org/apache/phoenix/end2end/KeyOnlyIT.java   |     2 +-
 .../phoenix/end2end/LikeExpressionIT.java       |   126 +
 .../phoenix/end2end/LnLogFunctionEnd2EndIT.java |   143 +
 .../apache/phoenix/end2end/LpadFunctionIT.java  |    60 +
 .../apache/phoenix/end2end/MD5FunctionIT.java   |    19 +
 .../org/apache/phoenix/end2end/NotQueryIT.java  |     8 +-
 .../end2end/OctetLengthFunctionEnd2EndIT.java   |    73 +
 .../org/apache/phoenix/end2end/OrderByIT.java   |   396 +-
 .../phoenix/end2end/ParallelIteratorsIT.java    |    29 +
 .../phoenix/end2end/PhoenixMetricsIT.java       |   151 -
 .../phoenix/end2end/PowerFunctionEnd2EndIT.java |   144 +
 .../end2end/QueryDatabaseMetaDataIT.java        |   253 +-
 .../org/apache/phoenix/end2end/QueryMoreIT.java |     6 +-
 .../phoenix/end2end/QueryWithLimitIT.java       |     2 +-
 .../apache/phoenix/end2end/RTrimFunctionIT.java |    71 +
 .../end2end/RegexpReplaceFunctionIT.java        |   100 +
 .../phoenix/end2end/RegexpSubstrFunctionIT.java |    43 +-
 .../apache/phoenix/end2end/ReverseScanIT.java   |    59 +-
 .../RoundFloorCeilFunctionsEnd2EndIT.java       |   114 +
 .../phoenix/end2end/RowValueConstructorIT.java  |   292 +-
 .../end2end/SequenceBulkAllocationIT.java       |  1286 +
 .../org/apache/phoenix/end2end/SequenceIT.java  |    84 +
 .../phoenix/end2end/SignFunctionEnd2EndIT.java  |   141 +
 .../end2end/SkipScanAfterManualSplitIT.java     |     2 +-
 .../apache/phoenix/end2end/SortMergeJoinIT.java |    89 +-
 .../apache/phoenix/end2end/SortOrderFIT.java    |   563 -
 .../org/apache/phoenix/end2end/SortOrderIT.java |   768 +
 .../phoenix/end2end/SqrtFunctionEnd2EndIT.java  |   143 +
 .../phoenix/end2end/StatsCollectorIT.java       |     1 +
 .../StatsCollectorWithSplitsAndMultiCFIT.java   |    39 +-
 .../end2end/StringToArrayFunctionIT.java        |   423 +
 .../org/apache/phoenix/end2end/SubqueryIT.java  |    26 +-
 .../end2end/SubqueryUsingSortMergeJoinIT.java   |    22 +-
 .../apache/phoenix/end2end/TenantIdTypeIT.java  |   226 +
 .../end2end/TenantSpecificTablesDDLIT.java      |   104 +-
 .../end2end/TenantSpecificViewIndexIT.java      |     5 +
 .../end2end/TimezoneOffsetFunctionIT.java       |    15 +-
 .../phoenix/end2end/ToDateFunctionIT.java       |   103 +-
 .../org/apache/phoenix/end2end/UnionAllIT.java  |   682 +
 .../apache/phoenix/end2end/UnnestArrayIT.java   |   356 +
 .../org/apache/phoenix/end2end/UpgradeIT.java   |   332 +
 .../apache/phoenix/end2end/UpsertSelectIT.java  |   531 +
 .../apache/phoenix/end2end/UpsertValuesIT.java  |   284 +
 .../phoenix/end2end/UserDefinedFunctionsIT.java |   920 +
 .../phoenix/end2end/VariableLengthPKIT.java     |     6 +-
 .../java/org/apache/phoenix/end2end/ViewIT.java |   146 +
 .../end2end/index/DropIndexDuringUpsertIT.java  |     2 +-
 .../index/GlobalIndexOptimizationIT.java        |    11 +-
 .../index/ImmutableIndexWithStatsIT.java        |    89 +
 .../end2end/index/IndexExpressionIT.java        |   233 +-
 .../phoenix/end2end/index/IndexHandlerIT.java   |    12 +-
 .../phoenix/end2end/index/LocalIndexIT.java     |    32 +-
 .../end2end/index/MutableIndexFailureIT.java    |    11 +-
 .../apache/phoenix/execute/PartialCommitIT.java |   318 +
 .../index/balancer/IndexLoadBalancerIT.java     |     6 +-
 .../EndToEndCoveredColumnsIndexBuilderIT.java   |    10 +-
 .../iterate/MockParallelIteratorFactory.java    |    47 +
 .../iterate/MockTableResultIterator.java        |    66 +
 .../phoenix/iterate/PhoenixQueryTimeoutIT.java  |   114 +
 .../iterate/RoundRobinResultIteratorIT.java     |   437 +
 .../RoundRobinResultIteratorWithStatsIT.java    |   104 +
 .../phoenix/mapreduce/CsvBulkLoadToolIT.java    |    45 +-
 .../apache/phoenix/mapreduce/IndexToolIT.java   |   334 +
 .../phoenix/monitoring/PhoenixMetricsIT.java    |   815 +
 .../apache/phoenix/rpc/PhoenixClientRpcIT.java  |   113 +
 .../apache/phoenix/rpc/PhoenixServerRpcIT.java  |   232 +
 .../TestPhoenixIndexRpcSchedulerFactory.java    |    64 +
 .../org/apache/phoenix/rpc/UpdateCacheIT.java   |   156 +
 .../phoenix/trace/PhoenixTraceReaderIT.java     |     2 +-
 .../phoenix/trace/PhoenixTracingEndToEndIT.java |    57 +-
 phoenix-core/src/it/resources/hbase-default.xml |    36 -
 phoenix-core/src/it/resources/hbase-site.xml    |    36 +
 phoenix-core/src/main/antlr3/PhoenixSQL.g       |   286 +-
 .../hbase/ipc/PhoenixIndexRpcScheduler.java     |   120 -
 .../hadoop/hbase/ipc/PhoenixRpcScheduler.java   |   129 +
 .../hbase/ipc/PhoenixRpcSchedulerFactory.java   |    95 +
 .../controller/ClientRpcControllerFactory.java  |    60 +
 .../ipc/controller/IndexRpcController.java      |    51 +
 .../ipc/controller/MetadataRpcController.java   |    55 +
 .../controller/ServerRpcControllerFactory.java  |    62 +
 .../regionserver/IndexHalfStoreFileReader.java  |    79 +-
 .../IndexHalfStoreFileReaderGenerator.java      |    19 +-
 .../regionserver/IndexSplitTransaction.java     |   132 +-
 .../hbase/regionserver/KeyValueSkipListSet.java |   183 +
 .../hbase/regionserver/LocalIndexMerger.java    |    23 +-
 .../hbase/regionserver/LocalIndexSplitter.java  |    40 +-
 .../org/apache/phoenix/cache/GlobalCache.java   |    30 +-
 .../apache/phoenix/cache/JodaTimezoneCache.java |    84 +
 .../apache/phoenix/cache/ServerCacheClient.java |    16 +-
 .../cache/aggcache/SpillableGroupByCache.java   |    13 +-
 .../apache/phoenix/compile/ColumnResolver.java  |    17 +
 .../phoenix/compile/CreateFunctionCompiler.java |    72 +
 .../phoenix/compile/CreateIndexCompiler.java    |     2 +-
 .../phoenix/compile/CreateTableCompiler.java    |    37 +
 .../apache/phoenix/compile/DeleteCompiler.java  |    73 +-
 .../phoenix/compile/ExpressionCompiler.java     |    62 +-
 .../apache/phoenix/compile/FromCompiler.java    |   218 +-
 .../apache/phoenix/compile/GroupByCompiler.java |    56 +-
 .../apache/phoenix/compile/HavingCompiler.java  |     2 +-
 .../apache/phoenix/compile/JoinCompiler.java    |    17 +-
 .../org/apache/phoenix/compile/KeyPart.java     |     8 +-
 .../phoenix/compile/ListJarsQueryPlan.java      |   245 +
 .../MutatingParallelIteratorFactory.java        |    51 +-
 .../apache/phoenix/compile/OrderByCompiler.java |    52 +-
 .../phoenix/compile/OrderPreservingTracker.java |   281 +
 .../apache/phoenix/compile/PostDDLCompiler.java |    34 +
 .../phoenix/compile/PostIndexDDLCompiler.java   |    43 +-
 .../phoenix/compile/ProjectionCompiler.java     |   134 +-
 .../apache/phoenix/compile/QueryCompiler.java   |   108 +-
 .../org/apache/phoenix/compile/QueryPlan.java   |    14 +
 .../apache/phoenix/compile/RowProjector.java    |    36 +-
 .../org/apache/phoenix/compile/ScanRanges.java  |   250 +-
 .../apache/phoenix/compile/SequenceManager.java |    70 +-
 .../compile/SequenceValueExpression.java        |    14 +-
 .../phoenix/compile/StatementContext.java       |    60 +-
 .../phoenix/compile/StatementNormalizer.java    |     5 +-
 .../phoenix/compile/SubqueryRewriter.java       |    21 +-
 .../phoenix/compile/SubselectRewriter.java      |     5 +-
 .../apache/phoenix/compile/TraceQueryPlan.java  |    49 +-
 .../TrackOrderPreservingExpressionCompiler.java |   249 -
 .../compile/TupleProjectionCompiler.java        |     5 +-
 .../apache/phoenix/compile/UnionCompiler.java   |    89 +
 .../apache/phoenix/compile/UpsertCompiler.java  |   211 +-
 .../apache/phoenix/compile/WhereCompiler.java   |     2 +-
 .../apache/phoenix/compile/WhereOptimizer.java  |   243 +-
 .../phoenix/coprocessor/BaseRegionScanner.java  |    16 +-
 .../coprocessor/BaseScannerRegionObserver.java  |   124 +-
 .../coprocessor/DelegateRegionScanner.java      |    23 +-
 .../GroupedAggregateRegionObserver.java         |    66 +-
 .../coprocessor/HashJoinRegionScanner.java      |    60 +-
 .../coprocessor/MetaDataEndpointImpl.java       |  1838 +-
 .../phoenix/coprocessor/MetaDataProtocol.java   |    50 +-
 .../coprocessor/MetaDataRegionObserver.java     |    23 +-
 .../phoenix/coprocessor/ScanRegionObserver.java |    28 +-
 .../coprocessor/SequenceRegionObserver.java     |    80 +-
 .../UngroupedAggregateRegionObserver.java       |   225 +-
 .../coprocessor/generated/MetaDataProtos.java   |  5283 +++-
 .../coprocessor/generated/PFunctionProtos.java  |  3032 ++
 .../coprocessor/generated/PTableProtos.java     |   362 +-
 .../exception/DataExceedsCapacityException.java |    40 +
 .../phoenix/exception/SQLExceptionCode.java     |   116 +-
 .../phoenix/exception/SQLExceptionInfo.java     |    16 +
 .../ValueTypeIncompatibleException.java         |    36 -
 .../apache/phoenix/execute/AggregatePlan.java   |    36 +-
 .../apache/phoenix/execute/BaseQueryPlan.java   |    98 +-
 .../phoenix/execute/ClientAggregatePlan.java    |     5 +-
 .../phoenix/execute/ClientProcessingPlan.java   |     9 +
 .../apache/phoenix/execute/ClientScanPlan.java  |     5 +-
 .../apache/phoenix/execute/CommitException.java |    28 +-
 .../apache/phoenix/execute/CorrelatePlan.java   |   208 +
 .../phoenix/execute/DegenerateQueryPlan.java    |    10 +-
 .../execute/DelegateHTableInterface.java        |    18 +
 .../phoenix/execute/DelegateQueryPlan.java      |     6 +
 .../DescVarLengthFastByteComparisons.java       |   231 +
 .../apache/phoenix/execute/HashJoinPlan.java    |    36 +-
 .../execute/LiteralResultIterationPlan.java     |   109 +
 .../apache/phoenix/execute/MutationState.java   |   640 +-
 .../apache/phoenix/execute/RuntimeContext.java  |    33 +
 .../phoenix/execute/RuntimeContextImpl.java     |    86 +
 .../org/apache/phoenix/execute/ScanPlan.java    |    56 +-
 .../phoenix/execute/SortMergeJoinPlan.java      |    26 +-
 .../phoenix/execute/TupleProjectionPlan.java    |    11 +-
 .../apache/phoenix/execute/TupleProjector.java  |    10 +
 .../org/apache/phoenix/execute/UnionPlan.java   |   220 +
 .../apache/phoenix/execute/UnnestArrayPlan.java |   189 +
 .../expression/ArrayConstructorExpression.java  |    47 +-
 .../phoenix/expression/BaseExpression.java      |    43 +-
 .../expression/ByteBasedLikeExpression.java     |    48 +
 .../phoenix/expression/CoerceExpression.java    |    39 +-
 .../expression/ComparisonExpression.java        |    36 +-
 .../CorrelateVariableFieldAccessExpression.java |    75 +
 .../expression/DecimalAddExpression.java        |     4 +-
 .../expression/DecimalDivideExpression.java     |     4 +-
 .../expression/DecimalMultiplyExpression.java   |     4 +-
 .../expression/DecimalSubtractExpression.java   |     4 +-
 .../phoenix/expression/ExpressionType.java      |    95 +-
 .../phoenix/expression/InListExpression.java    |    26 +-
 .../phoenix/expression/LikeExpression.java      |    70 +-
 .../phoenix/expression/LiteralExpression.java   |    40 +-
 .../phoenix/expression/OrderByExpression.java   |    13 +-
 .../expression/ProjectedColumnExpression.java   |     7 +-
 .../expression/RowKeyColumnExpression.java      |     2 +-
 .../RowValueConstructorExpression.java          |     8 +-
 .../expression/StringBasedLikeExpression.java   |    48 +
 .../aggregator/ServerAggregators.java           |     1 +
 .../expression/function/AbsFunction.java        |    66 +
 .../function/ArrayAppendFunction.java           |    51 +
 .../function/ArrayConcatFunction.java           |    90 +
 .../expression/function/ArrayFillFunction.java  |    96 +
 .../function/ArrayLengthFunction.java           |     4 +-
 .../function/ArrayModifierFunction.java         |   189 +
 .../function/ArrayPrependFunction.java          |    54 +
 .../function/ArrayToStringFunction.java         |    84 +
 .../ByteBasedRegexpReplaceFunction.java         |    40 +
 .../function/ByteBasedRegexpSplitFunction.java  |    38 +
 .../function/ByteBasedRegexpSubstrFunction.java |    38 +
 .../expression/function/CbrtFunction.java       |    55 +
 .../function/ConvertTimezoneFunction.java       |    38 +-
 .../expression/function/DayOfMonthFunction.java |    83 +
 .../expression/function/ExpFunction.java        |    55 +
 .../expression/function/GetBitFunction.java     |    96 +
 .../expression/function/GetByteFunction.java    |    96 +
 .../expression/function/HourFunction.java       |    81 +
 .../expression/function/InstrFunction.java      |   105 +
 .../expression/function/InvertFunction.java     |    14 +-
 .../function/JavaMathOneArgumentFunction.java   |    68 +
 .../function/JavaMathTwoArgumentFunction.java   |    69 +
 .../phoenix/expression/function/LnFunction.java |    55 +
 .../expression/function/LogFunction.java        |    56 +
 .../expression/function/LpadFunction.java       |     8 +-
 .../expression/function/MinuteFunction.java     |    81 +
 .../expression/function/MonthFunction.java      |    83 +
 .../expression/function/NowFunction.java        |    48 +
 .../function/OctetLengthFunction.java           |    66 +
 .../expression/function/PowerFunction.java      |    51 +
 .../expression/function/PrefixFunction.java     |    37 +-
 .../expression/function/RTrimFunction.java      |    64 +-
 .../expression/function/RandomFunction.java     |    17 +
 .../function/RegexpReplaceFunction.java         |    92 +-
 .../function/RegexpSplitFunction.java           |    85 +-
 .../function/RegexpSubstrFunction.java          |   129 +-
 .../function/RoundDateExpression.java           |    12 +-
 .../function/RoundDecimalExpression.java        |    22 +-
 .../expression/function/ScalarFunction.java     |     6 +-
 .../expression/function/SecondFunction.java     |    81 +
 .../expression/function/SetBitFunction.java     |    81 +
 .../expression/function/SetByteFunction.java    |    81 +
 .../expression/function/SignFunction.java       |    79 +
 .../expression/function/SqrtFunction.java       |    55 +
 .../StringBasedRegexpReplaceFunction.java       |    40 +
 .../StringBasedRegexpSplitFunction.java         |    38 +
 .../StringBasedRegexpSubstrFunction.java        |    38 +
 .../function/StringToArrayFunction.java         |    91 +
 .../function/TimezoneOffsetFunction.java        |    25 +-
 .../expression/function/UDFExpression.java      |   244 +
 .../expression/function/WeekFunction.java       |    83 +
 .../expression/function/YearFunction.java       |    82 +
 .../util/regex/AbstractBasePattern.java         |    32 +
 .../util/regex/AbstractBaseSplitter.java        |    24 +
 .../expression/util/regex/GuavaSplitter.java    |    54 +
 .../expression/util/regex/JONIPattern.java      |   200 +
 .../expression/util/regex/JavaPattern.java      |    94 +
 .../visitor/CloneExpressionVisitor.java         |    58 +-
 .../CloneNonDeterministicExpressionVisitor.java |    30 +
 .../expression/visitor/ExpressionVisitor.java   |     2 +
 .../ProjectedColumnExpressionVisitor.java       |    25 +
 .../ReplaceArrayFunctionExpressionVisitor.java  |    46 +
 .../StatelessTraverseAllExpressionVisitor.java  |     7 +
 .../StatelessTraverseNoExpressionVisitor.java   |     7 +
 .../phoenix/filter/RowKeyComparisonFilter.java  |     5 +-
 .../filter/SingleKeyValueComparisonFilter.java  |     4 +-
 .../apache/phoenix/filter/SkipScanFilter.java   |    44 +-
 .../phoenix/hbase/index/IndexQosCompat.java     |    98 -
 .../index/IndexQosRpcControllerFactory.java     |    86 -
 .../org/apache/phoenix/hbase/index/Indexer.java |    11 +-
 .../hbase/index/balancer/IndexLoadBalancer.java |     7 +-
 .../phoenix/hbase/index/covered/Batch.java      |    11 +-
 .../hbase/index/covered/LocalTableState.java    |    30 +-
 .../hbase/index/covered/NonTxIndexBuilder.java  |     2 +-
 .../phoenix/hbase/index/covered/TableState.java |     3 +-
 .../hbase/index/covered/data/IndexMemStore.java |    27 +-
 .../hbase/index/covered/data/LocalTable.java    |     7 +-
 .../example/CoveredColumnIndexCodec.java        |     2 +-
 .../filter/ApplyAndFilterDeletesFilter.java     |     8 +-
 .../index/covered/filter/FamilyOnlyFilter.java  |    80 -
 .../index/covered/update/ColumnReference.java   |     7 +-
 .../ipc/PhoenixIndexRpcSchedulerFactory.java    |    91 -
 .../index/scanner/FilteredKeyValueScanner.java  |    28 +-
 .../hbase/index/scanner/ScannerBuilder.java     |     4 +-
 .../index/table/CoprocessorHTableFactory.java   |    20 -
 .../hbase/index/wal/IndexedKeyValue.java        |    17 -
 .../write/ParallelWriterIndexCommitter.java     |     8 +-
 .../recovery/PerRegionIndexWriteCache.java      |    10 +-
 .../recovery/StoreFailuresInCachePolicy.java    |     4 +-
 .../TrackingParallelWriterIndexCommitter.java   |     8 +-
 .../apache/phoenix/index/IndexMaintainer.java   |   181 +-
 .../phoenix/index/PhoenixIndexBuilder.java      |    11 +-
 .../apache/phoenix/index/PhoenixIndexCodec.java |     6 +-
 .../index/PhoenixTransactionalIndexer.java      |    16 +-
 .../phoenix/iterate/BaseResultIterators.java    |   195 +-
 .../phoenix/iterate/ChunkedResultIterator.java  |    24 +-
 .../iterate/DefaultParallelScanGrouper.java     |    62 +
 .../apache/phoenix/iterate/ExplainTable.java    |   106 +-
 .../iterate/MapReduceParallelScanGrouper.java   |    45 +
 .../iterate/MergeSortTopNResultIterator.java    |     3 -
 .../phoenix/iterate/OrderedResultIterator.java  |    52 +-
 .../iterate/ParallelIteratorFactory.java        |     5 +-
 .../phoenix/iterate/ParallelIterators.java      |    41 +-
 .../phoenix/iterate/ParallelScanGrouper.java    |    41 +
 .../iterate/RegionScannerResultIterator.java    |     9 +-
 .../iterate/RoundRobinResultIterator.java       |   329 +
 .../phoenix/iterate/ScanningResultIterator.java |    38 +-
 .../apache/phoenix/iterate/SerialIterators.java |    30 +-
 .../phoenix/iterate/SpoolingResultIterator.java |    50 +-
 .../phoenix/iterate/TableResultIterator.java    |    26 +-
 .../UngroupedAggregatingResultIterator.java     |     3 +-
 .../phoenix/iterate/UnionResultIterators.java   |   142 +
 .../apache/phoenix/jdbc/PhoenixConnection.java  |   215 +-
 .../phoenix/jdbc/PhoenixDatabaseMetaData.java   |    60 +-
 .../org/apache/phoenix/jdbc/PhoenixDriver.java  |    46 +-
 .../phoenix/jdbc/PhoenixEmbeddedDriver.java     |    31 +-
 .../phoenix/jdbc/PhoenixPreparedStatement.java  |     8 +-
 .../apache/phoenix/jdbc/PhoenixResultSet.java   |    68 +-
 .../apache/phoenix/jdbc/PhoenixStatement.java   |   460 +-
 .../java/org/apache/phoenix/job/JobManager.java |    65 +-
 .../org/apache/phoenix/join/HashJoinInfo.java   |    17 +-
 .../phoenix/mapreduce/CsvBulkImportUtil.java    |    28 +-
 .../phoenix/mapreduce/CsvBulkLoadTool.java      |   361 +-
 .../phoenix/mapreduce/CsvToKeyValueMapper.java  |   123 +-
 .../phoenix/mapreduce/CsvToKeyValueReducer.java |    55 +
 .../mapreduce/MultiHfileOutputFormat.java       |   716 +
 .../phoenix/mapreduce/PhoenixInputFormat.java   |    28 +-
 .../phoenix/mapreduce/PhoenixInputSplit.java    |     1 +
 .../phoenix/mapreduce/PhoenixJobCounters.java   |    29 +
 .../phoenix/mapreduce/PhoenixRecordReader.java  |    19 +-
 .../phoenix/mapreduce/PhoenixRecordWriter.java  |     2 +-
 .../mapreduce/bulkload/CsvTableRowkeyPair.java  |   139 +
 .../mapreduce/index/DirectHTableWriter.java     |   113 +
 .../phoenix/mapreduce/index/IndexTool.java      |   377 +
 .../phoenix/mapreduce/index/IndexToolUtil.java  |    76 +
 .../mapreduce/index/PhoenixIndexDBWritable.java |    91 +
 .../index/PhoenixIndexImportDirectMapper.java   |   182 +
 .../index/PhoenixIndexImportMapper.java         |   133 +
 .../index/PhoenixIndexToolReducer.java          |    60 +
 .../util/ColumnInfoToStringEncoderDecoder.java  |    41 +-
 .../phoenix/mapreduce/util/ConnectionUtil.java  |    81 +-
 .../util/PhoenixConfigurationUtil.java          |   250 +-
 .../mapreduce/util/PhoenixMapReduceUtil.java    |    24 +-
 .../phoenix/memory/GlobalMemoryManager.java     |     5 -
 .../apache/phoenix/monitoring/AtomicMetric.java |    70 +
 .../phoenix/monitoring/CombinableMetric.java    |    77 +
 .../monitoring/CombinableMetricImpl.java        |    77 +
 .../org/apache/phoenix/monitoring/Counter.java  |    85 -
 .../phoenix/monitoring/GlobalClientMetrics.java |   117 +
 .../apache/phoenix/monitoring/GlobalMetric.java |    37 +
 .../phoenix/monitoring/GlobalMetricImpl.java    |    74 +
 .../phoenix/monitoring/MemoryMetricsHolder.java |    43 +
 .../org/apache/phoenix/monitoring/Metric.java   |    45 +-
 .../apache/phoenix/monitoring/MetricType.java   |    55 +
 .../phoenix/monitoring/MetricsStopWatch.java    |    59 +
 .../phoenix/monitoring/MutationMetricQueue.java |   131 +
 .../phoenix/monitoring/NonAtomicMetric.java     |    71 +
 .../phoenix/monitoring/OverAllQueryMetrics.java |   121 +
 .../phoenix/monitoring/PhoenixMetrics.java      |   118 -
 .../phoenix/monitoring/ReadMetricQueue.java     |   180 +
 .../phoenix/monitoring/SizeStatistic.java       |    78 -
 .../monitoring/SpoolingMetricsHolder.java       |    43 +
 .../monitoring/TaskExecutionMetricsHolder.java  |    68 +
 .../apache/phoenix/optimize/QueryOptimizer.java |     8 +-
 .../apache/phoenix/parse/AddJarsStatement.java  |    38 +
 .../phoenix/parse/AlterSessionStatement.java    |    38 +
 .../org/apache/phoenix/parse/CastParseNode.java |     2 +-
 .../org/apache/phoenix/parse/ColumnDef.java     |   227 +-
 .../phoenix/parse/ColumnDefInPkConstraint.java  |    44 +
 .../phoenix/parse/CreateFunctionStatement.java  |    47 +
 .../phoenix/parse/CreateIndexStatement.java     |    14 +-
 .../org/apache/phoenix/parse/DMLStatement.java  |    11 +-
 .../phoenix/parse/DeleteJarStatement.java       |    36 +
 .../apache/phoenix/parse/DeleteStatement.java   |     5 +-
 .../phoenix/parse/DropFunctionStatement.java    |    41 +
 .../apache/phoenix/parse/FunctionParseNode.java |    73 +-
 .../parse/IndexExpressionParseNodeRewriter.java |    34 +-
 .../apache/phoenix/parse/ListJarsStatement.java |    34 +
 .../apache/phoenix/parse/LiteralParseNode.java  |     5 +
 .../org/apache/phoenix/parse/NamedNode.java     |     2 +-
 .../org/apache/phoenix/parse/PFunction.java     |   280 +
 .../apache/phoenix/parse/ParseNodeFactory.java  |   216 +-
 .../apache/phoenix/parse/ParseNodeRewriter.java |     5 +-
 .../phoenix/parse/PrimaryKeyConstraint.java     |    48 +-
 .../phoenix/parse/RegexpReplaceParseNode.java   |    55 +
 .../phoenix/parse/RegexpSplitParseNode.java     |    55 +
 .../phoenix/parse/RegexpSubstrParseNode.java    |    55 +
 .../apache/phoenix/parse/SelectStatement.java   |    61 +-
 .../phoenix/parse/SequenceValueParseNode.java   |     8 +-
 .../apache/phoenix/parse/TraceStatement.java    |    12 +-
 .../org/apache/phoenix/parse/UDFParseNode.java  |    27 +
 .../parse/UpdateStatisticsStatement.java        |    11 +-
 .../apache/phoenix/parse/UpsertStatement.java   |     9 +-
 .../apache/phoenix/protobuf/ProtobufUtil.java   |    14 +-
 .../phoenix/query/BaseQueryServicesImpl.java    |     2 +-
 .../phoenix/query/ConnectionQueryServices.java  |     9 +-
 .../query/ConnectionQueryServicesImpl.java      |   440 +-
 .../query/ConnectionlessQueryServicesImpl.java  |    69 +-
 .../query/DelegateConnectionQueryServices.java  |    43 +-
 .../org/apache/phoenix/query/HTableFactory.java |     4 +-
 .../java/org/apache/phoenix/query/KeyRange.java |    69 +-
 .../apache/phoenix/query/MetaDataMutated.java   |     3 +
 .../apache/phoenix/query/QueryConstants.java    |    46 +
 .../org/apache/phoenix/query/QueryServices.java |    26 +-
 .../phoenix/query/QueryServicesOptions.java     |    71 +-
 .../schema/ConstraintViolationException.java    |    18 +-
 .../apache/phoenix/schema/DelegateColumn.java   |    15 +-
 .../apache/phoenix/schema/DelegateTable.java    |    19 +
 .../schema/FunctionAlreadyExistsException.java  |    58 +
 .../schema/FunctionNotFoundException.java       |    52 +
 .../phoenix/schema/IllegalDataException.java    |    18 +-
 .../apache/phoenix/schema/MetaDataClient.java   |   732 +-
 .../NewerFunctionAlreadyExistsException.java    |    39 +
 .../java/org/apache/phoenix/schema/PColumn.java |     5 +
 .../org/apache/phoenix/schema/PColumnImpl.java  |    27 +-
 .../java/org/apache/phoenix/schema/PDatum.java  |     1 +
 .../org/apache/phoenix/schema/PMetaData.java    |     6 +-
 .../apache/phoenix/schema/PMetaDataEntity.java  |    22 +
 .../apache/phoenix/schema/PMetaDataImpl.java    |   124 +-
 .../java/org/apache/phoenix/schema/PTable.java  |    19 +-
 .../org/apache/phoenix/schema/PTableImpl.java   |   176 +-
 .../org/apache/phoenix/schema/RowKeySchema.java |    83 +-
 .../phoenix/schema/RowKeyValueAccessor.java     |    12 +-
 .../org/apache/phoenix/schema/SaltingUtil.java  |     2 +-
 .../org/apache/phoenix/schema/Sequence.java     |   110 +-
 .../phoenix/schema/SequenceAllocation.java      |    65 +
 .../org/apache/phoenix/schema/TableRef.java     |     4 +-
 .../org/apache/phoenix/schema/ValueSchema.java  |    30 +-
 .../phoenix/schema/stats/GuidePostsInfo.java    |     9 +-
 .../schema/stats/StatisticsCollector.java       |    68 +-
 .../phoenix/schema/stats/StatisticsScanner.java |    26 +-
 .../phoenix/schema/stats/StatisticsUtil.java    |     6 +-
 .../phoenix/schema/stats/StatisticsWriter.java  |    57 +-
 .../phoenix/schema/types/PArrayDataType.java    |  1006 +-
 .../apache/phoenix/schema/types/PBinary.java    |    36 +-
 .../phoenix/schema/types/PBinaryArray.java      |   122 +-
 .../phoenix/schema/types/PBinaryBase.java       |    98 +
 .../apache/phoenix/schema/types/PBoolean.java   |   224 +-
 .../phoenix/schema/types/PBooleanArray.java     |   123 +-
 .../org/apache/phoenix/schema/types/PChar.java  |    27 +-
 .../apache/phoenix/schema/types/PCharArray.java |   128 +-
 .../apache/phoenix/schema/types/PDataType.java  |  2047 +-
 .../org/apache/phoenix/schema/types/PDate.java  |    21 +-
 .../apache/phoenix/schema/types/PDateArray.java |   131 +-
 .../apache/phoenix/schema/types/PDecimal.java   |    32 +-
 .../phoenix/schema/types/PDecimalArray.java     |   126 +-
 .../apache/phoenix/schema/types/PDouble.java    |    30 +-
 .../phoenix/schema/types/PDoubleArray.java      |   128 +-
 .../org/apache/phoenix/schema/types/PFloat.java |    27 +-
 .../phoenix/schema/types/PFloatArray.java       |   130 +-
 .../apache/phoenix/schema/types/PInteger.java   |     9 +-
 .../phoenix/schema/types/PIntegerArray.java     |   130 +-
 .../org/apache/phoenix/schema/types/PLong.java  |    13 +-
 .../apache/phoenix/schema/types/PLongArray.java |   130 +-
 .../phoenix/schema/types/PNumericType.java      |    52 +
 .../phoenix/schema/types/PRealNumber.java       |    47 +
 .../apache/phoenix/schema/types/PSmallint.java  |     9 +-
 .../phoenix/schema/types/PSmallintArray.java    |   130 +-
 .../apache/phoenix/schema/types/PTimeArray.java |   133 +-
 .../apache/phoenix/schema/types/PTimestamp.java |    22 +-
 .../phoenix/schema/types/PTimestampArray.java   |   132 +-
 .../apache/phoenix/schema/types/PTinyint.java   |    11 +-
 .../phoenix/schema/types/PTinyintArray.java     |   130 +-
 .../schema/types/PUnsignedDateArray.java        |   128 +-
 .../phoenix/schema/types/PUnsignedDouble.java   |     9 +-
 .../schema/types/PUnsignedDoubleArray.java      |   136 +-
 .../phoenix/schema/types/PUnsignedFloat.java    |     5 +-
 .../schema/types/PUnsignedFloatArray.java       |   130 +-
 .../phoenix/schema/types/PUnsignedInt.java      |     5 +-
 .../phoenix/schema/types/PUnsignedIntArray.java |   130 +-
 .../phoenix/schema/types/PUnsignedLong.java     |    16 +-
 .../schema/types/PUnsignedLongArray.java        |   130 +-
 .../phoenix/schema/types/PUnsignedSmallint.java |     5 +-
 .../schema/types/PUnsignedSmallintArray.java    |   132 +-
 .../schema/types/PUnsignedTimeArray.java        |   132 +-
 .../schema/types/PUnsignedTimestamp.java        |     2 +-
 .../schema/types/PUnsignedTimestampArray.java   |   134 +-
 .../phoenix/schema/types/PUnsignedTinyint.java  |     5 +-
 .../schema/types/PUnsignedTinyintArray.java     |   132 +-
 .../apache/phoenix/schema/types/PVarbinary.java |     2 +-
 .../phoenix/schema/types/PVarbinaryArray.java   |   130 +-
 .../apache/phoenix/schema/types/PVarchar.java   |     2 +-
 .../phoenix/schema/types/PVarcharArray.java     |   130 +-
 .../phoenix/schema/types/PWholeNumber.java      |    43 +
 .../phoenix/schema/types/PhoenixArray.java      |   131 +-
 .../apache/phoenix/trace/TraceMetricSource.java |    15 +-
 .../org/apache/phoenix/trace/TraceReader.java   |     2 +-
 .../apache/phoenix/trace/TracingIterator.java   |     2 +-
 .../org/apache/phoenix/trace/TracingUtils.java  |     2 +-
 .../org/apache/phoenix/trace/util/NullSpan.java |    10 +-
 .../org/apache/phoenix/trace/util/Tracing.java  |    51 +-
 .../java/org/apache/phoenix/util/ByteUtil.java  |    12 +-
 .../apache/phoenix/util/CSVCommonsLoader.java   |    15 +-
 .../org/apache/phoenix/util/ColumnInfo.java     |    20 +-
 .../phoenix/util/DefaultEnvironmentEdge.java    |    34 +
 .../apache/phoenix/util/EnvironmentEdge.java    |    34 +
 .../phoenix/util/EnvironmentEdgeManager.java    |    74 +
 .../java/org/apache/phoenix/util/IndexUtil.java |    58 +-
 .../apache/phoenix/util/InstanceResolver.java   |    26 +-
 .../java/org/apache/phoenix/util/JDBCUtil.java  |    46 +-
 .../org/apache/phoenix/util/KeyValueUtil.java   |    91 +-
 .../org/apache/phoenix/util/MetaDataUtil.java   |    37 +-
 .../phoenix/util/PhoenixContextExecutor.java    |     9 +-
 .../org/apache/phoenix/util/PhoenixRuntime.java |   383 +-
 .../apache/phoenix/util/PhoenixStopWatch.java   |    81 +
 .../org/apache/phoenix/util/PropertiesUtil.java |    22 +
 .../java/org/apache/phoenix/util/QueryUtil.java |   104 +-
 .../org/apache/phoenix/util/ReadOnlyProps.java  |    37 +
 .../java/org/apache/phoenix/util/ScanUtil.java  |   219 +-
 .../org/apache/phoenix/util/SchemaUtil.java     |    72 +-
 .../org/apache/phoenix/util/SequenceUtil.java   |    47 +-
 .../org/apache/phoenix/util/StringUtil.java     |    80 +-
 .../java/org/apache/phoenix/util/TupleUtil.java |     7 +-
 .../org/apache/phoenix/util/UpgradeUtil.java    |   824 +-
 .../phoenix/util/csv/CsvUpsertExecutor.java     |    14 +-
 .../hbase/ipc/PhoenixIndexRpcSchedulerTest.java |    26 +-
 .../PhoenixIndexRpcSchedulerFactoryTest.java    |   106 -
 .../PhoenixRpcSchedulerFactoryTest.java         |   125 +
 .../phoenix/cache/JodaTimezoneCacheTest.java    |    53 +
 .../phoenix/compile/QueryCompilerTest.java      |   571 +-
 .../phoenix/compile/QueryMetaDataTest.java      |    11 +
 .../phoenix/compile/QueryOptimizerTest.java     |    30 +-
 .../compile/ScanRangesIntersectTest.java        |    37 +-
 .../apache/phoenix/compile/ScanRangesTest.java  |     3 +-
 .../TenantSpecificViewIndexCompileTest.java     |   172 +
 .../phoenix/compile/ViewCompilerTest.java       |     1 -
 .../phoenix/compile/WhereCompilerTest.java      |    13 +-
 .../phoenix/compile/WhereOptimizerTest.java     |   198 +-
 .../phoenix/execute/CorrelatePlanTest.java      |   248 +
 .../DescVarLengthFastByteComparisonsTest.java   |    45 +
 .../phoenix/execute/MutationStateTest.java      |    64 +
 .../phoenix/execute/UnnestArrayPlanTest.java    |   162 +
 .../phoenix/expression/AbsFunctionTest.java     |   180 +
 .../expression/ArithmeticOperationTest.java     |    24 +-
 .../expression/ArrayAppendFunctionTest.java     |   406 +
 .../expression/ArrayConcatFunctionTest.java     |   713 +
 .../expression/ArrayFillFunctionTest.java       |   221 +
 .../expression/ArrayPrependFunctionTest.java    |   613 +
 .../expression/ArrayToStringFunctionTest.java   |   379 +
 .../phoenix/expression/CbrtFunctionTest.java    |   127 +
 .../expression/ColumnExpressionTest.java        |     8 +-
 .../phoenix/expression/ExpFunctionTest.java     |   150 +
 .../expression/GetSetByteBitFunctionTest.java   |   189 +
 .../phoenix/expression/ILikeExpressionTest.java |    32 +-
 .../phoenix/expression/LikeExpressionTest.java  |    39 +-
 .../phoenix/expression/LnLogFunctionTest.java   |   182 +
 .../phoenix/expression/NullValueTest.java       |   111 +
 .../expression/OctetLengthFunctionTest.java     |    67 +
 .../phoenix/expression/PowerFunctionTest.java   |   182 +
 .../expression/RegexpReplaceFunctionTest.java   |    81 +
 .../expression/RegexpSplitFunctionTest.java     |    94 +
 .../expression/RegexpSubstrFunctionTest.java    |    83 +
 .../phoenix/expression/SignFunctionTest.java    |   125 +
 .../expression/SortOrderExpressionTest.java     |    25 +-
 .../phoenix/expression/SqrtFunctionTest.java    |   150 +
 .../expression/StringToArrayFunctionTest.java   |   275 +
 .../expression/function/InstrFunctionTest.java  |   108 +
 .../util/regex/PatternPerformanceTest.java      |   152 +
 .../phoenix/filter/SkipScanBigFilterTest.java   |     2 +-
 .../index/covered/TestLocalTableState.java      |    26 +-
 .../index/covered/data/TestIndexMemStore.java   |     5 +-
 .../example/TestCoveredColumnIndexCodec.java    |    10 +-
 .../covered/filter/TestFamilyOnlyFilter.java    |   106 -
 .../hbase/index/write/TestIndexWriter.java      |     2 +-
 .../index/write/TestWALRecoveryCaching.java     |    33 +-
 .../recovery/TestPerRegionIndexWriteCache.java  |    39 +-
 .../iterate/AggregateResultScannerTest.java     |     4 +
 .../iterate/SpoolingResultIteratorTest.java     |     4 +-
 .../apache/phoenix/jdbc/PhoenixDriverTest.java  |    16 +
 .../phoenix/jdbc/PhoenixEmbeddedDriverTest.java |    34 +-
 .../jdbc/PhoenixPreparedStatementTest.java      |    94 +
 .../apache/phoenix/jdbc/PhoenixTestDriver.java  |     5 +-
 .../mapreduce/CsvBulkImportUtilTest.java        |    71 +-
 .../phoenix/mapreduce/CsvBulkLoadToolTest.java  |    11 -
 .../mapreduce/CsvToKeyValueMapperTest.java      |    41 +-
 .../ColumnInfoToStringEncoderDecoderTest.java   |    42 +-
 .../util/PhoenixConfigurationUtilTest.java      |   164 +-
 .../apache/phoenix/parse/CastParseNodeTest.java |    57 +
 .../apache/phoenix/parse/QueryParserTest.java   |   167 +-
 .../java/org/apache/phoenix/query/BaseTest.java |    55 +-
 .../phoenix/query/ConnectionlessTest.java       |    14 +-
 .../org/apache/phoenix/query/OrderByTest.java   |    84 +
 .../query/ParallelIteratorsSplitTest.java       |    29 +-
 .../org/apache/phoenix/query/QueryPlanTest.java |    12 +-
 .../phoenix/query/QueryServicesTestImpl.java    |     5 +-
 .../org/apache/phoenix/schema/PCharPadTest.java |   147 +
 .../phoenix/schema/PDataTypeForArraysTest.java  |  1141 -
 .../phoenix/schema/PMetaDataImplTest.java       |    72 +-
 .../phoenix/schema/SequenceAllocationTest.java  |    76 +
 .../types/BasePhoenixArrayToStringTest.java     |    84 +
 ...PrimitiveDoublePhoenixArrayToStringTest.java |    39 +
 ...asePrimitiveIntPhoenixArrayToStringTest.java |    50 +
 .../schema/types/PDataTypeForArraysTest.java    |  1203 +
 .../phoenix/schema/types/PDataTypeTest.java     |    80 +
 .../schema/types/PDateArrayToStringTest.java    |    80 +
 .../schema/types/PVarcharArrayToStringTest.java |    71 +
 ...rimitiveBooleanPhoenixArrayToStringTest.java |    56 +
 .../PrimitiveBytePhoenixArrayToStringTest.java  |    34 +
 ...PrimitiveDoublePhoenixArrayToStringTest.java |    36 +
 .../PrimitiveFloatPhoenixArrayToStringTest.java |    36 +
 .../PrimitiveIntPhoenixArrayToStringTest.java   |    27 +
 .../PrimitiveLongPhoenixArrayToStringTest.java  |    35 +
 .../PrimitiveShortPhoenixArrayToStringTest.java |    36 +
 .../phoenix/trace/TraceMetricsSourceTest.java   |     4 +-
 .../org/apache/phoenix/util/ColumnInfoTest.java |     8 +-
 .../phoenix/util/GeneratePerformanceData.java   |    20 +-
 .../org/apache/phoenix/util/JDBCUtilTest.java   |    15 +
 .../apache/phoenix/util/MetaDataUtilTest.java   |    18 +-
 .../apache/phoenix/util/PhoenixRuntimeTest.java |    75 +
 .../apache/phoenix/util/PropertiesUtilTest.java |    23 +-
 .../org/apache/phoenix/util/QueryUtilTest.java  |    59 +-
 .../org/apache/phoenix/util/ScanUtilTest.java   |    10 +-
 .../apache/phoenix/util/SequenceUtilTest.java   |    54 +
 .../org/apache/phoenix/util/StringUtilTest.java |    32 +-
 .../util/TenantIdByteConversionTest.java        |   294 +
 .../java/org/apache/phoenix/util/TestUtil.java  |    33 +-
 .../phoenix/util/csv/CsvUpsertExecutorTest.java |     5 +-
 .../src/test/resources/hbase-default.xml        |    36 -
 phoenix-flume/pom.xml                           |    23 +-
 .../org/apache/phoenix/flume/PhoenixSinkIT.java |    99 +-
 .../flume/serializer/CustomSerializer.java      |    43 +
 .../phoenix/flume/sink/NullPhoenixSink.java     |    21 +
 .../apache/phoenix/flume/sink/PhoenixSink.java  |    24 +-
 phoenix-pherf/README.md                         |   105 +
 phoenix-pherf/cluster/pherf.sh                  |    33 +
 .../config/datamodel/user_defined_schema.sql    |    27 +
 phoenix-pherf/config/env.sh                     |    32 +
 phoenix-pherf/config/log4j.properties           |    58 +
 phoenix-pherf/config/pherf.properties           |    39 +
 .../config/scenario/user_defined_scenario.xml   |   134 +
 phoenix-pherf/pom.xml                           |   202 +
 .../org/apache/phoenix/pherf/DataIngestIT.java  |   218 +
 .../org/apache/phoenix/pherf/PherfMainIT.java   |    36 +
 .../apache/phoenix/pherf/ResultBaseTestIT.java  |    56 +
 .../apache/phoenix/pherf/SchemaReaderIT.java    |    78 +
 phoenix-pherf/src/main/assembly/cluster.xml     |    51 +
 .../src/main/assembly/components-minimal.xml    |    33 +
 phoenix-pherf/src/main/assembly/minimal.xml     |    31 +
 phoenix-pherf/src/main/assembly/standalone.xml  |    51 +
 .../java/org/apache/phoenix/pherf/Pherf.java    |   279 +
 .../apache/phoenix/pherf/PherfConstants.java    |   121 +
 .../phoenix/pherf/configuration/Column.java     |   210 +
 .../phoenix/pherf/configuration/DataModel.java  |    74 +
 .../pherf/configuration/DataOverride.java       |    37 +
 .../pherf/configuration/DataSequence.java       |    23 +
 .../pherf/configuration/DataTypeMapping.java    |    47 +
 .../pherf/configuration/ExecutionType.java      |    23 +
 .../phoenix/pherf/configuration/Query.java      |   136 +
 .../phoenix/pherf/configuration/QuerySet.java   |   140 +
 .../phoenix/pherf/configuration/Scenario.java   |   214 +
 .../pherf/configuration/WriteParams.java        |    72 +
 .../pherf/configuration/XMLConfigParser.java    |   178 +
 .../pherf/exception/FileLoaderException.java    |    30 +
 .../exception/FileLoaderRuntimeException.java   |    29 +
 .../phoenix/pherf/exception/PherfException.java |    30 +
 .../pherf/exception/PherfRuntimeException.java  |    30 +
 .../phoenix/pherf/jmx/MonitorDetails.java       |    50 +
 .../phoenix/pherf/jmx/MonitorManager.java       |   194 +
 .../java/org/apache/phoenix/pherf/jmx/Stat.java |    32 +
 .../jmx/monitors/CPULoadAverageMonitor.java     |    33 +
 .../pherf/jmx/monitors/FreeMemoryMonitor.java   |    30 +
 .../GarbageCollectorElapsedTimeMonitor.java     |    44 +
 .../pherf/jmx/monitors/HeapMemoryMonitor.java   |    32 +
 .../pherf/jmx/monitors/MaxMemoryMonitor.java    |    30 +
 .../phoenix/pherf/jmx/monitors/Monitor.java     |    30 +
 .../jmx/monitors/NonHeapMemoryMonitor.java      |    32 +
 .../ObjectPendingFinalizationCountMonitor.java  |    33 +
 .../pherf/jmx/monitors/ThreadMonitor.java       |    32 +
 .../pherf/jmx/monitors/TotalMemoryMonitor.java  |    30 +
 .../pherf/result/DataLoadThreadTime.java        |    85 +
 .../pherf/result/DataLoadTimeSummary.java       |    67 +
 .../phoenix/pherf/result/DataModelResult.java   |    74 +
 .../phoenix/pherf/result/QueryResult.java       |   173 +
 .../phoenix/pherf/result/QuerySetResult.java    |    48 +
 .../org/apache/phoenix/pherf/result/Result.java |    59 +
 .../phoenix/pherf/result/ResultHandler.java     |    48 +
 .../phoenix/pherf/result/ResultManager.java     |   160 +
 .../apache/phoenix/pherf/result/ResultUtil.java |   247 +
 .../phoenix/pherf/result/ResultValue.java       |    40 +
 .../apache/phoenix/pherf/result/RunTime.java    |   108 +
 .../phoenix/pherf/result/ScenarioResult.java    |    48 +
 .../apache/phoenix/pherf/result/ThreadTime.java |   144 +
 .../phoenix/pherf/result/file/Extension.java    |    37 +
 .../phoenix/pherf/result/file/Header.java       |    42 +
 .../pherf/result/file/ResultFileDetails.java    |    51 +
 .../pherf/result/impl/CSVFileResultHandler.java |    89 +
 .../pherf/result/impl/CSVResultHandler.java     |    68 +
 .../pherf/result/impl/DefaultResultHandler.java |    67 +
 .../pherf/result/impl/ImageResultHandler.java   |   126 +
 .../pherf/result/impl/XMLResultHandler.java     |    89 +
 .../apache/phoenix/pherf/rules/DataValue.java   |    89 +
 .../phoenix/pherf/rules/RulesApplier.java       |   403 +
 .../phoenix/pherf/schema/SchemaReader.java      |   102 +
 .../pherf/util/GoogleChartGenerator.java        |   379 +
 .../apache/phoenix/pherf/util/PhoenixUtil.java  |   332 +
 .../apache/phoenix/pherf/util/ResourceList.java |   175 +
 .../phoenix/pherf/util/RowCalculator.java       |    78 +
 .../pherf/workload/MultiThreadedRunner.java     |   156 +
 .../pherf/workload/MultithreadedDiffer.java     |    97 +
 .../phoenix/pherf/workload/QueryExecutor.java   |   282 +
 .../phoenix/pherf/workload/QueryVerifier.java   |   172 +
 .../apache/phoenix/pherf/workload/Workload.java |    27 +
 .../pherf/workload/WorkloadExecutor.java        |   125 +
 .../phoenix/pherf/workload/WriteWorkload.java   |   427 +
 .../datamodel/create_prod_test_unsalted.sql     |    33 +
 phoenix-pherf/src/main/resources/hbase-site.xml |    25 +
 .../scenario/prod_test_unsalted_scenario.xml    |   377 +
 .../org/apache/phoenix/pherf/ColumnTest.java    |    50 +
 .../phoenix/pherf/ConfigurationParserTest.java  |   226 +
 .../org/apache/phoenix/pherf/PherfTest.java     |    43 +
 .../org/apache/phoenix/pherf/ResourceTest.java  |    66 +
 .../apache/phoenix/pherf/ResultBaseTest.java    |    45 +
 .../org/apache/phoenix/pherf/ResultTest.java    |   208 +
 .../apache/phoenix/pherf/RowCalculatorTest.java |    88 +
 .../apache/phoenix/pherf/RuleGeneratorTest.java |   262 +
 .../apache/phoenix/pherf/TestHBaseProps.java    |    34 +
 .../test/resources/datamodel/test_schema.sql    |    33 +
 .../datamodel/test_schema_mt_table.sql          |    31 +
 phoenix-pherf/src/test/resources/hbase-site.xml |    25 +
 .../src/test/resources/pherf.test.properties    |    47 +
 .../test/resources/scenario/test_scenario.xml   |   256 +
 phoenix-pherf/standalone/pherf.sh               |    28 +
 phoenix-pig/pom.xml                             |    37 +-
 .../phoenix/pig/PhoenixHBaseLoaderIT.java       |   271 +-
 .../phoenix/pig/PhoenixHBaseStorerIT.java       |     4 +-
 .../phoenix/pig/udf/ReserveNSequenceTestIT.java |   276 +
 .../apache/phoenix/pig/PhoenixHBaseLoader.java  |     2 +-
 .../apache/phoenix/pig/PhoenixHBaseStorage.java |    52 +-
 .../phoenix/pig/udf/ReserveNSequence.java       |    88 +
 .../phoenix/pig/util/PhoenixPigSchemaUtil.java  |    14 +-
 .../pig/util/QuerySchemaParserFunction.java     |     2 +-
 .../pig/util/SqlQueryToColumnInfoFunction.java  |     2 +-
 .../org/apache/phoenix/pig/util/TypeUtil.java   |   395 +-
 .../pig/util/PhoenixPigSchemaUtilTest.java      |    29 +-
 .../apache/phoenix/pig/util/TypeUtilTest.java   |    70 +
 phoenix-protocol/src/main/MetaDataService.proto |    51 +-
 phoenix-protocol/src/main/PFunction.proto       |    46 +
 phoenix-protocol/src/main/PGuidePosts.proto     |    20 +
 phoenix-protocol/src/main/PTable.proto          |     5 +-
 phoenix-server-client/pom.xml                   |    66 +
 phoenix-server-client/src/build/thin-client.xml |    41 +
 .../phoenix/queryserver/client/Driver.java      |    49 +
 .../queryserver/client/ThinClientUtil.java      |    35 +
 .../resources/META-INF/services/java.sql.Driver |     1 +
 .../org-apache-phoenix-remote-jdbc.properties   |    25 +
 phoenix-server/pom.xml                          |   111 +
 .../src/build/query-server-runnable.xml         |    48 +
 .../phoenix/end2end/QueryServerBasicsIT.java    |   157 +
 .../phoenix/end2end/QueryServerThread.java      |    45 +
 .../src/it/resources/log4j.properties           |    63 +
 .../apache/phoenix/queryserver/server/Main.java |   229 +
 .../queryserver/server/PhoenixMetaFactory.java  |    28 +
 .../server/PhoenixMetaFactoryImpl.java          |    76 +
 .../apache/phoenix/DriverCohabitationTest.java  |    65 +
 phoenix-spark/README.md                         |   147 +
 phoenix-spark/pom.xml                           |   558 +
 phoenix-spark/src/it/resources/log4j.xml        |    70 +
 phoenix-spark/src/it/resources/setup.sql        |    39 +
 .../apache/phoenix/spark/PhoenixSparkIT.scala   |   521 +
 .../phoenix/spark/ConfigurationUtil.scala       |    69 +
 .../phoenix/spark/DataFrameFunctions.scala      |    63 +
 .../apache/phoenix/spark/DefaultSource.scala    |    58 +
 .../org/apache/phoenix/spark/PhoenixRDD.scala   |   163 +
 .../phoenix/spark/PhoenixRecordWritable.scala   |    98 +
 .../apache/phoenix/spark/PhoenixRelation.scala  |   117 +
 .../phoenix/spark/ProductRDDFunctions.scala     |    59 +
 .../phoenix/spark/SparkContextFunctions.scala   |    41 +
 .../spark/SparkSqlContextFunctions.scala        |    39 +
 .../org/apache/phoenix/spark/package.scala      |    36 +
 phoenix-tracing-webapp/README.md                |    15 +
 phoenix-tracing-webapp/pom.xml                  |   167 +
 .../src/build/trace-server-runnable.xml         |    60 +
 .../src/main/config/checkstyle/checker.xml      |   281 +
 .../src/main/config/checkstyle/header.txt       |    16 +
 .../src/main/config/checkstyle/suppressions.xml |    46 +
 .../tracingwebapp/http/ConnectionFactory.java   |    43 +
 .../tracingwebapp/http/EntityFactory.java       |   101 +
 .../apache/phoenix/tracingwebapp/http/Main.java |    81 +
 .../tracingwebapp/http/TraceServlet.java        |   152 +
 .../src/main/webapp/WEB-INF/web.xml             |    15 +
 .../src/main/webapp/css/bootstrap-theme.css     |   476 +
 .../src/main/webapp/css/bootstrap-theme.css.map |     1 +
 .../src/main/webapp/css/bootstrap.css           |  6584 +++++
 .../src/main/webapp/css/bootstrap.css.map       |     1 +
 .../src/main/webapp/css/font-awesome.css        |  1801 ++
 .../src/main/webapp/fonts/FontAwesome.otf       |   Bin 0 -> 93888 bytes
 .../main/webapp/fonts/fontawesome-webfont.eot   |   Bin 0 -> 60767 bytes
 .../main/webapp/fonts/fontawesome-webfont.svg   |   565 +
 .../main/webapp/fonts/fontawesome-webfont.ttf   |   Bin 0 -> 122092 bytes
 .../main/webapp/fonts/fontawesome-webfont.woff  |   Bin 0 -> 71508 bytes
 .../main/webapp/fonts/fontawesome-webfont.woff2 |   Bin 0 -> 56780 bytes
 .../fonts/glyphicons-halflings-regular.eot      |   Bin 0 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |   288 +
 .../fonts/glyphicons-halflings-regular.ttf      |   Bin 0 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |   Bin 0 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |   Bin 0 -> 18028 bytes
 .../src/main/webapp/index.html                  |   110 +
 .../src/main/webapp/js/api/chart-model.js       |   177 +
 .../src/main/webapp/js/app.js                   |    52 +
 .../src/main/webapp/js/config/chart-config.js   |    45 +
 .../js/controllers/accordion-controllers.js     |    29 +
 .../controllers/dependency-tree-controllers.js  |   143 +
 .../webapp/js/controllers/list-controllers.js   |    22 +
 .../webapp/js/controllers/search-controllers.js |    71 +
 .../js/controllers/timeline-controllers.js      |   153 +
 .../js/controllers/trace-count-controllers.js   |    40 +
 .../trace-distribution-controllers.js           |    39 +
 .../js/factories/statement-factory-config.js    |    14 +
 .../webapp/js/factories/statement-factory.js    |    29 +
 .../src/main/webapp/js/lib/angular-mocks.js     |  2468 ++
 .../src/main/webapp/js/lib/angular-route.js     |   995 +
 .../src/main/webapp/js/lib/angular.js           | 26309 +++++++++++++++++
 .../src/main/webapp/js/lib/bootstrap.js         |  2317 ++
 .../src/main/webapp/js/lib/jquery-2.1.4.js      |  9210 ++++++
 .../src/main/webapp/js/lib/jquery.min.js        |     5 +
 .../src/main/webapp/js/lib/ng-google-chart.js   |   261 +
 .../src/main/webapp/js/lib/ui-bootstrap-tpls.js |  4840 +++
 .../js/services/generate-statement-service.js   |    46 +
 .../src/main/webapp/partials/about.html         |    10 +
 .../src/main/webapp/partials/chart.html         |    24 +
 .../src/main/webapp/partials/contact.html       |     5 +
 .../main/webapp/partials/dependency-tree.html   |    11 +
 .../src/main/webapp/partials/google-chart.html  |    23 +
 .../src/main/webapp/partials/help.html          |    36 +
 .../src/main/webapp/partials/home.html          |    20 +
 .../src/main/webapp/partials/list.html          |    39 +
 .../src/main/webapp/partials/phoenix-trace.html |    60 +
 .../src/main/webapp/partials/search.html        |    58 +
 .../src/test/webapp/js/specs/app-route-spec.js  |    55 +
 .../test/webapp/js/specs/timeline-ctrl-spec.js  |    27 +
 .../webapp/js/specs/trace-list-ctrl-spec.js     |    89 +
 .../webapp/js/specs/tracing-app-ctrl-spec.js    |    23 +
 pom.xml                                         |   213 +-
 src/main/config/checkstyle/checker.xml          |   281 +
 src/main/config/checkstyle/header.txt           |    16 +
 src/main/config/checkstyle/suppressions.xml     |    46 +
 889 files changed, 140195 insertions(+), 12588 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/7d3b544a/phoenix-assembly/src/build/client.xml
----------------------------------------------------------------------
diff --cc phoenix-assembly/src/build/client.xml
index 4df6b0a,0e1e1f6..c1fe861
--- a/phoenix-assembly/src/build/client.xml
+++ b/phoenix-assembly/src/build/client.xml
@@@ -46,13 -56,9 +56,13 @@@
          <include>jline:jline</include>
          <include>sqlline:sqlline</include>
          <include>org.apache.hbase:hbase*</include>
-         <include>org.cloudera.htrace:htrace-core</include>
-         <include>io.netty:netty</include>
+         <include>org.apache.htrace:htrace-core</include>
+         <include>io.netty:netty-all</include>
          <include>commons-codec:commons-codec</include>
 +        <include>co.cask.tephra:tephra*</include>
 +        <include>org.apache.twill:twill*</include>
 +        <include>org.apache.thrift:*</include>
 +        <include>com.google.code.gson:gson*</include>
        </includes>
      </dependencySet>
  

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7d3b544a/phoenix-assembly/src/build/server-without-antlr.xml
----------------------------------------------------------------------
diff --cc phoenix-assembly/src/build/server-without-antlr.xml
index 32531da,072ade0..33cf0b7
--- a/phoenix-assembly/src/build/server-without-antlr.xml
+++ b/phoenix-assembly/src/build/server-without-antlr.xml
@@@ -36,8 -36,8 +36,10 @@@
        <includes>
          <include>org.apache.phoenix:phoenix-core</include>
          <include>org.iq80.snappy:snappy</include>
 +        <include>co.cask.tephra:tephra*</include>
 +        <include>com.google.code.gson:gson</include>
+         <include>org.jruby.joni:joni</include>
+         <include>org.jruby.jcodings:jcodings</include>
        </includes>
      </dependencySet>
    </dependencySets>

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7d3b544a/phoenix-assembly/src/build/server.xml
----------------------------------------------------------------------
diff --cc phoenix-assembly/src/build/server.xml
index 3642009,78a4b1f..141f97b
--- a/phoenix-assembly/src/build/server.xml
+++ b/phoenix-assembly/src/build/server.xml
@@@ -36,10 -36,17 +36,13 @@@
        <includes>
          <include>org.apache.phoenix:phoenix-core</include>
          <include>org.iq80.snappy:snappy</include>
 +      <include>org.antlr:antlr*</include>
 +        <include>co.cask.tephra:tephra*</include>
 +        <include>com.google.code.gson:gson</include>
+         <include>org.jruby.joni:joni</include>
+         <include>org.jruby.jcodings:jcodings</include>
+       <include>joda-time:joda-time</include>
        </includes>
      </dependencySet>
 -    <dependencySet>
 -      <unpack>true</unpack>
 -      <outputDirectory>/</outputDirectory>
 -      <includes>
 -        <include>org.antlr:antlr*</include>
 -      </includes>
 -    </dependencySet>
    </dependencySets>
  </assembly>

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7d3b544a/phoenix-core/pom.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/phoenix/blob/7d3b544a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
----------------------------------------------------------------------
diff --cc phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
index 3004bd6,dc47d99..6081cb8
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/AlterTableIT.java
@@@ -1994,51 -2001,72 +2005,120 @@@ public class AlterTableIT extends BaseO
      }
      
      @Test
 +    public void testAlterTableToBeTransactional() throws Exception {
 +        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
 +        Connection conn = DriverManager.getConnection(getUrl(), props);
 +        String ddl = "CREATE TABLE test_table (k varchar primary key)";
 +        createTestTable(getUrl(), ddl);
 +
 +        try {
 +            ddl = "ALTER TABLE test_table SET transactional=true";
 +            conn.createStatement().execute(ddl);
 +            fail();
 +        } catch (SQLException e) {
 +            
assertEquals(SQLExceptionCode.CANNOT_ALTER_PROPERTY.getErrorCode(),e.getErrorCode());
 +        }
 +    }
 +
 +    
 +    @Test
 +    public void testCreateTableToBeTransactional() throws Exception {
 +        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
 +        Connection conn = DriverManager.getConnection(getUrl(), props);
 +        String ddl = "CREATE TABLE TEST_TRANSACTIONAL_TABLE (k varchar 
primary key) transactional=true";
 +        conn.createStatement().execute(ddl);
 +        PhoenixConnection pconn = conn.unwrap(PhoenixConnection.class);
 +        PTable table = pconn.getTable(new PTableKey(null, 
"TEST_TRANSACTIONAL_TABLE"));
 +        HTableInterface htable = 
pconn.getQueryServices().getTable(Bytes.toBytes("TEST_TRANSACTIONAL_TABLE"));
 +        assertTrue(table.isTransactional());
 +        
assertTrue(htable.getTableDescriptor().getCoprocessors().contains(TransactionProcessor.class.getName()));
 +        
 +        HBaseAdmin admin = pconn.getQueryServices().getAdmin();
 +        HTableDescriptor desc = new 
HTableDescriptor(TableName.valueOf("TXN_TEST_EXISTING"));
 +        desc.addFamily(new 
HColumnDescriptor(QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES));
 +        admin.createTable(desc);
 +        try {
 +            ddl = "CREATE TABLE TXN_TEST_EXISTING (k varchar primary key) 
transactional=true";
 +            conn.createStatement().execute(ddl);
 +            fail();
 +        } catch (SQLException e) {
 +            
assertEquals(SQLExceptionCode.MAY_NOT_MAP_TO_EXISTING_TABLE_AS_TRANSACTIONAL.getErrorCode(),
 e.getErrorCode());
 +        }
 +        // Should be ok, as HBase metadata should match existing metadata.
 +        ddl = "CREATE TABLE IF NOT EXISTS TEST_TRANSACTIONAL_TABLE (k varchar 
primary key)"; 
 +        conn.createStatement().execute(ddl);
 +        table = pconn.getTable(new PTableKey(null, 
"TEST_TRANSACTIONAL_TABLE"));
 +        htable = 
pconn.getQueryServices().getTable(Bytes.toBytes("TEST_TRANSACTIONAL_TABLE"));
 +        assertTrue(table.isTransactional());
 +        
assertTrue(htable.getTableDescriptor().getCoprocessors().contains(TransactionProcessor.class.getName()));
 +    }
++
+     public void testDeclaringColumnAsRowTimestamp() throws Exception {
+         try (Connection conn = DriverManager.getConnection(getUrl())) {
+             conn.createStatement().execute("CREATE TABLE T1 (PK1 DATE NOT 
NULL, PK2 VARCHAR NOT NULL, KV1 VARCHAR CONSTRAINT PK PRIMARY KEY(PK1 
ROW_TIMESTAMP, PK2)) ");
+             PhoenixConnection phxConn = conn.unwrap(PhoenixConnection.class); 
 -            PTable table = phxConn.getMetaDataCache().getTable(new 
PTableKey(phxConn.getTenantId(), "T1"));
++            PTable table = phxConn.getMetaDataCache().getTableRef(new 
PTableKey(phxConn.getTenantId(), "T1")).getTable();
+             // Assert that the column shows up as row time stamp in the cache.
+             assertTrue(table.getColumn("PK1").isRowTimestamp());
+             assertFalse(table.getColumn("PK2").isRowTimestamp());
+             assertIsRowTimestampSet("T1", "PK1");
+             
+             conn.createStatement().execute("CREATE TABLE T6 (PK1 VARCHAR, PK2 
DATE PRIMARY KEY ROW_TIMESTAMP, KV1 VARCHAR, KV2 INTEGER)");
 -            table = phxConn.getMetaDataCache().getTable(new 
PTableKey(phxConn.getTenantId(), "T6"));
++            table = phxConn.getMetaDataCache().getTableRef(new 
PTableKey(phxConn.getTenantId(), "T6")).getTable();
+             // Assert that the column shows up as row time stamp in the cache.
+             assertFalse(table.getColumn("PK1").isRowTimestamp());
+             assertTrue(table.getColumn("PK2").isRowTimestamp());
+             assertIsRowTimestampSet("T6", "PK2");
+             
+             // Create an index on a table has a row time stamp pk column. The 
column should show up as a row time stamp column for the index too. 
+             conn.createStatement().execute("CREATE INDEX T6_IDX ON T6 (KV1) 
include (KV2)");
 -            PTable indexTable = phxConn.getMetaDataCache().getTable(new 
PTableKey(phxConn.getTenantId(), "T6_IDX"));
++            PTable indexTable = phxConn.getMetaDataCache().getTableRef(new 
PTableKey(phxConn.getTenantId(), "T6_IDX")).getTable();
+             String indexColName = 
IndexUtil.getIndexColumnName(table.getColumn("PK2"));
+             // Assert that the column shows up as row time stamp in the cache.
+             assertTrue(indexTable.getColumn(indexColName).isRowTimestamp());
+             assertIsRowTimestampSet("T6_IDX", indexColName);
+             
+             // Creating a view with a row_timestamp column in its pk 
constraint is not allowed
+             try {
+                 conn.createStatement().execute("CREATE VIEW T6_VIEW (KV3 
VARCHAR, KV4 DATE, KV5 INTEGER, CONSTRAINT PK PRIMARY KEY (KV3, KV4 
ROW_TIMESTAMP) ) AS SELECT * FROM T6");
+                 fail("Creating a view with a row_timestamp column in its pk 
constraint is not allowed");
+             } catch (SQLException e) {
+                 
assertEquals(SQLExceptionCode.ROWTIMESTAMP_NOT_ALLOWED_ON_VIEW.getErrorCode(), 
e.getErrorCode());
+             }
+             
+             // Make sure that the base table column declared as row_timestamp 
is also row_timestamp for view
+             conn.createStatement().execute("CREATE VIEW T6_VIEW (KV3 VARCHAR, 
KV4 VARCHAR, KV5 INTEGER, CONSTRAINT PK PRIMARY KEY (KV3, KV4) ) AS SELECT * 
FROM T6");
 -            PTable view = phxConn.getMetaDataCache().getTable(new 
PTableKey(phxConn.getTenantId(), "T6_VIEW"));
++            PTable view = phxConn.getMetaDataCache().getTableRef(new 
PTableKey(phxConn.getTenantId(), "T6_VIEW")).getTable();
+             assertNotNull(view.getPKColumn("PK2"));
+             assertTrue(view.getPKColumn("PK2").isRowTimestamp());
+         }
+     }
+     
+     private void assertIsRowTimestampSet(String tableName, String columnName) 
throws SQLException {
+         String sql = "SELECT IS_ROW_TIMESTAMP FROM SYSTEM.CATALOG WHERE 
TABLE_SCHEM IS NULL AND TABLE_NAME = ? AND COLUMN_FAMILY IS NULL AND 
COLUMN_NAME = ?";
+         try(Connection conn = DriverManager.getConnection(getUrl())) {
+             PreparedStatement stmt = conn.prepareStatement(sql);
+             stmt.setString(1, tableName);
+             stmt.setString(2, columnName);
+             ResultSet rs = stmt.executeQuery();
+             assertTrue(rs.next());
+             assertEquals(true, rs.getBoolean(1));
+         }
+     }
+     
+     @Test
+     public void testAddingRowTimestampColumnNotAllowedViaAlterTable() throws 
Exception {
+         try (Connection conn = DriverManager.getConnection(getUrl())) {
+             conn.createStatement().execute("CREATE TABLE T1 (PK1 VARCHAR NOT 
NULL, PK2 VARCHAR NOT NULL, KV1 VARCHAR CONSTRAINT PK PRIMARY KEY(PK1, PK2)) ");
+             // adding a new pk column that is also row_timestamp is not 
allowed
+             try {
+                 conn.createStatement().execute("ALTER TABLE T1 ADD PK3 DATE 
PRIMARY KEY ROW_TIMESTAMP");
+                 fail("Altering table to add a PK column as row_timestamp 
column should fail");
+             } catch (SQLException e) {
+                 
assertEquals(SQLExceptionCode.ROWTIMESTAMP_CREATE_ONLY.getErrorCode(), 
e.getErrorCode());
+             }
+         }
+     }
+     
  }
 - 
++ 

Reply via email to