Release Notes - Phoenix - Version 4.2

** New Features and Sub-task
    * [PHOENIX-167] - Support semi/anti-joins
    * [PHOENIX-180] - Use stats to guide query parallelization
    * [PHOENIX-943] - Handle pushed down post-filters for subquery in joins with limit and non-groupby aggregation
    * [PHOENIX-945] - Support correlated subqueries in comparison without ANY/SOME/ALL
    * [PHOENIX-1085] - Commonize logic for adding salt byte and adding region start key in ParallelIterators
    * [PHOENIX-1168] - Support non-correlated sub-queries in where clause having a comparison operator with no modifier or a comparison operator modified by ANY, SOME or ALL
    * [PHOENIX-1170] - Change status of local index during splitting to prevent usage when slower than query through data table
    * [PHOENIX-1249] - Support local immutable index 
    * [PHOENIX-1259] - Perform partial scan for ANALYZE when table salted or local index
    * [PHOENIX-1263] - Only cache guideposts on physical PTable
    * [PHOENIX-1264] - Add StatisticsCollector to existing tables on first connection to cluster
    * [PHOENIX-1296] - Scan entire region when tenant-specific table is analyzed
    * [PHOENIX-1309] - Ensure Phoenix table is created for Local index and view index tables to store guideposts against them
    * [PHOENIX-1320] - Update stats atomically
    * [PHOENIX-1321] - Cleanup setting of timestamps when collecting and using stats
    * [PHOENIX-1322] - Add documentation for UPDATE STATISTICS command
    * [PHOENIX-1328] - Update ANALYZE syntax to collect stats on index tables and all tables
    * [PHOENIX-1332] - Support correlated subqueries in comparison with ANY/SOME/ALL
    * [PHOENIX-1333] - Store statistics guideposts as VARBINARY
    * [PHOENIX-1371] - Excessive non-Phoenix related tracing continually occurs once tracing is enabled
    * [PHOENIX-1254] - Add REGEXP_SPLIT function

