Release Notes - Phoenix - Version 3.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
    * [PHOENIX-1062] - A SQL Trimmer for log sql execute times

** 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-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

** 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-908] - At MetaDataEndpointImpl createTable, print large of Release unknown lockId: 5
    * [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-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-962] - Basic querying fails if the current thread's context classloader is changed
    * [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-988] - The result is not expected when select case when case
    * [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-993] - Remove/exclude JRuby dependency
    * [PHOENIX-997] - Timestamp date type default format with GMT time zone
    * [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-1033] - Update HBase version to 0.94.19 to make connection to secure cluster easier
    * [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-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-1053] - UngroupedAggregateRegionObserver make lock unlock
    * [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-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-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-1154] - Fix hanging tests because metadata is not cleared up
    * [PHOENIX-1156] - Don't throw TableNotFoundException when table not found in cache
    * [PHOENIX-1157] - Improve abstraction for meta data cache

** Task
    * [PHOENIX-136] - Support derived tables
    * [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-1056] - A ImportTsv tool for phoenix to build table data and all index data.

** Sub-task
    * [PHOENIX-927] - Support derived tables in joins
    * [PHOENIX-1038] - Dynamically add INDEX_TYPE column to SYSTEM.CATALOG if not already there
    * [PHOENIX-1112] - Atomically rebuild index partially when index update fails  
    * [PHOENIX-1132] - Merge server side phoenix-hadoop2-compat.jar, phoenix-hadoop-compat.jar and phoenix-<version>.jar

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


Previous release - Version 3.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
