Skip to content

Commit

Permalink
Strings and integers
Browse files Browse the repository at this point in the history
  • Loading branch information
krlmlr committed Jan 7, 2024
1 parent cbef08d commit 4555cf4
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/rfuns_extension.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,32 @@ static void BaseREqFunctionString(DataChunk &args, ExpressionState &state, Vecto
[&](string_t left, string_t right) { return (left == right); });
}

static bool ExecuteBaseREqFunctionStringInteger(string_t left, int32_t right) {
char right_chr[100];
snprintf(right_chr, sizeof(right_chr), "%d", right);
return (left == right_chr);
}

static void BaseREqFunctionStringInteger(DataChunk &args, ExpressionState &state, Vector &result) {
auto &lefts = args.data[0];
D_ASSERT(lefts.GetType() == LogicalType::VARCHAR);
auto &rights = args.data[1];
D_ASSERT(rights.GetType() == LogicalType::INTEGER);

return BinaryExecutor::Execute<string_t, int32_t, bool>(lefts, rights, result, args.size(),
&ExecuteBaseREqFunctionStringInteger);
}

static void BaseREqFunctionIntegerString(DataChunk &args, ExpressionState &state, Vector &result) {
auto &lefts = args.data[0];
D_ASSERT(lefts.GetType() == LogicalType::INTEGER);
auto &rights = args.data[1];
D_ASSERT(rights.GetType() == LogicalType::VARCHAR);

return BinaryExecutor::Execute<string_t, int32_t, bool>(rights, lefts, result, args.size(),
&ExecuteBaseREqFunctionStringInteger);
}

static bool ExecuteBaseREqFunctionStringDouble(string_t left, double right) {
char right_chr[100];
snprintf(right_chr, sizeof(right_chr), "%.17g", right);
Expand Down Expand Up @@ -127,6 +153,10 @@ static void LoadInternal(DatabaseInstance &instance) {
ScalarFunction({LogicalType::DOUBLE, LogicalType::DOUBLE}, LogicalType::BOOLEAN, BaseREqFunctionDouble));
base_r_eq.AddFunction(
ScalarFunction({LogicalType::VARCHAR, LogicalType::VARCHAR}, LogicalType::BOOLEAN, BaseREqFunctionString));
base_r_eq.AddFunction(
ScalarFunction({LogicalType::VARCHAR, LogicalType::INTEGER}, LogicalType::BOOLEAN, BaseREqFunctionStringInteger));
base_r_eq.AddFunction(
ScalarFunction({LogicalType::INTEGER, LogicalType::VARCHAR}, LogicalType::BOOLEAN, BaseREqFunctionIntegerString));
base_r_eq.AddFunction(
ScalarFunction({LogicalType::VARCHAR, LogicalType::DOUBLE}, LogicalType::BOOLEAN, BaseREqFunctionStringDouble));
base_r_eq.AddFunction(
Expand Down
24 changes: 24 additions & 0 deletions test/sql/rfuns.test
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,27 @@ SELECT
FALSE
TRUE
NULL

# Equality for ints with doubles
query III
SELECT
"r_base::=="('2', 1),
"r_base::=="('1', 1),
NULL
;
----
FALSE
TRUE
NULL

# Equality for doubles with ints
query III
SELECT
"r_base::=="(1, '2'),
"r_base::=="(1, '1'),
NULL
;
----
FALSE
TRUE
NULL

0 comments on commit 4555cf4

Please sign in to comment.