** Bug
    * [PHOENIX-105] - Remove org.apache.commons.csv source once available in Maven repo
    * [PHOENIX-897] - psql command doesn't allow using certain characters in invocation
    * [PHOENIX-941] - Parallelize within regions to prevent rpc timeout
    * [PHOENIX-944] - Support derived tables in FROM clause that needs extra steps of client-side aggregation or other processing
    * [PHOENIX-973] - Lexer skips unexpected characters
    * [PHOENIX-1044] - Phoenix-Pig: No results returned unless all used columns are selected
    * [PHOENIX-1095] - Cannot add column to SYSTEM.CATALOG using Alter Table 
    * [PHOENIX-1098] - Support CASCADE option on DROP TABLE that drops all VIEWs
    * [PHOENIX-1107] - Support mutable indexes over replication
    * [PHOENIX-1139] - Failed to disable local index when index update fails
    * [PHOENIX-1163] - Intersect min/max range with scan range during compilation when salted
    * [PHOENIX-1203] - Uable to work for count (distinct col) queries via phoenix table with secondary indexes
    * [PHOENIX-1206] - Decimal serialization broken for negative numbers with more than 19 digits of precision
    * [PHOENIX-1208] - Check for existence of views doesn't take into account the fact that SYSTEM.CATALOG could be split across regions
    * [PHOENIX-1209] - DROP of system table doesn't correctly look for the right kind of table
    * [PHOENIX-1211] - Use skip scan when row value constructor uses leading row key columns 
    * [PHOENIX-1214] - SYSTEM.CATALOG cannot be created when first connection to cluster is tenant-specific
    * [PHOENIX-1219] - Salt the SYSTEM.SEQUENCE table
    * [PHOENIX-1223] - Support VARBINARY ARRAY
    * [PHOENIX-1225] - Evaluation of OR between columns in PK and not in PK incorrect
    * [PHOENIX-1228] - NPE in "select max(c1)" when c1 is a CHAR field
    * [PHOENIX-1237] - COALESCE Function - type of second parameter
    * [PHOENIX-1238] - Rollback index region split on any split failure
    * [PHOENIX-1239] - IN clause (and some others) cannot get moved from HAVING clause to WHERE clause when qualified
    * [PHOENIX-1242] - ArrayoutofBoundException Phoenix mapping to exisiting Hbase
    * [PHOENIX-1246] - Region server gets aborted with Phoenix exception
    * [PHOENIX-1248] - CsvBulkLoadTool is failing with IAE when local index specified for --index-table parameter
    * [PHOENIX-1250] - guava dependency out-dated causing NoSuchMethod error
    * [PHOENIX-1251] - Salted queries with range scan become full table scans
    * [PHOENIX-1252] - Potential lock leak for ungrouped aggregation
    * [PHOENIX-1253] - Invalid PreparedStatement.setXXX call should throw SQLException
    * [PHOENIX-1257] - Upserted data seen by SELECT in UPSERT SELECT execution
    * [PHOENIX-1258] - RegexpSubstrFunction is not useable with group by query 
    * [PHOENIX-1266] - Disallow setting NOT NULL constraint on non PK columns
    * [PHOENIX-1268] - Misleading exception when attempting to drop system table
    * [PHOENIX-1271] - Column metadata doesn't hide tenant column on tenant-specific connections.
    * [PHOENIX-1272] - Avoid pulling in unintended HBase dependencies in phoenix-core
    * [PHOENIX-1273] - Phoenix should provide ILIKE keyword
    * [PHOENIX-1275] - SYSTEM.STATS table is not created when SYSTEM.CATALOG is already present
    * [PHOENIX-1280] - ColumnProjectionFilter creates too many ImmutableBytesPtrs
    * [PHOENIX-1281] - Each MultiKeyValueTuple.setKeyValues creates a new immutable list object
    * [PHOENIX-1284] - Override config properties for unit tests not making it to server
    * [PHOENIX-1285] - Override default for histogram depth in QueryServicesTestImpl
    * [PHOENIX-1286] - Remove hadoop2 compat modules
    * [PHOENIX-1288] - Selecting more than 2 array elements via index fails with ArrayIndexOutOfBoundsException
    * [PHOENIX-1289] - Drop index during upsert may abort RS
    * [PHOENIX-1298] - Queries on fixed width type columns that have an index declared on them don't use that index
    * [PHOENIX-1303] - Possible NPE in StatisticCollector#stop
    * [PHOENIX-1305] - create index throws NPE when dataTable has specified default column family
    * [PHOENIX-1313] - Investigate why LocalIndexIT.testLocalIndexScanAfterRegionSplit() is failing
    * [PHOENIX-1314] - Assertion tripped for skip scan with two unit tests
    * [PHOENIX-1315] - Optimize query for Pig loader
    * [PHOENIX-1316] - Improve test coverage of stats framework
    * [PHOENIX-1323] - Use utility method to get HTableInterface for scans from coprocessor
    * [PHOENIX-1324] - Consolidate code that initializes Scan
    * [PHOENIX-1325] - Pass in instead of calculate if we've crossed a region boundary in ScanRanges intersect methods
    * [PHOENIX-1327] - Disallow creating arrays of fixed width base type without the max length being specified
    * [PHOENIX-1330] - Flag VARBINARY VARBINARY ARRAY declaration in DDL as an error
    * [PHOENIX-1337] - Unpadded fixed length tenant ID causes erroneous results
    * [PHOENIX-1338] - Logic to group together parallel scans is incorrect
    * [PHOENIX-1341] - PhoenixRuntime returns zero exit status on failure
    * [PHOENIX-1344] - NTH_VALUE function skips duplicit values in order by
    * [PHOENIX-1349] - VIEWs do not inherit indexes from their parent
    * [PHOENIX-1353] - CsvBulkLoad doesn't work in secure env
    * [PHOENIX-1355] - sqlline.py or psql.py may hang if they're not invoked from bin folder
    * [PHOENIX-1356] - LocalIndexIT.testLocalIndexScanAfterRegionSplit() failed at distributed cluster when getting regions
    * [PHOENIX-1357] - Salt sequence table to prevent same RS from getting all sequence calls
    * [PHOENIX-1358] - OOB in SchemaUtil.getTableNameFromFullName
    * [PHOENIX-1359] - Backward compatibility fails with 4.1 client and current 4.0 branch on server
    * [PHOENIX-1360] - NPE in SpoolingResultIterator 
    * [PHOENIX-1361] - Sequence value goes backwards if sequence validated before reserved
    * [PHOENIX-1364] - Close tracing scope to stop excessive tracing
    * [PHOENIX-1365] - Make sequence salt buckets configurable
    * [PHOENIX-1366] - ORDINAL_POSITION incorrect for multi-tenant table over tenant-specific connection
    * [PHOENIX-1368] - Persist link from VIEW back to its child VIEW
    * [PHOENIX-1369] - Add back encode/decode methods as deprecated
    * [PHOENIX-1370] - Allow query timeout to differ from RPC timeout
    * [PHOENIX-1376] - java.lang.NullPointerException occurs in JDBC driver
    * [PHOENIX-1379] - Wrong MultiIndexWriteFailureException when recovering local index table
    * [PHOENIX-1381] - NPE in CellUtil.matchingFamily() for IndexedKeyValue
    * [PHOENIX-1382] - Phoenix 4.2 RC Issue
    * [PHOENIX-1385] - Adding, dropping and adding columns fails with NPE
    * [PHOENIX-1386] - ANY function only works with absolute value and doesn't work with other parameters  
    * [PHOENIX-1390] - Stats not updated on client after major compaction
    * [PHOENIX-1391] - Remove obsolete hint

