Changeset: 5fd6413b6476 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5fd6413b6476
Modified Files:
sql/server/rel_optimizer.c
sql/test/SQLancer/Tests/sqlancer19.SQL.py
Branch: Jul2021
Log Message:
Update atom's scale after reducing it
diffs (83 lines):
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -8272,10 +8272,11 @@ exp_merge_range(visitor *v, sql_rel *rel
static int
reduce_scale(atom *a)
{
+ int i = 0;
+
#ifdef HAVE_HGE
if (a->data.vtype == TYPE_hge) {
hge v = a->data.val.hval;
- int i = 0;
if (v != 0)
while( (v/10)*10 == v ) {
@@ -8283,12 +8284,10 @@ reduce_scale(atom *a)
v /= 10;
}
a->data.val.hval = v;
- return i;
- }
+ } else
#endif
if (a->data.vtype == TYPE_lng) {
lng v = a->data.val.lval;
- int i = 0;
if (v != 0)
while( (v/10)*10 == v ) {
@@ -8296,11 +8295,8 @@ reduce_scale(atom *a)
v /= 10;
}
a->data.val.lval = v;
- return i;
- }
- if (a->data.vtype == TYPE_int) {
+ } else if (a->data.vtype == TYPE_int) {
int v = a->data.val.ival;
- int i = 0;
if (v != 0)
while( (v/10)*10 == v ) {
@@ -8308,11 +8304,8 @@ reduce_scale(atom *a)
v /= 10;
}
a->data.val.ival = v;
- return i;
- }
- if (a->data.vtype == TYPE_sht) {
+ } else if (a->data.vtype == TYPE_sht) {
sht v = a->data.val.shval;
- int i = 0;
if (v != 0)
while( (v/10)*10 == v ) {
@@ -8320,9 +8313,9 @@ reduce_scale(atom *a)
v /= 10;
}
a->data.val.shval = v;
- return i;
- }
- return 0;
+ }
+ a->tpe.scale -= i;
+ return i;
}
static sql_rel *
diff --git a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
--- a/sql/test/SQLancer/Tests/sqlancer19.SQL.py
+++ b/sql/test/SQLancer/Tests/sqlancer19.SQL.py
@@ -88,6 +88,10 @@ with SQLTestCase() as cli:
.assertSucceeded().assertDataResultMatch([(Decimal('3.571'),)])
cli.execute("SELECT 3 / 0.84 FROM rt3 where rt3.c0 = 1;") \
.assertSucceeded().assertDataResultMatch([(Decimal('3.571'),)])
+ cli.execute("SELECT CAST(2 AS DECIMAL) * 0.010 FROM t3 where t3.c0 = 1;") \
+ .assertSucceeded().assertDataResultMatch([(Decimal('0.02000'),)])
+ cli.execute("SELECT CAST(2 AS DECIMAL) * 0.010 FROM rt3 where rt3.c0 =
1;") \
+ .assertSucceeded().assertDataResultMatch([(Decimal('0.02000'),)])
cli.execute("SELECT t3.c0 FROM t3 INNER JOIN t3 myx ON t3.c0 = myx.c0
ORDER BY t3.c0;") \
.assertSucceeded().assertDataResultMatch([(1,),(2,),(2,),(2,),(2,),(5,),(5,),(5,),(5,),(7,)])
cli.execute("SELECT rt3.c0 FROM rt3 INNER JOIN rt3 myx ON rt3.c0 = myx.c0
ORDER BY rt3.c0;") \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list