mirror of
https://github.com/dbt-labs/dbt-core
synced 2025-12-19 06:31:27 +00:00
Compare commits
8 Commits
enable-pos
...
update-aga
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
260babbaf3 | ||
|
|
5e3e0f6b78 | ||
|
|
c24932235e | ||
|
|
628024a2fd | ||
|
|
6890757b68 | ||
|
|
d8581d7130 | ||
|
|
01192021ed | ||
|
|
d1d0d4ff86 |
6
.changes/unreleased/Fixes-20230803-093502.yaml
Normal file
6
.changes/unreleased/Fixes-20230803-093502.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
kind: Fixes
|
||||
body: update agage.Number to handle ints
|
||||
time: 2023-08-03T09:35:02.163968-05:00
|
||||
custom:
|
||||
Author: dave-connors-3
|
||||
Issue: "8153"
|
||||
@@ -12,6 +12,17 @@ from dbt.exceptions import DbtRuntimeError
|
||||
BOM = BOM_UTF8.decode("utf-8") # '\ufeff'
|
||||
|
||||
|
||||
class Integer(agate.data_types.DataType):
|
||||
def cast(self, d):
|
||||
if type(d) == int:
|
||||
return d
|
||||
else:
|
||||
raise agate.exceptions.CastError('Can not parse value "%s" as Integer.' % d)
|
||||
|
||||
def jsonify(self, d):
|
||||
return d
|
||||
|
||||
|
||||
class Number(agate.data_types.Number):
|
||||
# undo the change in https://github.com/wireservice/agate/pull/733
|
||||
# i.e. do not cast True and False to numeric 1 and 0
|
||||
@@ -47,6 +58,7 @@ def build_type_tester(
|
||||
) -> agate.TypeTester:
|
||||
|
||||
types = [
|
||||
Integer(null_values=("null", "")),
|
||||
Number(null_values=("null", "")),
|
||||
agate.data_types.Date(null_values=("null", ""), date_format="%Y-%m-%d"),
|
||||
agate.data_types.DateTime(null_values=("null", ""), datetime_format="%Y-%m-%d %H:%M:%S"),
|
||||
|
||||
@@ -2,6 +2,14 @@ models__sample_model = """
|
||||
select * from {{ ref('sample_seed') }}
|
||||
"""
|
||||
|
||||
models__sample_number_model = """
|
||||
select
|
||||
cast(1.0 as int) as float_to_int_field,
|
||||
3.0 as float_field,
|
||||
4.3 as float_with_dec_field,
|
||||
5 as int_field
|
||||
"""
|
||||
|
||||
models__second_model = """
|
||||
select
|
||||
sample_num as col_one,
|
||||
|
||||
@@ -6,6 +6,7 @@ from tests.functional.show.fixtures import (
|
||||
models__second_ephemeral_model,
|
||||
seeds__sample_seed,
|
||||
models__sample_model,
|
||||
models__sample_number_model,
|
||||
models__second_model,
|
||||
models__ephemeral_model,
|
||||
schema_yml,
|
||||
@@ -19,6 +20,7 @@ class BaseTestShow:
|
||||
def models(self):
|
||||
return {
|
||||
"sample_model.sql": models__sample_model,
|
||||
"sample_number_model.sql": models__sample_number_model,
|
||||
"second_model.sql": models__second_model,
|
||||
"ephemeral_model.sql": models__ephemeral_model,
|
||||
"sql_header.sql": models__sql_header,
|
||||
|
||||
@@ -121,37 +121,37 @@ class TestAgateHelper(unittest.TestCase):
|
||||
self.assertEqual(tbl[0][0], expected)
|
||||
|
||||
def test_merge_allnull(self):
|
||||
t1 = agate.Table([(1, "a", None), (2, "b", None)], ("a", "b", "c"))
|
||||
t2 = agate.Table([(3, "c", None), (4, "d", None)], ("a", "b", "c"))
|
||||
t1 = agate_helper.table_from_rows([(1, "a", None), (2, "b", None)], ("a", "b", "c"))
|
||||
t2 = agate_helper.table_from_rows([(3, "c", None), (4, "d", None)], ("a", "b", "c"))
|
||||
result = agate_helper.merge_tables([t1, t2])
|
||||
self.assertEqual(result.column_names, ("a", "b", "c"))
|
||||
assert isinstance(result.column_types[0], agate.data_types.Number)
|
||||
assert isinstance(result.column_types[0], agate_helper.Integer)
|
||||
assert isinstance(result.column_types[1], agate.data_types.Text)
|
||||
assert isinstance(result.column_types[2], agate.data_types.Number)
|
||||
self.assertEqual(len(result), 4)
|
||||
|
||||
def test_merge_mixed(self):
|
||||
t1 = agate.Table([(1, "a", None), (2, "b", None)], ("a", "b", "c"))
|
||||
t2 = agate.Table([(3, "c", "dog"), (4, "d", "cat")], ("a", "b", "c"))
|
||||
t3 = agate.Table([(3, "c", None), (4, "d", None)], ("a", "b", "c"))
|
||||
t1 = agate_helper.table_from_rows([(1, "a", None), (2, "b", None)], ("a", "b", "c"))
|
||||
t2 = agate_helper.table_from_rows([(3, "c", "dog"), (4, "d", "cat")], ("a", "b", "c"))
|
||||
t3 = agate_helper.table_from_rows([(3, "c", None), (4, "d", None)], ("a", "b", "c"))
|
||||
|
||||
result = agate_helper.merge_tables([t1, t2])
|
||||
self.assertEqual(result.column_names, ("a", "b", "c"))
|
||||
assert isinstance(result.column_types[0], agate.data_types.Number)
|
||||
assert isinstance(result.column_types[0], agate_helper.Integer)
|
||||
assert isinstance(result.column_types[1], agate.data_types.Text)
|
||||
assert isinstance(result.column_types[2], agate.data_types.Text)
|
||||
self.assertEqual(len(result), 4)
|
||||
|
||||
result = agate_helper.merge_tables([t2, t3])
|
||||
self.assertEqual(result.column_names, ("a", "b", "c"))
|
||||
assert isinstance(result.column_types[0], agate.data_types.Number)
|
||||
assert isinstance(result.column_types[0], agate_helper.Integer)
|
||||
assert isinstance(result.column_types[1], agate.data_types.Text)
|
||||
assert isinstance(result.column_types[2], agate.data_types.Text)
|
||||
self.assertEqual(len(result), 4)
|
||||
|
||||
result = agate_helper.merge_tables([t1, t2, t3])
|
||||
self.assertEqual(result.column_names, ("a", "b", "c"))
|
||||
assert isinstance(result.column_types[0], agate.data_types.Number)
|
||||
assert isinstance(result.column_types[0], agate_helper.Integer)
|
||||
assert isinstance(result.column_types[1], agate.data_types.Text)
|
||||
assert isinstance(result.column_types[2], agate.data_types.Text)
|
||||
self.assertEqual(len(result), 6)
|
||||
@@ -191,7 +191,7 @@ class TestAgateHelper(unittest.TestCase):
|
||||
self.assertEqual(len(tbl), len(result_set))
|
||||
|
||||
assert isinstance(tbl.column_types[0], agate.data_types.Boolean)
|
||||
assert isinstance(tbl.column_types[1], agate.data_types.Number)
|
||||
assert isinstance(tbl.column_types[1], agate_helper.Integer)
|
||||
|
||||
expected = [
|
||||
[True, Decimal(1)],
|
||||
|
||||
Reference in New Issue
Block a user