
Release Notes - Sqoop - Version 1.4.6

** Sub-task
    * [SQOOP-1390] - Import data to HDFS as a set of Parquet files
    * [SQOOP-1393] - Import data from database to Hive as Parquet files
    * [SQOOP-1394] - Export data from HDFS back to an RDMS
    * [SQOOP-1395] - Potential naming conflict in Avro schema
    * [SQOOP-1401] - Fix checkstyle violations for ClassWriter.java
    * [SQOOP-1491] - Remove SqoopAvroRecord
    * [SQOOP-1492] - Move Avro and GenericRecord related common code to AvroUtil
    * [SQOOP-1508] - Add warning when using unsupported compression codec
    * [SQOOP-2284] - Update license file

** Bug
    * [SQOOP-1125] - Out of memory errors when number of records to import < 0.5 * splitSize
    * [SQOOP-1368] - the configuration properties are reset in HBaseImportJob
    * [SQOOP-1387] - Incorrect permissions on manager.d directory can lead to NPE
    * [SQOOP-1400] - Failed to import data using mysql-connector-java-5.1.17.jar
    * [SQOOP-1411] - The number of tasks is not set properly in PGBulkloadExportManager
    * [SQOOP-1412] - Text splitter should also consider NCHAR and NVARCHAR fields
    * [SQOOP-1422] - Integration tests for Oracle connector fail as not using direct option
    * [SQOOP-1423] - hcatalog export with --map-column-java fails
    * [SQOOP-1429] - Fix native characters usage for SqlServer object names
    * [SQOOP-1433] - Oracle direct connector fails with Oracle 12c JDBC driver
    * [SQOOP-1437] - 'Text' reserved word in compliation
    * [SQOOP-1472] - Use Properties.load() method to load property files under conf/manager.d
    * [SQOOP-1474] - Fix usage of StringUtils.repeat method
    * [SQOOP-1490] - Connectors documentation doesn't build on CentOS 5
    * [SQOOP-1494] - Fix generateArvoSchema in DataDrivenImportJob
    * [SQOOP-1519] - Enable HCat/HBase/Accumulo operations with OraOop connection manager
    * [SQOOP-1520] - The table is null when using import into hive as parquet file and query option
    * [SQOOP-1524] - Error to import into hive as textfile on hive 0.13.0
    * [SQOOP-1539] - Empty partition keys and values in multiple partition key hcatalog usage should be validated
    * [SQOOP-1540] - Accumulo unit tests fail with Accumulo 1.6.1 because of conflicts in libthrift libraries
    * [SQOOP-1617] - MySQL fetch-size behavior changed with SQOOP-1400
    * [SQOOP-1627] - Fix Hadoop100 and Hadoop20 profile
    * [SQOOP-1631] - Drop confusing use of --clean-staging-table parameter from PGBulkloadManager
    * [SQOOP-1663] - OraOop test cases are not logging any output
    * [SQOOP-1682] - Test cases *LobAvroImportTest are failing
    * [SQOOP-1684] - Use pre-existing HBase delegation token
    * [SQOOP-1685] - HCatalog integration is not working on JDK8
    * [SQOOP-1759] - TestIncrementalImport fails with NPE on Windows
    * [SQOOP-1764] - Numeric Overflow when getting extent map
    * [SQOOP-1779] - Add support for --hive-database when importing Parquet files into Hive
    * [SQOOP-1826] - NPE in ImportTool.lastModifiedMerge during postgres import
    * [SQOOP-1890] - Properly escape table name in generated queries
    * [SQOOP-1970] - Add warning about trailing whitespace characters when using password file to User guide
    * [SQOOP-2017] - Print out loaded columns and their type in verbose mode
    * [SQOOP-2024] - Hive import doesn't remove target directory in hive
    * [SQOOP-2055] - Run only one map task attempt during export
    * [SQOOP-2057] - Skip delegation token generation flag during hbase import
    * [SQOOP-2128] - HBaseImportJob should close connection from HBaseAdmin to HBase
    * [SQOOP-2130] - BaseSqoopTestCase should use manager.escapeTable instead of directly hardcoding double quotes
    * [SQOOP-2132] - Remove test TestMainframeImportTool.testPrintHelp
    * [SQOOP-2136] - Test case SqlServerUpsertOutputFormatTest is failing
    * [SQOOP-2137] - Sqoop tests and documentation refer to as-avrofile (instead of as-avrodatafile)
    * [SQOOP-2145] - Default Hive home is not being set properly under certain circumstances
    * [SQOOP-2164] - Enhance the Netezza Connector for Sqoop
    * [SQOOP-2170] - MySQL specific tests are not properly cleaning up created tables
    * [SQOOP-2191] - Provide an option automatically choose one mapper when neither primary key is defined nor split by column is provided
    * [SQOOP-2254] - Failed to build release notes
    * [SQOOP-2257] - Parquet target for imports with Hive overwrite option does not work
    * [SQOOP-2263] - Sqoop1 has some files without a copyright header
    * [SQOOP-2264] - Exclude and remove SqoopUserGuide.xml from git repository
    * [SQOOP-2281] - Set overwrite on kite dataset
    * [SQOOP-2282] - Add validation check for --hive-import and --append
    * [SQOOP-2283] - Support usage of --exec and --password-alias
    * [SQOOP-2286] - Ensure Sqoop generates valid avro column names
    * [SQOOP-2290] - java.lang.ArrayIndexOutOfBoundsException thrown when malformed column mapping is provided