** Improvement
    * [PHOENIX-619] - Support DELETE over table with immutable index when possible
    * [PHOENIX-852] - Optimize child/parent foreign key joins
    * [PHOENIX-1030] - Change Expression.isDeterministic() to return a enum of values ALWAYS, PER_STATEMENT, PER_ROW
    * [PHOENIX-1216] - Making spooling directory location configurable
    * [PHOENIX-1245] - Remove usage of empty KeyValue object BATCH_MARKER from Indexer
    * [PHOENIX-1262] - Generate phoenix-server jar with and without antlr
    * [PHOENIX-1300] - Allow sub-queries to choose different execution path other than hash-join

** Task
    * [PHOENIX-103] - Drop hadoop1.0 specifics from code
    * [PHOENIX-761] - Implement getKeyPart for round/ceil/floor of a DECIMAL value
    * [PHOENIX-960] - Don't spin mini cluster up and down between tests
    * [PHOENIX-1297] - Adding utility methods to get primary key information from the optimized query plan
    * [PHOENIX-1310] - Spill files filling up /tmp on server

Previous release - Phoenix version 4.1

** New Feature
    * [PHOENIX-71] - Support sub-joins
    * [PHOENIX-983] - Add a function for getting the GMT offset for a given timezone and time
    * [PHOENIX-984] - Add support for DECODE built-in function
    * [PHOENIX-995] - ADD ENCODE AND LPAD functions 
    * [PHOENIX-1000] - Support FIRST_VALUE, LAST_VALUE, and NTH_VALUE aggregate functions
    * [PHOENIX-1002] - Add support for % operator
    * [PHOENIX-1043] - Add function for convert date between timezones

** Improvement
    * [PHOENIX-19] - Enhance JDBC connection of Phoenix to support connecting to a Secure HBase cluster.
    * [PHOENIX-890] - Create dev-support script for generating binary and source release tars with hadoop1 and hadoop2 profiles
    * [PHOENIX-898] - Extend PhoenixHBaseStorage to specify upsert columns
    * [PHOENIX-939] - Generalize SELECT expressions for Pig Loader
    * [PHOENIX-950] - Improve Secondary Index Update Failure Handling
    * [PHOENIX-982] - Avoid spinning up and tearing down mini cluster in tests
    * [PHOENIX-1007] - Replace getNextKeyHint(KeyValue kv) with getNextCellHint(Cell kv) in Filters
    * [PHOENIX-1069] - Improve CsvBulkLoadTool to build indexes when loading data.
    * [PHOENIX-1072] - Fast fail sqlline.py when pass wrong quorum string or hbase cluster hasnt' started yet 
    * [PHOENIX-1101] - Provide a way to create Phoenix Statements on the server side inside a CP
    * [PHOENIX-1103] - Remove hash join special case for ChunkedResultIterator
    * [PHOENIX-1175] - Add setReadOnly and setFetchSize options
    * [PHOENIX-1198] - Add ability to pass custom tags to be added to log lines

