mirror of
https://github.com/dbt-labs/dbt-core
synced 2025-12-20 03:11:30 +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'
|
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):
|
class Number(agate.data_types.Number):
|
||||||
# undo the change in https://github.com/wireservice/agate/pull/733
|
# undo the change in https://github.com/wireservice/agate/pull/733
|
||||||
# i.e. do not cast True and False to numeric 1 and 0
|
# i.e. do not cast True and False to numeric 1 and 0
|
||||||
@@ -47,6 +58,7 @@ def build_type_tester(
|
|||||||
) -> agate.TypeTester:
|
) -> agate.TypeTester:
|
||||||
|
|
||||||
types = [
|
types = [
|
||||||
|
Integer(null_values=("null", "")),
|
||||||
Number(null_values=("null", "")),
|
Number(null_values=("null", "")),
|
||||||
agate.data_types.Date(null_values=("null", ""), date_format="%Y-%m-%d"),
|
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"),
|
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') }}
|
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 = """
|
models__second_model = """
|
||||||
select
|
select
|
||||||
sample_num as col_one,
|
sample_num as col_one,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from tests.functional.show.fixtures import (
|
|||||||
models__second_ephemeral_model,
|
models__second_ephemeral_model,
|
||||||
seeds__sample_seed,
|
seeds__sample_seed,
|
||||||
models__sample_model,
|
models__sample_model,
|
||||||
|
models__sample_number_model,
|
||||||
models__second_model,
|
models__second_model,
|
||||||
models__ephemeral_model,
|
models__ephemeral_model,
|
||||||
schema_yml,
|
schema_yml,
|
||||||
@@ -19,6 +20,7 @@ class BaseTestShow:
|
|||||||
def models(self):
|
def models(self):
|
||||||
return {
|
return {
|
||||||
"sample_model.sql": models__sample_model,
|
"sample_model.sql": models__sample_model,
|
||||||
|
"sample_number_model.sql": models__sample_number_model,
|
||||||
"second_model.sql": models__second_model,
|
"second_model.sql": models__second_model,
|
||||||
"ephemeral_model.sql": models__ephemeral_model,
|
"ephemeral_model.sql": models__ephemeral_model,
|
||||||
"sql_header.sql": models__sql_header,
|
"sql_header.sql": models__sql_header,
|
||||||
|
|||||||
@@ -121,37 +121,37 @@ class TestAgateHelper(unittest.TestCase):
|
|||||||
self.assertEqual(tbl[0][0], expected)
|
self.assertEqual(tbl[0][0], expected)
|
||||||
|
|
||||||
def test_merge_allnull(self):
|
def test_merge_allnull(self):
|
||||||
t1 = agate.Table([(1, "a", None), (2, "b", None)], ("a", "b", "c"))
|
t1 = agate_helper.table_from_rows([(1, "a", None), (2, "b", None)], ("a", "b", "c"))
|
||||||
t2 = agate.Table([(3, "c", None), (4, "d", 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])
|
result = agate_helper.merge_tables([t1, t2])
|
||||||
self.assertEqual(result.column_names, ("a", "b", "c"))
|
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[1], agate.data_types.Text)
|
||||||
assert isinstance(result.column_types[2], agate.data_types.Number)
|
assert isinstance(result.column_types[2], agate.data_types.Number)
|
||||||
self.assertEqual(len(result), 4)
|
self.assertEqual(len(result), 4)
|
||||||
|
|
||||||
def test_merge_mixed(self):
|
def test_merge_mixed(self):
|
||||||
t1 = agate.Table([(1, "a", None), (2, "b", None)], ("a", "b", "c"))
|
t1 = agate_helper.table_from_rows([(1, "a", None), (2, "b", None)], ("a", "b", "c"))
|
||||||
t2 = agate.Table([(3, "c", "dog"), (4, "d", "cat")], ("a", "b", "c"))
|
t2 = agate_helper.table_from_rows([(3, "c", "dog"), (4, "d", "cat")], ("a", "b", "c"))
|
||||||
t3 = agate.Table([(3, "c", None), (4, "d", None)], ("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])
|
result = agate_helper.merge_tables([t1, t2])
|
||||||
self.assertEqual(result.column_names, ("a", "b", "c"))
|
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[1], agate.data_types.Text)
|
||||||
assert isinstance(result.column_types[2], agate.data_types.Text)
|
assert isinstance(result.column_types[2], agate.data_types.Text)
|
||||||
self.assertEqual(len(result), 4)
|
self.assertEqual(len(result), 4)
|
||||||
|
|
||||||
result = agate_helper.merge_tables([t2, t3])
|
result = agate_helper.merge_tables([t2, t3])
|
||||||
self.assertEqual(result.column_names, ("a", "b", "c"))
|
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[1], agate.data_types.Text)
|
||||||
assert isinstance(result.column_types[2], agate.data_types.Text)
|
assert isinstance(result.column_types[2], agate.data_types.Text)
|
||||||
self.assertEqual(len(result), 4)
|
self.assertEqual(len(result), 4)
|
||||||
|
|
||||||
result = agate_helper.merge_tables([t1, t2, t3])
|
result = agate_helper.merge_tables([t1, t2, t3])
|
||||||
self.assertEqual(result.column_names, ("a", "b", "c"))
|
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[1], agate.data_types.Text)
|
||||||
assert isinstance(result.column_types[2], agate.data_types.Text)
|
assert isinstance(result.column_types[2], agate.data_types.Text)
|
||||||
self.assertEqual(len(result), 6)
|
self.assertEqual(len(result), 6)
|
||||||
@@ -191,7 +191,7 @@ class TestAgateHelper(unittest.TestCase):
|
|||||||
self.assertEqual(len(tbl), len(result_set))
|
self.assertEqual(len(tbl), len(result_set))
|
||||||
|
|
||||||
assert isinstance(tbl.column_types[0], agate.data_types.Boolean)
|
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 = [
|
expected = [
|
||||||
[True, Decimal(1)],
|
[True, Decimal(1)],
|
||||||
|
|||||||
Reference in New Issue
Block a user