** Improvement
    * [SQOOP-1330] - Ignore blank newlines in managers.d property files
    * [SQOOP-1391] - Compression codec handling
    * [SQOOP-1392] - Create the temporary directory inside task working dir rather then in tmp
    * [SQOOP-1421] - Automated patch script
    * [SQOOP-1471] - Use Hadoop CredentialProvider API to encyrpt passwords at rest
    * [SQOOP-1489] - Propagate cubrid properties to the test VM
    * [SQOOP-1567] - Auto-Configure JTDS Driver From JDBCUrl
    * [SQOOP-1622] - Copying from staging table should be in single transaction for pg_bulkload connector
    * [SQOOP-1632] - Add support for index organized tables to direct connector
    * [SQOOP-2149] - Update Kite dependency to 1.0.0
    * [SQOOP-2252] - Add default to Avro Schema

** New Feature
    * [SQOOP-1272] - Support importing mainframe sequential datasets
    * [SQOOP-1309] - Expand the Sqoop to support CUBRID database.
    * [SQOOP-1366] - Propose to add Parquet support
    * [SQOOP-1403] - Upsert export for SQL Server
    * [SQOOP-1405] - Add arg to enable SQL Server identity insert on export
    * [SQOOP-1450] - Copy the avro schema file to hdfs for AVRO based import

** Task
    * [SQOOP-1693] - Upgrade Kite SDK to 0.17


Release Notes - Sqoop - Version 1.4.5

** Sub-task
    * [SQOOP-1194] - Make changes to Sqoop build file to enable Netezza third party tests
    * [SQOOP-1323] - Update HCatalog version to 0.13 in Sqoop builds
    * [SQOOP-1324] - Support new hive datatypes in Sqoop hcatalog integration
    * [SQOOP-1325] - Make hcatalog object names escaped during creation so that reserved words are properly processed
    * [SQOOP-1326] - Support multiple static partition keys for better integration support
    * [SQOOP-1363] - Document Hcatalog integration enhancements introduced in SQOOP-1322