** Sub-task
    * [PHOENIX-136] - Support derived tables in from clause
    * [PHOENIX-177] - Collect usage and performance metrics
    * [PHOENIX-927] - Support derived tables in joins
    * [PHOENIX-934] - Make changes to specify index is local
    * [PHOENIX-935] - create local index table with the same split keys of user table
    * [PHOENIX-936] - Custom load balancer to colocate user table regions and index table regions
    * [PHOENIX-937] - Handle puts on local index table
    * [PHOENIX-955] - Skip region start key at beginning of local index rows
    * [PHOENIX-994] - Handle scans on local index table in case any best fit covering local index available
    * [PHOENIX-1004] - 'drop index' should delete index data from local index table
    * [PHOENIX-1015] - Support joining back to data table row from local index when query condition involves leading columns in local index
    * [PHOENIX-1038] - Dynamically add INDEX_TYPE column to SYSTEM.CATALOG if not already there
    * [PHOENIX-1058] - Support index region split on it's corresponding data region split
    * [PHOENIX-1086] - Document local indexes
    * [PHOENIX-1099] - Fix performance issues with unit tests.
    * [PHOENIX-1112] - Atomically rebuild index partially when index update fails  
    * [PHOENIX-1114] - Add user-level documentation for tracing
    * [PHOENIX-1129] - NotCompliantMBeanException
    * [PHOENIX-1132] - Merge server side phoenix-hadoop2-compat.jar, phoenix-hadoop-compat.jar and phoenix-<version>.jar
    * [PHOENIX-1161] - Prevent necessity of clearing region cache on every access for local indexing
    * [PHOENIX-1196] - Add ability to add custom tracing tags for connections and/or upserts and selects

