def test_string_cast_to_timestamp(self): casted = self.alltypes.g.cast('timestamp') assert isinstance(casted, ir.TimestampArray) string = api.literal('2000-01-01') casted = string.cast('timestamp') assert isinstance(casted, ir.TimestampScalar)
def test_string_cast_to_timestamp(alltypes): casted = alltypes.g.cast('timestamp') assert isinstance(casted, ir.TimestampColumn) string = api.literal('2000-01-01') casted = string.cast('timestamp') assert isinstance(casted, ir.TimestampScalar)
def test_cast_scalar_to_decimal(self): val = api.literal('1.2345') casted = val.cast('decimal(15,5)') assert isinstance(casted, ir.DecimalScalar) assert casted._precision == 15 assert casted._scale == 5
def test_literal_list(): what = [1, 2, 1000] expr = api.literal(what) assert isinstance(expr, ir.ArrayScalar) # it works! repr(expr)
def test_list_and_tuple_literals(): what = [1, 2, 1000] expr = api.literal(what) assert isinstance(expr, ir.ArrayScalar) # it works! repr(expr) what = (1, 2, 1000) expr = api.literal(what) assert isinstance(expr, ir.ArrayScalar) # it works! repr(expr) # test using explicit type point = ibis.literal((1, 2, 1000), type='point') assert point.type() == dt.point point = ibis.literal([1, 2, 1000], type='point') assert point.type() == dt.point
def test_sign(self): result = self.alltypes.double_col.sign() assert isinstance(result, ir.Int32Array) assert type(result.op()) == ops.Sign result = api.literal(1.2345).sign() assert isinstance(result, ir.Int32Scalar) dec_col = self.lineitem.l_extendedprice result = dec_col.sign() assert isinstance(result, ir.Int32Array)
def test_sign(self): result = self.alltypes.double_col.sign() assert isinstance(result, ir.FloatArray) assert type(result.op()) == ops.Sign result = api.literal(1.2345).sign() assert isinstance(result, ir.FloatScalar) dec_col = self.lineitem.l_extendedprice result = dec_col.sign() assert isinstance(result, ir.FloatArray)
def test_ceil_floor(self): cresult = self.alltypes.double_col.ceil() fresult = self.alltypes.double_col.floor() assert isinstance(cresult, ir.Int32Array) assert isinstance(fresult, ir.Int32Array) assert type(cresult.op()) == ops.Ceil assert type(fresult.op()) == ops.Floor cresult = api.literal(1.2345).ceil() fresult = api.literal(1.2345).floor() assert isinstance(cresult, ir.Int32Scalar) assert isinstance(fresult, ir.Int32Scalar) dec_col = self.lineitem.l_extendedprice cresult = dec_col.ceil() fresult = dec_col.floor() assert isinstance(cresult, ir.DecimalArray) assert cresult.meta == dec_col.meta assert isinstance(fresult, ir.DecimalArray) assert fresult.meta == dec_col.meta
def test_ceil_floor(self): cresult = self.alltypes.double_col.ceil() fresult = self.alltypes.double_col.floor() assert isinstance(cresult, ir.Int64Array) assert isinstance(fresult, ir.Int64Array) assert type(cresult.op()) == ops.Ceil assert type(fresult.op()) == ops.Floor cresult = api.literal(1.2345).ceil() fresult = api.literal(1.2345).floor() assert isinstance(cresult, ir.Int64Scalar) assert isinstance(fresult, ir.Int64Scalar) dec_col = self.lineitem.l_extendedprice cresult = dec_col.ceil() fresult = dec_col.floor() assert isinstance(cresult, ir.DecimalArray) assert cresult.meta == dec_col.meta assert isinstance(fresult, ir.DecimalArray) assert fresult.meta == dec_col.meta
def test_round(self): result = self.alltypes.double_col.round() assert isinstance(result, ir.Int64Array) assert result.op().args[1] is None result = self.alltypes.double_col.round(2) assert isinstance(result, ir.DoubleArray) assert result.op().args[1] == 2 # Even integers are double (at least in Impala, check with other DB # implementations) result = self.alltypes.int_col.round(2) assert isinstance(result, ir.DoubleArray) dec = self.lineitem.l_extendedprice result = dec.round() assert isinstance(result, ir.DecimalArray) result = dec.round(2) assert isinstance(result, ir.DecimalArray) result = api.literal(1.2345).round() assert isinstance(result, ir.Int64Scalar)
def test_literal_array(): what = [] expr = api.literal(what) assert isinstance(expr, ir.ArrayValue) assert expr.type().equals(dt.Array(dt.null))
def test_builtins_1(self): table = self.alltypes i1 = table.tinyint_col i4 = table.int_col i8 = table.bigint_col d = table.double_col s = table.string_col exprs = [ api.now(), api.e, # hash functions i4.hash(), d.hash(), s.hash(), # modulus cases i1 % 5, i4 % 10, 20 % i1, d % 5, i1.zeroifnull(), i4.zeroifnull(), i8.zeroifnull(), i4.to_timestamp('s'), i4.to_timestamp('ms'), i4.to_timestamp('us'), i8.to_timestamp(), d.abs(), d.cast('decimal(12, 2)'), d.cast('int32'), d.ceil(), d.exp(), d.isnull(), d.fillna(0), d.floor(), d.log(), d.ln(), d.log2(), d.log10(), d.notnull(), d.zeroifnull(), d.nullifzero(), d.round(), d.round(2), d.round(i1), i1.sign(), i4.sign(), d.sign(), # conv i1.convert_base(10, 2), i4.convert_base(10, 2), i8.convert_base(10, 2), s.convert_base(10, 2), d.sqrt(), d.zeroifnull(), # nullif cases 5 / i1.nullif(0), 5 / i1.nullif(i4), 5 / i4.nullif(0), 5 / d.nullif(0), api.literal(5).isin([i1, i4, d]), # tier and histogram d.bucket([0, 10, 25, 50, 100]), d.bucket([0, 10, 25, 50], include_over=True), d.bucket([0, 10, 25, 50], include_over=True, close_extreme=False), d.bucket([10, 25, 50, 100], include_under=True), d.histogram(10), d.histogram(5, base=10), d.histogram(base=10, binwidth=5), # coalesce-like cases api.coalesce(table.int_col, api.null(), table.smallint_col, table.bigint_col, 5), api.greatest(table.float_col, table.double_col, 5), api.least(table.string_col, 'foo'), # string stuff s.contains('6'), s.like('6%'), s.re_search('[\d]+'), s.re_extract('[\d]+', 0), s.re_replace('[\d]+', 'a'), s.repeat(2), s.translate("a", "b"), s.find("a"), s.lpad(10, 'a'), s.rpad(10, 'a'), s.find_in_set(["a"]), s.lower(), s.upper(), s.reverse(), s.ascii_str(), s.length(), s.strip(), s.lstrip(), s.strip(), # strings with int expr inputs s.left(i1), s.right(i1), s.substr(i1, i1 + 2), s.repeat(i1) ] proj_exprs = [expr.name('e%d' % i) for i, expr in enumerate(exprs)] projection = table[proj_exprs] projection.limit(10).execute() self._check_impala_output_types_match(projection)
def test_builtins(con, alltypes): table = alltypes i1 = table.tinyint_col i4 = table.int_col i8 = table.bigint_col d = table.double_col s = table.string_col exprs = [ api.now(), api.e, # hash functions i4.hash(), d.hash(), s.hash(), # modulus cases i1 % 5, i4 % 10, 20 % i1, d % 5, i1.zeroifnull(), i4.zeroifnull(), i8.zeroifnull(), i4.to_timestamp('s'), i4.to_timestamp('ms'), i4.to_timestamp('us'), i8.to_timestamp(), d.abs(), d.cast('decimal(12, 2)'), d.cast('int32'), d.ceil(), d.exp(), d.isnull(), d.fillna(0), d.floor(), d.log(), d.ln(), d.log2(), d.log10(), d.notnull(), d.zeroifnull(), d.nullifzero(), d.round(), d.round(2), d.round(i1), i1.sign(), i4.sign(), d.sign(), # conv i1.convert_base(10, 2), i4.convert_base(10, 2), i8.convert_base(10, 2), s.convert_base(10, 2), d.sqrt(), d.zeroifnull(), # nullif cases 5 / i1.nullif(0), 5 / i1.nullif(i4), 5 / i4.nullif(0), 5 / d.nullif(0), api.literal(5).isin([i1, i4, d]), # tier and histogram d.bucket([0, 10, 25, 50, 100]), d.bucket([0, 10, 25, 50], include_over=True), d.bucket([0, 10, 25, 50], include_over=True, close_extreme=False), d.bucket([10, 25, 50, 100], include_under=True), d.histogram(10), d.histogram(5, base=10), d.histogram(base=10, binwidth=5), # coalesce-like cases api.coalesce( table.int_col, api.null(), table.smallint_col, table.bigint_col, 5 ), api.greatest(table.float_col, table.double_col, 5), api.least(table.string_col, 'foo'), # string stuff s.contains('6'), s.like('6%'), s.re_search(r'[\d]+'), s.re_extract(r'[\d]+', 0), s.re_replace(r'[\d]+', 'a'), s.repeat(2), s.translate("a", "b"), s.find("a"), s.lpad(10, 'a'), s.rpad(10, 'a'), s.find_in_set(["a"]), s.lower(), s.upper(), s.reverse(), s.ascii_str(), s.length(), s.strip(), s.lstrip(), s.strip(), # strings with int expr inputs s.left(i1), s.right(i1), s.substr(i1, i1 + 2), s.repeat(i1), ] proj_exprs = [expr.name('e%d' % i) for i, expr in enumerate(exprs)] projection = table[proj_exprs] projection.limit(10).execute() _check_impala_output_types_match(con, projection)
def test_cast_scalar_to_decimal(): val = api.literal('1.2345') casted = val.cast('decimal(15,5)') assert isinstance(casted, ir.DecimalScalar) assert casted.type() == dt.Decimal(15, 5)