** Bug
    * [SQOOP-585] - Bug when sqoop a join of two tables with the same column name with mysql backend
    * [SQOOP-832] - Document --columns argument usage in export tool
    * [SQOOP-1032] - Add the --bulk-load-dir option to support the HBase doBulkLoad function
    * [SQOOP-1107] - Further improve error reporting when exporting malformed data
    * [SQOOP-1117] - when failed to import a non-existing table, the failure information includes NullPointerException
    * [SQOOP-1138] - incremental lastmodified should re-use output directory
    * [SQOOP-1167] - Enhance HCatalog support to allow direct mode connection manager implementations
    * [SQOOP-1170] - Can't import columns with name "public"
    * [SQOOP-1179] - Incorrect warning saying --hive-import was not specified when it was specified
    * [SQOOP-1185] - LobAvroImportTestCase is sensitive to test method order execution
    * [SQOOP-1190] - Class HCatHadoopShims will be removed in HCatalog 0.12
    * [SQOOP-1192] - Add option "--skip-dist-cache" to allow Sqoop not copying jars in %SQOOP_HOME%\lib folder when launched by Oozie and use Oozie share lib
    * [SQOOP-1209] - DirectNetezzaManager fails to find tables from older Netezza system catalogs
    * [SQOOP-1216] - Improve error message on corrupted input while doing export
    * [SQOOP-1224] - Enable use of Oracle Wallets with Oracle Manager
    * [SQOOP-1226] - --password-file option triggers FileSystemClosed exception at end of Oozie action
    * [SQOOP-1227] - Sqoop fails to compile against commons-io higher then 1.4
    * [SQOOP-1228] - Method Configuration#unset is not available on Hadoop < 1.2.0
    * [SQOOP-1239] - Sqoop import code too large error
    * [SQOOP-1246] - HBaseImportJob should add job authtoken only if HBase is secured
    * [SQOOP-1249] - Sqoop HCatalog Import fails with -queries because of validation issues
    * [SQOOP-1250] - Oracle connector is not disabling autoCommit on created connections
    * [SQOOP-1259] - Sqoop on Windows can't run HCatalog/HBase multinode jobs
    * [SQOOP-1260] - HADOOP_MAPRED_HOME should be defaulted correctly
    * [SQOOP-1261] - CompilationManager should add Hadoop 2.x libraries to the classpath under Hadoop 2.x
    * [SQOOP-1268] - Sqoop tarballs do not contain .gitignore and .gitattribute files
    * [SQOOP-1271] - Sqoop hcatalog location should support older bigtop default location also
    * [SQOOP-1273] - Multiple append jobs can easily end up sharing directories
    * [SQOOP-1278] - Allow use of uncommitted isolation for databases that support it as an import option
    * [SQOOP-1279] - Sqoop connection resiliency option breaks older Mysql versions that don't have JDBC 4 methods
    * [SQOOP-1297] - Parameterize the Accumulo version in the build files
    * [SQOOP-1298] - Cannot export to VARBINARY with null value
    * [SQOOP-1302] - Doesn't run the mapper for remaining splits, when split-by ROWNUM
    * [SQOOP-1303] - Can only write to default file system on incremental import
    * [SQOOP-1316] - Example for use of password file in docs is incorrect
    * [SQOOP-1322] - Enhance Sqoop HCatalog Integration to cover features introduced in newer Hive versions
    * [SQOOP-1329] - JDBC connection to Oracle timeout after data import but before hive metadata import
    * [SQOOP-1339] - Synchronize .gitignore files
    * [SQOOP-1353] - Sqoop 1.4.5 release preparation
    * [SQOOP-1358] - Add wallet support for Oracle High performance connector
    * [SQOOP-1359] - Fix avro versions in Sqoop to stop shipping hadoop1  jars with hadoop2
    * [SQOOP-1362] - TestImportJob getContent method doesn't work
    * [SQOOP-1365] - Do not print stack trace when we can't move generated .java file to CWD
    * [SQOOP-1370] - AccumuloUtils can throw NPE when zookeeper or accumulo home is null
    * [SQOOP-1372] - configure-sqoop does not export ZOOKEEPER_HOME
    * [SQOOP-1398] - Upgrade ivy version used to the latest release version
    * [SQOOP-1399] - Fix TestOraOopJdbcUrl test case
    * [SQOOP-1406] - Add license headers
    * [SQOOP-1410] - Update change log for 1.4.5

** Improvement
    * [SQOOP-435] - Avro import should write the Schema to a file
    * [SQOOP-1056] - Implement connection resiliency in Sqoop using pluggable failure handlers
    * [SQOOP-1132] - Print out Sqoop version into log during execution
    * [SQOOP-1137] - Put a stress in the user guide that eval tool is meant for evaluation purpose only
    * [SQOOP-1161] - Generated Delimiter Set Field Should be Static
    * [SQOOP-1172] - Make Sqoop compatible with HBase 0.95+
    * [SQOOP-1203] - Add another default case for finding *_HOME when not explicitly defined
    * [SQOOP-1212] - Do not print usage on wrong command line
    * [SQOOP-1213] - Support reading password files from Amazon S3
    * [SQOOP-1223] - Enhance the password file capability to enable plugging-in custom loaders
    * [SQOOP-1282] - Consider avro files even if they carry no extension
    * [SQOOP-1321] - Add ability to serialize SqoopOption into JobConf
    * [SQOOP-1337] - Doc refactoring - Consolidate documentation of --direct
    * [SQOOP-1341] - Sqoop Export Upsert for MySQL lacks batch support
    * [SQOOP-1373] - Sqoop import schema is locked shows NullPointerException

** New Feature
    * [SQOOP-767] - Add support for Accumulo
    * [SQOOP-1051] - Support direct mode connection managers in a generalized fashion
    * [SQOOP-1197] - Enable Sqoop to build against Hadoop-2.1.0-beta jar files
    * [SQOOP-1287] - Add high performance Oracle connector into Sqoop

** Task
    * [SQOOP-1207] - Allow user to override java source version
    * [SQOOP-1344] - Add documentation for Oracle connector
    * [SQOOP-1408] - Document SQL Server's --non-resilient arg

** Test
    * [SQOOP-1057] - Introduce fault injection framework to test connection resiliency


Changelog - Sqoop - Version 1.4.4 - 07-18-2013

** New Feature
    * [SQOOP-931] - Integrate HCatalog with Sqoop
    * [SQOOP-999] - Support bulk load from HDFS to PostgreSQL using COPY ... FROM
    * [SQOOP-1038] - Add support for composite keys in HBase import