** Bug
    * [PHOENIX-3] - TRUNC method doesn't work on column of datatype timestamp
    * [PHOENIX-11] - Create Pig Loader
    * [PHOENIX-41] - HBase restart ConnectionLoss
    * [PHOENIX-63] - Can't add null value to a secondary indexed table
    * [PHOENIX-831] - First Connection to Phoenix blows up if it is tenant specific
    * [PHOENIX-902] - Allow family qualified names in CSVCommonsLoader
    * [PHOENIX-909] - Handle scan time range for low time resolution OS
    * [PHOENIX-911] - DDL containing only PK cols in the column list doesn't respect HBase specific attributes
    * [PHOENIX-915] - Numeric functions ROUND, CEIL, FLOOR return incorrect results for DOUBLE
    * [PHOENIX-916] - Time clock skew issue when SYSTEM.CATALOG moves between region servers
    * [PHOENIX-920] - SqlLine shows funky characters when running on Windows
    * [PHOENIX-924] - Classify PhoenixHBaseStorageTest as an integration test
    * [PHOENIX-938] - Use higher priority queue for index updates to prevent deadlock
    * [PHOENIX-948] - Pig integration tests don't get run via Maven
    * [PHOENIX-951] - Don't push LIMIT as PageFilter for joins
    * [PHOENIX-952] - Support ANY and ALL built-ins for ARRAYs
    * [PHOENIX-954] - View index sequences of a non multi tenant table are not getting deleted after main table drop
    * [PHOENIX-956] - Connection properties ignored
    * [PHOENIX-965] - Cannot aggregate on index with NULL values
    * [PHOENIX-966] - Phoenix needs to be on the main classpath of SQL tools
    * [PHOENIX-969] - java.util.concurrent.TimeoutException while reading the result set
    * [PHOENIX-979] - DELETE deletes row when WHERE contains PK fields but other than PK conditions are false
    * [PHOENIX-981] - Joins using Phoenix client on v.3.0.0 and server 3.0 head of branch fails on backward compatibility
    * [PHOENIX-985] - performance.py script fails to execute queries
    * [PHOENIX-986] - Improve error message on CSV import if table not found
    * [PHOENIX-987] - Add missing category information to integration tests
    * [PHOENIX-989] - problem setting column type of Array to null
    * [PHOENIX-990] - OOM caused by order by query returning all rows
    * [PHOENIX-991] - IT tests failed on hadoop2
    * [PHOENIX-992] - Replace hTable.getRowOrBefore with ReverseScan to get maxKey in StatsManagerImpl
    * [PHOENIX-993] - Remove/exclude JRuby dependency
    * [PHOENIX-1001] - Using NEXT VALUE FOR 'sequence' as an input to a function cause a NPE
    * [PHOENIX-1005] - upsert data error after drop index
    * [PHOENIX-1008] - Problem initiating and using FLOAT ARRAY Type
    * [PHOENIX-1016] - Support MINVALUE, MAXVALUE, and CYCLE options in CREATE SEQUENCE
    * [PHOENIX-1032] - Don't compile alternate plans if query is a point lookup
    * [PHOENIX-1034] - Move validate/reserve of sequences into query compile
    * [PHOENIX-1037] - Implement getResultSetSqlType for UNSIGNED date/time types
    * [PHOENIX-1039] - PhoenixHBaseLoaderIT fails on hadoop-2 profile
    * [PHOENIX-1047] - Auto cast - add/sub decimal constant and integer
    * [PHOENIX-1048] - tables and sequences should be deleted at different times when scn set at BaseConnectedQueryIT#deletePriorTables
    * [PHOENIX-1049] - Secondary indices can cause "ERROR 203 (22005): Type mismatch" in queries involving joins
    * [PHOENIX-1052] - Secondary indices can cause "ERROR 504 (42703): Undefined column" in queries involving joins
    * [PHOENIX-1075] - Mathematical order of operations are improperly evaluated.
    * [PHOENIX-1076] - Usage of CAST producing syntax error
    * [PHOENIX-1079] - ConnectionQueryServicesImpl : Close HTable after use
    * [PHOENIX-1080] - Fix PhoenixRuntime.decodepk for salted tables. Add integration tests.
    * [PHOENIX-1083] - IN list of RVC combined with AND doesn't return expected rows
    * [PHOENIX-1088] - Cannot insert data , while Index is empty string
    * [PHOENIX-1089] - Row value constructors performance issue with multi-tenant views
    * [PHOENIX-1090] - Fix HTable leak in ServerCacheClient
    * [PHOENIX-1096] - Duplicate sequence values returned when doing upsert select against a salted table.
    * [PHOENIX-1097] - ChunkedResultIteratorFactory.newIterator is not closing the passed iterator resulting in HTable leak.
    * [PHOENIX-1100] - Upsert Select with Sequence and Order By doesn't result in sequence getting assigned based on requested ordering 
    * [PHOENIX-1102] - Query Finds No Rows When Using Multiple Column Families in where clause
    * [PHOENIX-1104] - Do not shutdown threadpool when initialization fails
    * [PHOENIX-1105] - TableNotFoundException does not get caught if SYSTEM.TABLE is not present for whitelisted upgrade
    * [PHOENIX-1109] - PhoenixTestDriver needs to call shutdown on executor 
    * [PHOENIX-1110] - Fix flappy MultiCfQueryExecIT
    * [PHOENIX-1111] - Fix flapping unit tests by removing inappropriate usage of TestUtil.TEST_PROPERTIES
    * [PHOENIX-1122] - Ensure TEST_PROPERTIES is not updated to prevent test flapping
    * [PHOENIX-1125] - SQLException when connection string is of form jdbc:phoenix:localhost:1234:userName
    * [PHOENIX-1128] - Fix build errors introduced by switch to hadoop2 as default profile
    * [PHOENIX-1130] - SkipScanFilter gets IndexOutOfBoundsException when intersecting salted tables
    * [PHOENIX-1131] - PhoenixRuntime.encodePk needs to pad row key values to max column length
    * [PHOENIX-1133] - Skip scan intersect method not reseting state correctly
    * [PHOENIX-1137] - SkipScanFilter.intersect not called for aggregate queries
    * [PHOENIX-1140] - Incorrect padding for row key columns
    * [PHOENIX-1141] - Fix HTable resource leak in ConnectionQueryServicesImpl.metaDataCoprocessorExec
    * [PHOENIX-1143] - Prevent race condition between creating phoenix connection and closing phoenix driver/connection query services.
    * [PHOENIX-1146] - Detect stale client region cache on server and retry scans in split regions
    * [PHOENIX-1147] - Ensure data table is sent to client if index table changes states
    * [PHOENIX-1149] - Index mutations should be committed as batches while building local index
    * [PHOENIX-1150] - scan on local index(index of view) for queries with no where condition should not read other indexes data stored in the shared index table
    * [PHOENIX-1152] - Prepend seek next hint of skip scan with region start key for local indexing
    * [PHOENIX-1153] - Fix failing PhoenixTracingEndToEndIT test
    * [PHOENIX-1154] - Fix hanging tests because metadata is not cleared up
    * [PHOENIX-1155] - Rename tracing test classes for consistency
    * [PHOENIX-1156] - Don't throw TableNotFoundException when table not found in cache
    * [PHOENIX-1157] - Improve abstraction for meta data cache
    * [PHOENIX-1162] - Use physical name instead of logical name when recovering from stale region cache
    * [PHOENIX-1166] - Avoid HTable creation in coprocessors to write into local index table
    * [PHOENIX-1171] - Dropping the index is not verifying the associated table
    * [PHOENIX-1172] - Prevent lock contention in ConnectionQueryServicesImpl. Fix exception handling. 
    * [PHOENIX-1174] - Rename and move properties using existing convention
    * [PHOENIX-1176] - Allow tracing to be turned on globally through config
    * [PHOENIX-1180] - Rename test classes so they are properly picked up by the test runner
    * [PHOENIX-1181] - client cache fails to update itself after a table was altered from a diff client
    * [PHOENIX-1187] - Enable tracing on server
    * [PHOENIX-1188] - Performance regression for non-aggregate queries
    * [PHOENIX-1183] - phoenix-pig does not work with CDH 5.1
    * [PHOENIX-1184] - Phoenix 4.0 will not compile agaist CDH HBase 5.1
    * [PHOENIX-1192] - Re-enable reverse scan to prevent order by

