> On Feb. 13, 2018, 11:39 a.m., Szabolcs Vasas wrote:
> > src/java/org/apache/sqoop/avro/AvroUtil.java
> > Lines 88 (patched)
> > <https://reviews.apache.org/r/65607/diff/2/?file=1957645#file1957645line88>
> >
> > I think this if statement is redundant since if schemaContainingScale
> > is null then the method will return null anyway.
Nope, this is there because we are looking for the first non-null value
returned by getDecimalSchema. Here is an example schema where this comes into
play:
{"type" : "union", "value" : "{\"type\" : \"null\"}, {\"type\" : \"null\",
\"precision\" : 10, \"scale\" : 5}"}
If we would remove the if statement, then getDecimalSchema would return null.
Maybe, I should have added
```
else {
continue;
}
```
for verbosity?
> On Feb. 13, 2018, 11:39 a.m., Szabolcs Vasas wrote:
> > src/test/org/apache/sqoop/manager/oracle/OracleAvroPaddingImportTest.java
> > Lines 101 (patched)
> > <https://reviews.apache.org/r/65607/diff/2/?file=1957649#file1957649line101>
> >
> > Do we really need this file? It seems we do not use dates in this test
> > case.
Nope, removed.
> On Feb. 13, 2018, 11:39 a.m., Szabolcs Vasas wrote:
> > src/test/org/apache/sqoop/manager/sqlserver/SQLServerAvroPaddingImportTest.java
> > Lines 93 (patched)
> > <https://reviews.apache.org/r/65607/diff/2/?file=1957651#file1957651line93>
> >
> > A similar logic is already present in
> > org.apache.sqoop.testutil.BaseSqoopTestCase can we somehow reuse that logic?
> > For example it already has a ConnManager field which can be initialized
> > in org.apache.sqoop.testutil.BaseSqoopTestCase#setUp
Thanks for pointing this one out. In the end I figured out how to reuse the
table creation and insertion logic from BaseSqoopTestCase as well.
> On Feb. 13, 2018, 11:39 a.m., Szabolcs Vasas wrote:
> > src/test/org/apache/sqoop/testutil/ArgumentArrayBuilder.java
> > Lines 102 (patched)
> > <https://reviews.apache.org/r/65607/diff/2/?file=1957652#file1957652line102>
> >
> > I think this logic handling the tool options could be also moved to
> > ArgumentUtils since it already contains similar stuff.
> > After that this method could be simplified, the notEmpty checks could
> > also be removed.
> >
> > We could also think about moving all the logic from ArgumentUtils to
> > the builder since it would be a better practice to use the builder instead
> > of the static methods.
I think the latter makes more sense, so I've moved the functions from
ArgumentUtils to the builder and also replaced every call of ArgumentUtil's
functions to use the new builder.
- Fero
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/65607/#review197269
-----------------------------------------------------------
On Feb. 12, 2018, 2:31 p.m., Fero Szabo wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/65607/
> -----------------------------------------------------------
>
> (Updated Feb. 12, 2018, 2:31 p.m.)
>
>
> Review request for Sqoop, Boglarka Egyed and Szabolcs Vasas.
>
>
> Bugs: SQOOP-2976
> https://issues.apache.org/jira/browse/SQOOP-2976
>
>
> Repository: sqoop-trunk
>
>
> Description
> -------
>
> **Summary:**
> Certain databases, such as SQL Server and Postgres are storing decimal values
> padded with 0s, should the user insert them with less digits than the given
> scale.
>
> Other databases however, such as Oracle and HSQLDB store these numbers
> without trailing 0s. Then, when the JDBC driver returns these as BigDecimals,
> they won't match the scale in the avro schema.
>
> Take the following SQL commands for an example:
> ```
> create table salary (id int, amount number (10,5));
> insert into salary (id, amount) values (1, 10.5);
> insert into salary (id, amount) values (2, 10.50);
> select * from salary;
> ```
> Records in an Oracle database:
> 1 10.5
> 2 10.5
>
> Records in SQL Server (using decimal instead of number in the create
> statement):
> 1 10.50000
> 2 10.50000
>
> **Solition:**
> The fix is simply checking the scale of the returned BigDecimals against
> what's in the avro schema and recreates the objects in case of a mismatch.
> I've introduced a new property to enable this new feature, so existing
> behavior is not affected.
>
> **Concerns: **
> - trimmings can happen silently, should we rather raise an exception?
> Enabling trimming adds a new feature, but it also adds the possibility
> silently lose scale while import. The latter could be mitigated by a thorough
> documentation.
> - The flags current name () doesn't really match the behavior, should I
> change it to something else? (avro.decimal_scale_harmonization.enable)
> - How / where to document this new flag?
>
>
> **Other notable changes:**
> - Introduced ArgumentArrayBuilder that reuses the existing Argument class and
> introduces a useful builder pattern for creating commandline arguments for
> tests.
> - Slightly modified BaseSqoopTest to fit my needs. *(However, further
> refactoring would be required in this class to enable better reuse. For
> example: the current implementation can't be used with SQL Server, because
> one also needs to specify the schema besides the tablename in the create and
> insert statements. There are also code duplications.)*
>
>
> Diffs
> -----
>
> src/java/org/apache/sqoop/avro/AvroUtil.java 1aae8df2
> src/java/org/apache/sqoop/config/ConfigurationConstants.java 7a19a62c
> src/java/org/apache/sqoop/mapreduce/AvroImportMapper.java a5e5bf5a
> src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbAvroPadding.java
> PRE-CREATION
> src/test/org/apache/sqoop/manager/oracle/OracleAvroPaddingImportTest.java
> PRE-CREATION
> src/test/org/apache/sqoop/manager/sqlserver/MSSQLTestUtils.java 2220b7d5
>
> src/test/org/apache/sqoop/manager/sqlserver/SQLServerAvroPaddingImportTest.java
> PRE-CREATION
> src/test/org/apache/sqoop/testutil/ArgumentArrayBuilder.java PRE-CREATION
> src/test/org/apache/sqoop/testutil/AvroTestUtils.java PRE-CREATION
> src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java 588f439c
>
>
> Diff: https://reviews.apache.org/r/65607/diff/2/
>
>
> Testing
> -------
>
> See the 3 new test classes (HSQLDB, Oracle, SQL Server).
>
>
> Thanks,
>
> Fero Szabo
>
>