** Improvement
    * [SQOOP-885] - Allow excluding some tables from import-all-tables tools
    * [SQOOP-912] - Add ability to specify --hive-database parameter
    * [SQOOP-914] - Securing passwords in sqoop 1.x
    * [SQOOP-916] - Add an abort validation handler
    * [SQOOP-933] - Properly log SQLExceptions using getNextException() method for chaining exceptions
    * [SQOOP-934] - JDBC Connection can timeout after import but before hive import
    * [SQOOP-937] - Dont generate ORM files for  Direct mode connectors
    * [SQOOP-1140] - Enable overriding username, password and database in DB2 test

** Task
    * [SQOOP-1010] - Change default Hadoop profile to 2.x
    * [SQOOP-1118] - Move PostgreSQL specific MR codes to org.apache.sqoop.mapreduce.posgresql

** Sub-task
    * [SQOOP-838] - Stored procedures: MySQL
    * [SQOOP-839] - Stored procedures: Oracle
    * [SQOOP-847] - Provide direct support
    * [SQOOP-848] - Unit tests for Netezza connector
    * [SQOOP-849] - documentation for netezza connector
    * [SQOOP-949] - Allow Sqoop to build on Windows OS
    * [SQOOP-954] - Create Sqoop runtime scripts to run Sqoop on Windows
    * [SQOOP-955] - Fix Sqoop unit test failures on Windows
    * [SQOOP-962] - Document null string behavior
    * [SQOOP-970] - Explicit delimiter configuration information should be available for exports also
    * [SQOOP-1011] - Allow automatic creation of HCatalog tables
    * [SQOOP-1020] - Fix Hive Unit tests to work in the presence of Hive classes
    * [SQOOP-1050] - Add documentation for HCatalog Integration
    * [SQOOP-1127] - Some database specific types are not properly handled during exports

** Bug
    * [SQOOP-846] - Provide a connector for Netezza appliances
    * [SQOOP-856] - PGBulkLoadExportMapper has an infinite waitFor without any logging in the event of Interrupted exceptions
    * [SQOOP-859] - PostgreSQL: Test cases have hard coded username and password
    * [SQOOP-883] - Remove input directory prior Sqoop import
    * [SQOOP-891] - Sqoop export from S3 to MySQL fails when S3 is not default filesystem.
    * [SQOOP-906] - Sqoop is always calling ConnectionManager.datetimeToQueryString with TIMESTAMP column type
    * [SQOOP-907] - Print out queries executed by Sqoop on mapreduce job side
    * [SQOOP-928] - PostgresqlManager should rollback any pending changes instead of commit when closing connections
    * [SQOOP-929] - Add more Netezza direct mode tests
    * [SQOOP-932] - Netezza direct manager is ignoring --null-*-string arguments
    * [SQOOP-936] - Classwriter should check if columnNames generated are null before accessing them
    * [SQOOP-950] - Can't build package from provided binary artifacts
    * [SQOOP-959] - Use CredentialsUtil.fetchPasswordFromFile in BaseSqoopTool
    * [SQOOP-968] - Cannot build when in a directory with spaces
    * [SQOOP-976] - Incorrect SQL when incremental criteria is text column
    * [SQOOP-979] - MySQL direct connector is not working correct after moving password to credential cache
    * [SQOOP-981] - The --hadoop-home command line parameter is no longer accepted
    * [SQOOP-988] - Validation option should provide some output that validation is being done
    * [SQOOP-992] - Allow to set target java version during compilation
    * [SQOOP-1006] - Update year in the notice file to 2013
    * [SQOOP-1008] - Test TestClassWriter.testNoClassGeneration is failing on JDK7
    * [SQOOP-1027] - Incremental import is not properly escaping table name when loading maximal value
    * [SQOOP-1029] - Oracle export using procedures does not work
    * [SQOOP-1030] - Enable column types Binary and Varbinary parsing in Sqoop for export
    * [SQOOP-1031] - Provide default Java type mapping for MS Sql Datetimeoffset type
    * [SQOOP-1033] - CombineFileInputFormat does not work with paths not on default FS like ASV
    * [SQOOP-1034] - Fix SQL Azure database may return table columns in inconsistent order
    * [SQOOP-1052] - Hive import is not compatible with Avro and SequenceFile but no errors are thrown
    * [SQOOP-1053] - Fix sqoop to work with Hadoop 2.0.4 alpha
    * [SQOOP-1071] - Avro import is failing when columns are starting with underscore
    * [SQOOP-1078] - incremental import from database in direct mode
    * [SQOOP-1083] - Split HBaseImportTest into multiple independent tests
    * [SQOOP-1097] - Export using procedures feature needs fixes for working with mysql
    * [SQOOP-1124] - Direct export to PostgreSQL with PGBulkloadManager fails without explicit port number settings
    * [SQOOP-1129] - PostgreSQL direct test are failing on trunk

** Test
    * [SQOOP-1035] - Add MS Sqoop Connecter tests


Changelog - Sqoop - Version 1.4.3 - 02/20/2012