** Task
    * [PHOENIX-539] - Implement parallel scanner that does not spool to disk
    * [PHOENIX-674] - Run unit tests in parallel
    * [PHOENIX-681] - Enhance JDBC connection of Phoenix to support connecting to a Secure HBase cluster.
    * [PHOENIX-788] - Support cast from/to DATE/TIME/TIMESTAMP to/from LONG/UNSIGNED_LONG
    * [PHOENIX-828] - Detect if split occurs while ORDER BY query is in progress
    * [PHOENIX-949] - Replace Filter#filterRow(List) with Filter#filterRowCells(List)

** Test
    * [PHOENIX-1136] - Add Integration Tests to verify the fix for PHOENIX-1133

Previous release - Version 4.0.0-incubating

** New Feature
    * [PHOENIX-21] - Support indexes on VIEWs including tenant-specific views
    * [PHOENIX-92] - Hive StorageHandler
    * [PHOENIX-149] - Support SEQUENCE creation and usage
    * [PHOENIX-427] - Allow creating VIEWs on the same physical HBase table
    * [PHOENIX-632] - Support equi-joins through broadcast hash join
    * [PHOENIX-749] - Support JDBC ARRAY type

** Improvement
    * [PHOENIX-10] - Push projection of a single ARRAY element to the server
    * [PHOENIX-13] - Provide a "nocache" hint to a query
    * [PHOENIX-15] - Allow forcing a memstore flush for a table
    * [PHOENIX-16] - Where clause optimization in join queries
    * [PHOENIX-17] - Support to make use of partial covered indexes in scan
    * [PHOENIX-19] - Enhance JDBC connection of Phoenix to support connecting to a Secure HBase cluster.
    * [PHOENIX-31] - Add encode/decode methods for PK values
    * [PHOENIX-33] - Support table-wildcard select in join queries
    * [PHOENIX-40] - Add support for batching
    * [PHOENIX-42] - Provide end2end test command line utility
    * [PHOENIX-50] - Convert shell scripts under bin to python script so same scripts can run in unix & windows
    * [PHOENIX-68] - Add hint "NO_STAR_JOIN" to indicate if star join optimization should be avoided for multi inner join queries
    * [PHOENIX-85] - Refine error handling in HashJoinPlan execution and add warnings
    * [PHOENIX-129] - Improve MapReduce-based import
    * [PHOENIX-130] - Separate execution of slow (integration) tests from fast unit tests
    * [PHOENIX-853] - Support CAST(x as varchar(length)) syntax
    * [PHOENIX-856] - Allow phoenix driver reuse after being closed

