caicancai commented on code in PR #3648:
URL: https://github.com/apache/calcite/pull/3648#discussion_r1479917763
##########
testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java:
##########
@@ -6215,6 +6215,71 @@ void checkRegexpExtract(SqlOperatorFixture f0,
FunctionAlias functionAlias) {
f.checkNull("log(10, cast(null as real))");
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6224">[CALCITE-6224]
+ * Add LOG@ function (enabled in MYSQL, Spark library)</a>. */
+ @Test void testLog2Func() {
+ final SqlOperatorFixture f0 = fixture();
+ final Consumer<SqlOperatorFixture> consumer = f -> {
+ f.setFor(SqlLibraryOperators.LOG2);
+ f.checkScalarApprox("log2(2)", "DOUBLE NOT NULL",
+ isWithin(1.0, 0.000001));
+ f.checkScalarApprox("log2(4)", "DOUBLE NOT NULL",
+ isWithin(2.0, 0.000001));
+ f.checkScalarApprox("log2(65536)", "DOUBLE NOT NULL",
+ isWithin(16.0, 0.000001));
+ f.checkScalarApprox("log2(-2)", "DOUBLE NOT NULL",
+ "NaN");
+ f.checkScalarApprox("log2(2/3)", "DOUBLE NOT NULL",
+ "-Infinity");
+ f.checkScalarApprox("log2(2.2)", "DOUBLE NOT NULL",
+ "1.1375035237499351");
+ f.checkScalarApprox("log2(0.5)", "DOUBLE NOT NULL",
+ "-1.0");
+ f.checkScalarApprox("log2(3)", "DOUBLE NOT NULL",
+ isWithin(1.5849625007211563, 0.000001));
+ f.checkNull("log2(cast(null as real))");
+ };
+ f0.forEachLibrary(list(SqlLibrary.MYSQL, SqlLibrary.SPARK), consumer);
+ }
+
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6232">[CALCITE-6232]
+ * Using fractions in LOG function does not return correct results</a>. */
+ @Test void testLogFuncByConvert() {
+ final SqlOperatorFixture f0 = fixture();
+ f0.setFor(SqlLibraryOperators.LOG, VmName.EXPAND);
+ final SqlOperatorFixture f = f0.withLibrary(SqlLibrary.BIG_QUERY);
+ f.checkScalarApprox("log(2.0/3, 2)", "DOUBLE NOT NULL",
Review Comment:
Hello, thank you very much for your suggestion. Regarding negative test, I
think of the following case
- log10(-1): When the parameter in log10 is a negative number
- log10(null): When the parameters in log10 are empty
- log10(-`Infinity`): When the parameter in log10 is -`Infinity`
- log10(0): When the parameter in log10 is 0
I tested based on mysql. Only when log(0) and log10(-1), calcite cannot
match the results in mysql. In mysql, both of them return NULL. When log10(0),
calcite returns -`Infinity. `log10(-1) returns NaN

spark sql and mysql return the same results

--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]