** New Feature
    * [SQOOP-390] - PostgreSQL connector for direct export with pg_bulkload
    * [SQOOP-540] - Microsoft SQL Connector doesn't support custom schemas
    * [SQOOP-601] - Support custom schemas in PostgreSQL Connector
    * [SQOOP-621] - Requesting support for upsert export with MySQL
    * [SQOOP-724] - Support Table hints in Microsoft SQL Server
    * [SQOOP-749] - Exports Using Stored Procedures (Functions)
    * [SQOOP-767] - Add support for Accumulo

** Improvement
    * [SQOOP-350] - Add support for requiring that a connector be used, otherwise the job should fail
    * [SQOOP-467] - Add support for Oracle BINARY_FLOAT and BINARY_DOUBLE data types
    * [SQOOP-579] - Simple refactoring of org.apache.sqoop.manager.DefaultManagerFactory - extract methods for reuse
    * [SQOOP-580] - Add Open-ended "teardown" routine that is called after the job execution for cleanup
    * [SQOOP-598] - Document NULL substitution string changes for HIVE import
    * [SQOOP-603] - Support small intervals in IntegerSplitter implementation
    * [SQOOP-604] - Easy throttling feature for MySQL exports
    * [SQOOP-635] - Explaining why it's important to specify weird urandom path in Troubleshooting guide
    * [SQOOP-638] - Add an optional, simple and extensible validation framework for sqoop
    * [SQOOP-650] - Add ability to name mapreduce job generated by Sqoop
    * [SQOOP-653] - Add splitter support for N(LONG)(VAR)CHAR Sql type
    * [SQOOP-720] - Improve error handling when exporting malformed text data
    * [SQOOP-726] - Put debugging information into generated SqoopRecord class
    * [SQOOP-804] - Warn if hive special arguments will be used without --hive-import
    * [SQOOP-820] - Escape table name in export job only if it's required by connector
    * [SQOOP-833] - add *.eml "ant eclipse" (IntelliJ import) generated file, to .gitignore

** Task
    * [SQOOP-535] - Support splitting metadata to connector and framework specific
    * [SQOOP-731] - Move HBase tests to manual tests as they depend on unreleased artifacts

** Sub-task
    * [SQOOP-592] - Change repository location on Sqoop website
    * [SQOOP-595] - Change repository location in source code
    * [SQOOP-683] - Documenting sqoop.mysql.export.sleep.ms - easy throttling feature for direct MySQL exports

** Bug
    * [SQOOP-382] - Connection parameters should be used on the mapper
    * [SQOOP-437] - Preparing release requires manual changes to LICENSE.txt file
    * [SQOOP-462] - Sqoop hbase Test Compilation failure.
    * [SQOOP-526] - Unable to resolve maven-scm-providers-standard
    * [SQOOP-578] - sqoop script calls com.cloudera.sqoop.Sqoop instead of org.apache.sqoop.Sqoop
    * [SQOOP-582] - Create a template method for job submission in Export/Import JobBase
    * [SQOOP-585] - Bug when sqoop a join of two tables with the same column name with mysql backend
    * [SQOOP-586] - ant checkstyle has 2 errors
    * [SQOOP-597] - PostgreSQL Manager is incorrectly escaping table names
    * [SQOOP-599] - Import to HBase is not working on secure cluster
    * [SQOOP-600] - HBase table family presence is not working correctly on new HBase versions
    * [SQOOP-607] - In-process Hive CLI driver does not work
    * [SQOOP-609] - 3rd party LobAvroImportTest failures in trunk
    * [SQOOP-615] - Error in Avro generation
    * [SQOOP-616] - HBase import/export is not working on non secure cluster where security is available
    * [SQOOP-617] - User guide is missing argument --fetch-size
    * [SQOOP-628] - Postgres direct import fails on non-lowercase column names
    * [SQOOP-636] - ExportJobTestCase.runExport method does not reuse the existing Configuration and SqoopOptions 
    * [SQOOP-652] - Improve error message generated in  DataDrivenDBInputFormat when no splitter is available
    * [SQOOP-654] - PostgreSQL direct connector is ignoring --null(-input)string and --null(-input)-non-string arguments
    * [SQOOP-657] - ant checkstyle results in errors
    * [SQOOP-687] - org.apache.sqoop.tool.ExportTool.applyOptions invokes applyOutputFormatOptions(..) twice in succession
    * [SQOOP-706] - Sqoop won't compile on Java 7 due to new methods in ResultSet interface
    * [SQOOP-721] - Duplicating rows on export when exporting from compressed files.
    * [SQOOP-725] - Enable HBase tests in sqoop 1
    * [SQOOP-730] - User Guide Update: Section 3 - Sqoop Releases
    * [SQOOP-741] - The OracleConnect getTables() implementation needs to restrict tables to current user
    * [SQOOP-796] - Unable to use new Hadoop environment variables
    * [SQOOP-808] - SQLExceptions From Batched Exports Aren't Very Helpful
    * [SQOOP-818] - Missing method setConnManager(Lcom/cloudera/sqoop/manager/ConnManager;)V in ExportJobContContext breaks MS SQL Connector
    * [SQOOP-821] - Hadoop has changed logic for job id in LocalJobRunner that breaks Lob* tests
    * [SQOOP-824] - Sqoop code generation in 'update' export mode incompatible with '--columns' option
    * [SQOOP-825] - Warning for incorrect usage of hive parameters is not checking HIVE_HOME correctly
    * [SQOOP-829] - Error Messages For --map-column-java Should Be More Useful
    * [SQOOP-830] - HBase import formatting BigDecimal inconsistently
    * [SQOOP-840] - Inconsistent java generics declaration for exportwriter classes
    * [SQOOP-846] - Provide a connector for Netezza appliances
    * [SQOOP-853] - sqoop list-tables isn't returning the tables that have custom schemas
    * [SQOOP-854] - pg_bulkload: Return value of pg_bulkload utility is being ignored
    * [SQOOP-855] - pg_bulkload: NullPointerException will be thrown if user specified invalid path the binary
    * [SQOOP-860] - NullPointerException when running procedure export against old database
    * [SQOOP-862] - Hbase import fails if there is a row where all columns are null
    * [SQOOP-870] - Allow Sqoop to import row key column into HBase
    * [SQOOP-901] - Allow user to override hardcoded boolean strings in direct PostgreSQL connector