** Bug
    * [PHOENIX-7] - after Connection close, there are still 10 phoenix threads alive
    * [PHOENIX-12] - snappy error on osx 64bit
    * [PHOENIX-18] - Distinct based aggregations not working correctly when query contains ORDER BY
    * [PHOENIX-20] - Single Key(s) not recognized by optimizer when table is salted
    * [PHOENIX-22] - Explicitly declare views as read-only or updatable
    * [PHOENIX-26] - Unit test ArithmeticQueryTest#testDecimalUpsertSelect fails on HBase 0.94.15
    * [PHOENIX-29] - Add custom filter to more efficiently navigate KeyValues in row
    * [PHOENIX-30] - NPE on PTable.getColumn(String) if column with same name used in the PK and non PK
    * [PHOENIX-32] - Replace generic ColumnModifier with specific SortOrder
    * [PHOENIX-34] - Insufficient memory exception on join when RHS rows count > 250K 
    * [PHOENIX-35] - Perf test memory usage for indexes
    * [PHOENIX-37] - Prevent deserialize and re-serialize all array elements in construction of array
    * [PHOENIX-38] - Data load time with mutable index is 5X slower than Phoenix 2.2.2, 2.2.3
    * [PHOENIX-44] - Cannot create index on tables with case-sensitive schema names
    * [PHOENIX-49] - ArrayIndexOutOfBoundsException when creating index
    * [PHOENIX-53] - Replace CSV loader with Apache Commons CSV loader
    * [PHOENIX-54] - PhoenixSink references jboss channel exception
    * [PHOENIX-57] - ClientKeyValue doesn't work in debug mode
    * [PHOENIX-58] - Client jars are missing phoenix code
    * [PHOENIX-60] - UPSERT SELECT does not increment sequences
    * [PHOENIX-61] - Indexing on columns of Date/Timestamp type would lead to ArgumentTypeMismatchException in optimize()
    * [PHOENIX-62] - Precision loss for decimal type (no scale specified) when creation of index happens after the record insertion
    * [PHOENIX-65] - Timeout in running E2E tests after PHOENIX-42 commit 
    * [PHOENIX-66] - Support array creation from CSV file
    * [PHOENIX-67] - Lazy initialize QueryServices in PhoenixDriver 
    * [PHOENIX-70] - Add doc for client jar being for a specific Hadoop version
    * [PHOENIX-72] - SkipScanFilter intersect may be incorrect for ranges
    * [PHOENIX-75] - Add documentation on website describing ARRAY support
    * [PHOENIX-76] - Fix perf regression due to PHOENIX-29
    * [PHOENIX-77] - Indexes and salting on views is broken
    * [PHOENIX-78] - MetaDataUtil must respect ClientKeyValue usage
    * [PHOENIX-80] - Improve handing of TableNotFoundException in ConnectionQueryServicesImpl#getTable
    * [PHOENIX-82] - Allow ARRAY to be compared and used at end of PK
    * [PHOENIX-83] - select with left join when the where condition has right tables, the result is not expected
    * [PHOENIX-84] - explain the query plan is not the actually order 
    * [PHOENIX-89] - Statements are not closed using PhoenixConnection.executeStatements()
    * [PHOENIX-90] - MemoryChunk objects might be orphaned when creating new caches in TenantCacheImpl
    * [PHOENIX-93] - Add shutdown hook to free any straggling resources
    * [PHOENIX-94] - Memory leak in running unit tests on Mac perhaps mini-cluster related
    * [PHOENIX-95] - Use catalog argument for tenant in JDBC metadata APIs
    * [PHOENIX-96] - Enable use of ClientKeyValueBuilder to reduce memory footprint
    * [PHOENIX-97] - Sort columns by COLUMN_NAME for metaData.getPrimaryKey() as dictated by spec
    * [PHOENIX-99] - Automatic white list based upgrade from 2.2 to 3.0
    * [PHOENIX-100] - Relax compatibility check to only check that the major version matches between the client and server jars
    * [PHOENIX-106] - NPE when adding dynamic columns to a salted table
    * [PHOENIX-107] - Pass through already normalized strings to CSVLoader
    * [PHOENIX-108] - Add testing around multi-tenancy
    * [PHOENIX-110] - Indexes with tenant-specific views appear to be broken
    * [PHOENIX-113] - Enable usage of ClientKeyValue on for indexing on server
    * [PHOENIX-114] - Add Hints so that user can select whether to use "avoid seek optimization" or not
    * [PHOENIX-116] - Phoenix array integer types overlap with existing java.sql.Types
    * [PHOENIX-118] - Type mismatch error on upsert for unsigned_date and date
    * [PHOENIX-119] - Removed unnecessary Expression.getByteSize() method
    * [PHOENIX-121] - Metadata query on 2.X fails after upgrade to Phoenix 3.0
    * [PHOENIX-122] - SELECT * FROM TABLE ORDER BY NONPK COLUMN doesn't return values for all the columns
    * [PHOENIX-123] - Fixed with array should not write any footer
    * [PHOENIX-124] - Add one page documentation in markdown for ARRAY support
    * [PHOENIX-126] - Use of BOOLEAN in index and/or group by causes exception
    * [PHOENIX-127] - Query with pk IS NULL OR pk IN (1,2) return incorrect results
    * [PHOENIX-128] - Support coercion and descending sort order for ARRAY
    * [PHOENIX-131] - Incorrect determination of total available memory
    * [PHOENIX-829] - Uppercase file name if none supplied for CSV import
    * [PHOENIX-830] - Add DISCLAIMER file along side NOTICE file
    * [PHOENIX-832] - Drop the ".txt" extension on the NOTICE, LICENSE, CHANGES, and README files
    * [PHOENIX-834] - Unit tests fail if default locale is not en_US
    * [PHOENIX-835] - Datatype statements in CAST operations are case-sensitive
    * [PHOENIX-841] - Upserting into tenant-specific view with no where clause fails with an NPE
    * [PHOENIX-842] - Use better namespace for maven artifacts
    * [PHOENIX-843] - Incorrect java.sql.Types value returned for array types in result set
    * [PHOENIX-845] - log4j setting is wrong
    * [PHOENIX-846] - Select DISTINCT with LIMIT does full scans
    * [PHOENIX-847] - Tenant metadata isolation broken in Connection.getMetaData()
    * [PHOENIX-849] - Test StatsManagerIT#testStatsManager is flaky 
    * [PHOENIX-850] - Optimize ORDER BY and GROUP BY for tenant specific indexes
    * [PHOENIX-857] - Duplicate dependency on phoenix-core in phoenix-flume
    * [PHOENIX-858] - Disallow null primary key
    * [PHOENIX-861] - MapReduce import doesn't use a default array separator
    * [PHOENIX-863] - Relax delete check for immutable secondary indexes
    * [PHOENIX-865] - Bump utility logging level from INFO to WARN because of too much logging info
    * [PHOENIX-871] - Mutable Secondary Indexing can cause a deadlock on exception
    * [PHOENIX-872] - getConnection() sometimes fails with a ConcurrentModificationException
    * [PHOENIX-875] - NPE when running end2end tests against a live cluster
    * [PHOENIX-876] - Remove unnecessary phoenix-*-mapreduce.jar
    * [PHOENIX-881] - end2end test fails to run against a live cluster using end2endtest.py
    * [PHOENIX-882] - Updatable view should check view condition upon upsert
    * [PHOENIX-885] - Metadata ORDINAL_POSITION is off by one if table is salted
    * [PHOENIX-887] - Fix upgrade when wildcard used to upgrade everything
    * [PHOENIX-891] - Multi-tenant - Upserting values without specifying columns names upserts values in wrong columns
    * [PHOENIX-892] - Multi-tenant - Creating index throws NoSuchColumnFamilyException when CF is specified in base table
    * [PHOENIX-901] - Ensure ConnectionQueryServices only initialized once
    * [PHOENIX-904] - Connection leak during running of upgrade

** Task
    * [PHOENIX-25] - Remove @author tags
    * [PHOENIX-45] - Insure all source files include the ASF preamble
    * [PHOENIX-46] - Use Apache Rat for release compliance checking
    * [PHOENIX-622] - Support multi-tenant tables as views
    * [PHOENIX-873] - Add missing license headers as discovered by Apache Rat
    * [PHOENIX-874] - Update NOTICE file based on http://apache.org/legal/src-headers.html#notice