** Test
    * [SQOOP-606] - Increase unit test timeout


Changelog - Sqoop - Version 1.4.2 - 08/07/2012

** New Feature
    * [SQOOP-439] - Released artifacts should embrace unwritten naming policy
    * [SQOOP-444] - Support incremental import for free form queries

** Improvement
    * [SQOOP-391] - Dependencies should use released versions of Apache Hadoop, HBase, and ZooKeeper
    * [SQOOP-416] - Allow code-generation arguments with Avro imports
    * [SQOOP-436] - The --verbose option should enable verbose logging for MapReduce jobs as well
    * [SQOOP-438] - allow sourcing of sqoop-env.sh to set various environment variables
    * [SQOOP-440] - Rename CHANGES.txt to CHANGELOG.txt
    * [SQOOP-442] - Ant target mvn-install is generating pom with dependencies on cloudera version of Hadoop
    * [SQOOP-443] - Calling sqoop with hive import is not working multiple times due to  kept output directory
    * [SQOOP-447] - Use release version of Apache Hadoop 0.23.1 in build
    * [SQOOP-459] - Remove redundant steps in compatibility tests: verifyReadback() method
    * [SQOOP-461] - Sqoop User Guide's troubleshooting section should include Oracle Connection Errors
    * [SQOOP-463] - Sqoop User Guide's troubleshooting section should explain how to override the column mapping when importing a table from MySQL into Hive
    * [SQOOP-464] - Warn when user is importing data into /user/hive/warehouse with flag --hive-import
    * [SQOOP-465] - BLOB support for Avro import
    * [SQOOP-483] - Allow target dir to be set to a different name than table name for hive import
    * [SQOOP-484] - Update troubleshooting guide section about MySQL and TINYINT(1) columns
    * [SQOOP-487] - InformationSchemaManager.getPrimaryKeyQuery can take a very long time for large mysql table with partitions
    * [SQOOP-510] - Improve the error message for bad connector files
    * [SQOOP-522] - Move  printing error "ERROR orm.CompilationManager: Could not rename" to DEBUG
    * [SQOOP-529] - Enforce usage of --driver and --connection-manager parameters
    * [SQOOP-538] - Hudson configuration for all hadoop versions

** Task
    * [SQOOP-516] - Sqoop 1.4.2 release preparation
    * [SQOOP-519] - Update the version of hsqldb decadency to 2.X
    * [SQOOP-574] - Create a Hadoop-2.0.0 build profile

** Sub-task
    * [SQOOP-470] - Create tests for blob support for Avro import

** Bug
    * [SQOOP-352] - Export of avro data imported from database table (using sqoop import) fails on year
    * [SQOOP-410] - Direct modes can't import views
    * [SQOOP-425] - Sqoop invokes ResultSet.isLast() which causes Sybase JDBC driver to hang
    * [SQOOP-445] - Wrong query for getListColumnsQuery in PostgresqlManager
    * [SQOOP-448] - boolean fields get nullified during postgres direct import into hive.
    * [SQOOP-450] - Direct MySQL import can fail when using mysqldump version 5.1.14 or above.
    * [SQOOP-452] - Mysql free form queries fail if alias is not used.
    * [SQOOP-453] - Oozie does not work with Sqoop metastore
    * [SQOOP-454] - Upgrade dependency on HBase version 0.92.0-SNAPSHOT as it was already released
    * [SQOOP-460] - Verbose logging does not turn the level for correct logger
    * [SQOOP-468] - Oracle free form queries fail.
    * [SQOOP-473] - Sqoop import-all-tables fails with MySQL connector
    * [SQOOP-474] - Split-by specification incorrectly triggers bounding value query
    * [SQOOP-476] - If table name is a qualified name, Sqoop import fails in DB2
    * [SQOOP-480] - MS SQL server connector and OraOop connector are incompatible with Sqoop-1.4
    * [SQOOP-481] - Sqoop import with --hive-import using wrong column names in --columns throws a NPE
    * [SQOOP-482] - import tool for mysql direct mode reports wrong record number
    * [SQOOP-488] - Parameter for extended verbose is not working due to migrated code to different module
    * [SQOOP-489] - Cannot define partition keys for Hive tables created through Sqoop
    * [SQOOP-490] - Style error in the trunk
    * [SQOOP-503] - --columns argument support for export
    * [SQOOP-505] - Trailing space after jar in managers.d/connectors causes file not found
    * [SQOOP-508] - Sqoop metastore cannot be started due to missing hsqldb jar file
    * [SQOOP-521] - Import fails on tables with names containing hyphens ( - )
    * [SQOOP-524] - hsqldb jar update regression
    * [SQOOP-528] - Remove references to incubator from sources
    * [SQOOP-536] - Blob import doesn't work with avro 1.7.1
    * [SQOOP-539] - getPrimaryKeyQuery is very slow in mysql 5.0.77
    * [SQOOP-571] - Revert SQOOP-519 and SQOOP-524


Changelog - Sqoop - Version 1.4.1-incubating - 02/16/2012

** New Feature
    * [SQOOP-337] - Create Sqoop Logo / Icon
    * [SQOOP-362] - Allow user to override mapping when doing import to AVRO format

** Improvement
    * [SQOOP-397] - Make Sqoop work with Hadoop 0.23
    * [SQOOP-411] - Precompile Pattern for replacement of Hive delimiters
    * [SQOOP-420] - sqoop - compatible with hadoop 1.0.0 
    * [SQOOP-432] - Enforce writing space after if statement

** Task
    * [SQOOP-396] - publish sqoop artifacts to Apache Maven repo
    * [SQOOP-400] - Merge 1.4.0 release changes back to trunk
    * [SQOOP-405] - Enable TestDataDrivenDBInputFormat for Hadoop 0.23 when appropriate
    * [SQOOP-427] - Sqoop 1.4.1 release preparation

** Sub-task
    * [SQOOP-356] - move documentation generation to the maven build
    * [SQOOP-372] - License Audit
    * [SQOOP-412] - Create our own implementation of org.apache.hadoop.conf.Configuration.getInstances
    * [SQOOP-413] - Port files org.apache.hadoop.mapreduce.lib.{db,input}.* from CDH3/Hadoop-0.21 to sqoop

** Bug
    * [SQOOP-384] - Sqoop is incompatible with Hadoop prior to 0.21
    * [SQOOP-392] - Build using maven is broklend due to missing class generated by script write-version-info.sh
    * [SQOOP-393] - Class SqoopOptions was not properly moved
    * [SQOOP-395] - Incorrect or missing SVN property settings
    * [SQOOP-409] - hive-drop-import-delims doesn't work with MySQL direct import
    * [SQOOP-414] - Column names are not guaranteed in order for getColumnNames of OracleManager
    * [SQOOP-418] - MySQLAuthTest hangs when run against MySQL 5.5.3 or higher version
    * [SQOOP-421] - User guide should state that when using --direct, hbase params get ignored
    * [SQOOP-422] - Throw an exception when --direct and hbase* options are used together
    * [SQOOP-424] - Codegen compilation fails with Hadoop 0.23 
    * [SQOOP-426] - Build command ant mvn-install generates Sqoop pom with incorrect group Id.
    * [SQOOP-428] - AvroOutputFormat doesn't support compression even though documentation claims it does
    * [SQOOP-430] - Duplicate Column problem with reserved words
    * [SQOOP-433] - Tests are failing on current 0.23 version
    * [SQOOP-446] - sqoop column terminator "fields-terminated-by" needs to work with any of the following '\007', '0x7', '^G'
    * [SQOOP-478] - Sqoop export tool unexpectedly re-order Oracle table columns 
    * [SQOOP-622] - possible import bug with embedded LF (0x0A) in VARCHAR field


Changelog - Sqoop - Version 1.4.0-incubating - 11/29/2011

** New Feature
    * [SQOOP-305] - Support export from Avro Data Files
    * [SQOOP-313] - Multiple column names to be included in --update-key argument with SQOOP export (update)
    * [SQOOP-327] - Mixed update/insert export support for OracleManager
    * [SQOOP-331] - Support boundary query on the command line
    * [SQOOP-342] - Allow user to override sqoop type mapping
    * [SQOOP-367] - codegen support free-form query

** Improvement
    * [SQOOP-303] - Use Catalog Tables for PostgresqlManager
    * [SQOOP-315] - Update Avro version to 1.5.2
    * [SQOOP-316] - Sqoop user guide should have a troubleshooting section.
    * [SQOOP-318] - Add support for splittable lzo files with Hive
    * [SQOOP-320] - Use Information Schema for SQLServerManager
    * [SQOOP-321] - Support date/time columns for "--incremental append" option
    * [SQOOP-326] - Updgrade Avro dependency to version 1.5.3
    * [SQOOP-351] - Sqoop User Guide's troubleshooting section should include Case-Sensitive Catalog Query Errors
    * [SQOOP-353] - Cleanup the if/else statement in HiveTypes
    * [SQOOP-354] - SQOOP needs to be made compatible with Hadoop  .23 release
    * [SQOOP-355] - improve SQOOP documentation of Avro data file support
    * [SQOOP-357] - To make debugging easier, Sqoop should print out all the exceptions 
    * [SQOOP-361] - [Docs] $CONDITIONS must be escaped to not allow shells to replace it.
    * [SQOOP-366] - Sqoop User Guide's troubleshooting section should include MySQL setup instructions

** Task
    * [SQOOP-302] - Use Information Schema for MySQLManager
    * [SQOOP-309] - Update Sqoop dependency versions
    * [SQOOP-310] - Review license headers
    * [SQOOP-369] - Sqoop 1.4.0 release preparation

** Sub-task
    * [SQOOP-370] - Version number for upcoming release.
    * [SQOOP-371] - Migrate util package to new name space
    * [SQOOP-374] - Migrate tool and orm packages to new name space
    * [SQOOP-375] - Migrate metastore and metastore.hsqldb packages to new name space
    * [SQOOP-376] - Migrate mapreduce package to new name space
    * [SQOOP-377] - Migrate mapreduce.db package to new name space
    * [SQOOP-378] - Migrate manager package to new name space
    * [SQOOP-379] - Migrate lib and io packages to new name space
    * [SQOOP-380] - Migrate hive and hbase packages to new name space
    * [SQOOP-381] - Migrate cli and config packages to new name space
    * [SQOOP-383] - Version tool is not working.
    * [SQOOP-386] - Namespace migration cleanup
    * [SQOOP-388] - Add license header to Hive testdata
    * [SQOOP-389] - Include change log

** Bug
    * [SQOOP-308] - Generated Avro Schema cannot handle nullable fields
    * [SQOOP-314] - Basic export hangs when target database does not support INSERT syntax with multiple rows of values
    * [SQOOP-317] - OracleManager should allow working with tables owned by other users.
    * [SQOOP-319] - The --hive-drop-import-delims option should accept a replacement string
    * [SQOOP-323] - Support for the NVARCHAR datatype
    * [SQOOP-325] - Sqoop doesn't build on intellij
    * [SQOOP-329] - SQOOP doesn't work with the DB2 JCC driver
    * [SQOOP-330] - Free form query import with column transformation failed without obvious error message
    * [SQOOP-332] - Cannot use --as-avrodatafile with --query
    * [SQOOP-336] - Avro import does not support varbinary types
    * [SQOOP-338] - NPE after specifying incorrect JDBC credentials
    * [SQOOP-339] - Use of non-portable mknod utility causes build problems on Mac OS X
    * [SQOOP-340] - Rise exception when both --direct and --as--sequencefile or --as-avrodatafile are given
    * [SQOOP-341] - Sqoop doesn't handle unsigned ints at least with MySQL
    * [SQOOP-346] - Sqoop needs to be using java version 1.6 for its source
    * [SQOOP-349] - A bunch of the fields are wrong in pom.xml 
    * [SQOOP-358] - Sqoop import fails on netezza nvarchar datatype with --as-avrodatafile
    * [SQOOP-359] - Import fails with Unknown SQL datatype exception
    * [SQOOP-364] - Default getCurTimestampQuery() in SqlManager is not working for PostgreSQL
    * [SQOOP-368] - Resolve ERROR tool.ImportTool: Imported Failed: Duplicate Column identifier specified: 'COLUMN-NAME'
    * [SQOOP-373] - Can only write to default file system on direct import
    * [SQOOP-385] - Typo in PostgresqlTest.java regarding configuring postgresql.conf.
    * [SQOOP-398] - Sqoop to avro saves NUMERIC as strings

