This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch rc/2.0.7 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 618939cf10c26ff33098e804042695da9472666d Author: Jackie Tien <[email protected]> AuthorDate: Wed Jan 28 11:31:33 2026 +0800 Remove built-in jexl function in tree mode (#17092) (cherry picked from commit b40b74b31ea506127a8d46df9bee26d1868e6228) --- dependencies.json | 333 +++++++++---------- .../BuiltinTimeSeriesGeneratingFunctionEnum.java | 1 - .../db/it/udf/IoTDBUDTFBuiltinFunctionIT.java | 235 ------------- iotdb-core/node-commons/pom.xml | 4 - .../BuiltinTimeSeriesGeneratingFunction.java | 1 - .../apache/iotdb/commons/udf/builtin/UDTFJexl.java | 365 --------------------- pom.xml | 6 - 7 files changed, 168 insertions(+), 777 deletions(-) diff --git a/dependencies.json b/dependencies.json index c2a255d7ba4..1e88db84e77 100644 --- a/dependencies.json +++ b/dependencies.json @@ -1,167 +1,170 @@ { - "dependencies": [ - "cglib:cglib", - "ch.qos.logback:logback-classic", - "ch.qos.logback:logback-core", - "ch.qos.reload4j:reload4j", - "com.digitalpetri.fsm:strict-machine", - "com.digitalpetri.netty:netty-channel-fsm", - "com.fasterxml.jackson.core:jackson-annotations", - "com.fasterxml.jackson.core:jackson-core", - "com.fasterxml.jackson.core:jackson-databind", - "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml", - "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base", - "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider", - "com.fasterxml.jackson.module:jackson-module-jaxb-annotations", - "com.github.ben-manes.caffeine:caffeine", - "com.github.luben:zstd-jni", - "com.github.stephenc.jcip:jcip-annotations", - "com.github.wendykierp:JTransforms", - "com.google.code.findbugs:jsr305", - "com.google.code.gson:gson", - "com.google.errorprone:error_prone_annotations", - "com.google.guava:failureaccess", - "com.google.guava:guava", - "com.google.guava:listenablefuture", - "com.google.j2objc:j2objc-annotations", - "com.h2database:h2-mvstore", - "com.lmax:disruptor", - "com.nimbusds:content-type", - "com.nimbusds:lang-tag", - "com.nimbusds:nimbus-jose-jwt", - "com.nimbusds:oauth2-oidc-sdk", - "com.sun.istack:istack-commons-runtime", - "com.zaxxer:HikariCP", - "commons-cli:commons-cli", - "commons-codec:commons-codec", - "commons-io:commons-io", - "commons-logging:commons-logging", - "io.airlift:airline", - "io.airlift:concurrent", - "io.airlift:log", - "io.airlift:units", - "io.dropwizard.metrics:metrics-core", - "io.jsonwebtoken:jjwt-api", - "io.micrometer:micrometer-commons", - "io.micrometer:micrometer-core", - "io.micrometer:micrometer-observation", - "com.github.moquette-io.moquette:moquette-broker", - "io.netty:netty-buffer", - "io.netty:netty-codec", - "io.netty:netty-codec-dns", - "io.netty:netty-codec-http", - "io.netty:netty-codec-http2", - "io.netty:netty-codec-mqtt", - "io.netty:netty-codec-socks", - "io.netty:netty-common", - "io.netty:netty-handler", - "io.netty:netty-handler-proxy", - "io.netty:netty-resolver", - "io.netty:netty-resolver-dns", - "io.netty:netty-resolver-dns-classes-macos", - "io.netty:netty-resolver-dns-native-macos", - "io.netty:netty-tcnative-boringssl-static", - "io.netty:netty-tcnative-classes", - "io.netty:netty-transport", - "io.netty:netty-transport-classes-epoll", - "io.netty:netty-transport-native-epoll", - "io.netty:netty-transport-native-unix-common", - "io.netty:netty-transport-classes-kqueue", - "io.netty:netty-transport-native-kqueue", - "io.projectreactor:reactor-core", - "io.projectreactor.netty:reactor-netty-core", - "io.projectreactor.netty:reactor-netty-http", - "io.swagger:swagger-annotations", - "io.swagger:swagger-core", - "io.swagger:swagger-jaxrs", - "io.swagger:swagger-models", - "jakarta.activation:jakarta.activation-api", - "jakarta.annotation:jakarta.annotation-api", - "jakarta.servlet:jakarta.servlet-api", - "jakarta.validation:jakarta.validation-api", - "jakarta.ws.rs:jakarta.ws.rs-api", - "jakarta.xml.bind:jakarta.xml.bind-api", - "net.java.dev.jna:jna", - "net.java.dev.jna:jna-platform", - "net.minidev:accessors-smart", - "net.minidev:json-smart", - "org.antlr:antlr4-runtime", - "org.apache.commons:commons-collections4", - "org.apache.commons:commons-csv", - "org.apache.commons:commons-jexl3", - "org.apache.commons:commons-lang3", - "org.apache.commons:commons-math3", - "org.apache.commons:commons-pool2", - "org.apache.httpcomponents:httpclient", - "org.apache.httpcomponents:httpcore", - "com.timecho.ratis:ratis-client", - "com.timecho.ratis:ratis-common", - "com.timecho.ratis:ratis-grpc", - "com.timecho.ratis:ratis-metrics-api", - "com.timecho.ratis:ratis-proto", - "com.timecho.ratis:ratis-server", - "com.timecho.ratis:ratis-server-api", - "org.apache.ratis:ratis-thirdparty-misc", - "org.apache.thrift:libthrift", - "org.apache.tsfile:common", - "org.apache.tsfile:tsfile", - "org.bouncycastle:bcpkix-jdk18on", - "org.bouncycastle:bcprov-jdk18on", - "org.bouncycastle:bcutil-jdk18on", - "org.checkerframework:checker-qual", - "org.eclipse.collections:eclipse-collections", - "org.eclipse.collections:eclipse-collections-api", - "org.eclipse.jetty:jetty-http", - "org.eclipse.jetty:jetty-io", - "org.eclipse.jetty:jetty-security", - "org.eclipse.jetty:jetty-server", - "org.eclipse.jetty:jetty-servlet", - "org.eclipse.jetty:jetty-util", - "org.eclipse.jetty:jetty-util-ajax", - "org.eclipse.milo:bsd-core", - "org.eclipse.milo:bsd-generator", - "org.eclipse.milo:sdk-client", - "org.eclipse.milo:sdk-core", - "org.eclipse.milo:sdk-server", - "org.eclipse.milo:stack-client", - "org.eclipse.milo:stack-core", - "org.eclipse.milo:stack-server", - "org.fusesource.hawtbuf:hawtbuf", - "org.fusesource.hawtdispatch:hawtdispatch", - "org.fusesource.hawtdispatch:hawtdispatch-transport", - "org.fusesource.mqtt-client:mqtt-client", - "org.glassfish.hk2:hk2-api", - "org.glassfish.hk2:hk2-locator", - "org.glassfish.hk2:hk2-utils", - "org.glassfish.hk2:osgi-resource-locator", - "org.glassfish.hk2.external:aopalliance-repackaged", - "org.glassfish.hk2.external:jakarta.inject", - "org.glassfish.jaxb:jaxb-runtime", - "org.glassfish.jaxb:txw2", - "org.glassfish.jersey.containers:jersey-container-servlet-core", - "org.glassfish.jersey.core:jersey-client", - "org.glassfish.jersey.core:jersey-common", - "org.glassfish.jersey.core:jersey-server", - "org.glassfish.jersey.inject:jersey-hk2", - "org.glassfish.jersey.media:jersey-media-multipart", - "org.hdrhistogram:HdrHistogram", - "org.java-websocket:Java-WebSocket", - "org.javassist:javassist", - "org.jline:jline", - "org.jvnet.mimepull:mimepull", - "org.latencyutils:LatencyUtils", - "org.lz4:lz4-java", - "org.ops4j.pax.jdbc:pax-jdbc-common", - "org.osgi:osgi.cmpn", - "org.osgi:osgi.core", - "org.ow2.asm:asm", - "org.reactivestreams:reactive-streams", - "org.slf4j:slf4j-api", - "org.slf4j:slf4j-reload4j", - "org.tukaani:xz", - "org.xerial.snappy:snappy-java", - "org.yaml:snakeyaml", - "pl.edu.icm:JLargeArrays" - ] + "dependencies": [ + "at.yawk.lz4:lz4-java", + "cglib:cglib", + "ch.qos.logback:logback-classic", + "ch.qos.logback:logback-core", + "ch.qos.reload4j:reload4j", + "com.digitalpetri.fsm:strict-machine", + "com.digitalpetri.netty:netty-channel-fsm", + "com.fasterxml.jackson.core:jackson-annotations", + "com.fasterxml.jackson.core:jackson-core", + "com.fasterxml.jackson.core:jackson-databind", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml", + "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base", + "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider", + "com.fasterxml.jackson.module:jackson-module-jaxb-annotations", + "com.github.ben-manes.caffeine:caffeine", + "com.github.luben:zstd-jni", + "com.github.moquette-io.moquette:moquette-broker", + "com.github.stephenc.jcip:jcip-annotations", + "com.github.wendykierp:JTransforms", + "com.google.code.findbugs:jsr305", + "com.google.code.gson:gson", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:failureaccess", + "com.google.guava:guava", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "com.h2database:h2-mvstore", + "com.nimbusds:content-type", + "com.nimbusds:lang-tag", + "com.nimbusds:nimbus-jose-jwt", + "com.nimbusds:oauth2-oidc-sdk", + "com.sun.istack:istack-commons-runtime", + "org.apache.ratis:ratis-client", + "org.apache.ratis:ratis-common", + "org.apache.ratis:ratis-grpc", + "org.apache.ratis:ratis-metrics-api", + "org.apache.ratis:ratis-proto", + "org.apache.ratis:ratis-server", + "org.apache.ratis:ratis-server-api", + "com.zaxxer:HikariCP", + "commons-cli:commons-cli", + "commons-codec:commons-codec", + "commons-codec:commons-codec", + "commons-logging:commons-logging", + "io.airlift:airline", + "io.airlift:units", + "io.dropwizard.metrics:metrics-core", + "io.jsonwebtoken:jjwt-api", + "io.micrometer:micrometer-commons", + "io.micrometer:micrometer-core", + "io.micrometer:micrometer-observation", + "io.netty:netty-buffer", + "io.netty:netty-codec", + "io.netty:netty-codec-dns", + "io.netty:netty-codec-http", + "io.netty:netty-codec-http2", + "io.netty:netty-codec-mqtt", + "io.netty:netty-codec-socks", + "io.netty:netty-common", + "io.netty:netty-handler", + "io.netty:netty-handler-proxy", + "io.netty:netty-resolver", + "io.netty:netty-resolver-dns", + "io.netty:netty-resolver-dns-classes-macos", + "io.netty:netty-resolver-dns-native-macos", + "io.netty:netty-tcnative-boringssl-static", + "io.netty:netty-tcnative-boringssl-static", + "io.netty:netty-tcnative-boringssl-static", + "io.netty:netty-tcnative-boringssl-static", + "io.netty:netty-tcnative-boringssl-static", + "io.netty:netty-tcnative-classes", + "io.netty:netty-transport", + "io.netty:netty-transport-classes-epoll", + "io.netty:netty-transport-classes-kqueue", + "io.netty:netty-transport-native-epoll", + "io.netty:netty-transport-native-epoll", + "io.netty:netty-transport-native-kqueue", + "io.netty:netty-transport-native-kqueue", + "io.netty:netty-transport-native-unix-common", + "io.projectreactor:reactor-core", + "io.projectreactor.netty:reactor-netty-core", + "io.projectreactor.netty:reactor-netty-http", + "io.swagger:swagger-annotations", + "io.swagger:swagger-core", + "io.swagger:swagger-jaxrs", + "io.swagger:swagger-models", + "jakarta.activation:jakarta.activation-api", + "jakarta.annotation:jakarta.annotation-api", + "jakarta.servlet:jakarta.servlet-api", + "jakarta.validation:jakarta.validation-api", + "jakarta.ws.rs:jakarta.ws.rs-api", + "jakarta.xml.bind:jakarta.xml.bind-api", + "net.java.dev.jna:jna", + "net.java.dev.jna:jna-platform", + "net.minidev:accessors-smart", + "net.minidev:json-smart", + "org.antlr:antlr4-runtime", + "org.apache.commons:commons-csv", + "org.apache.commons:commons-lang3", + "org.apache.commons:commons-lang3", + "org.apache.commons:commons-math3", + "org.apache.commons:commons-pool2", + "org.apache.httpcomponents:httpclient", + "org.apache.httpcomponents:httpcore", + "org.apache.ratis:ratis-thirdparty-misc", + "org.apache.thrift:libthrift", + "org.apache.tsfile:common", + "org.apache.tsfile:tsfile", + "org.bouncycastle:bcpkix-jdk18on", + "org.bouncycastle:bcprov-jdk18on", + "org.bouncycastle:bcutil-jdk18on", + "org.checkerframework:checker-qual", + "org.checkerframework:checker-qual", + "org.eclipse.collections:eclipse-collections", + "org.eclipse.collections:eclipse-collections-api", + "org.eclipse.jetty:jetty-http", + "org.eclipse.jetty:jetty-io", + "org.eclipse.jetty:jetty-security", + "org.eclipse.jetty:jetty-server", + "org.eclipse.jetty:jetty-servlet", + "org.eclipse.jetty:jetty-util", + "org.eclipse.jetty:jetty-util-ajax", + "org.eclipse.milo:bsd-core", + "org.eclipse.milo:bsd-generator", + "org.eclipse.milo:sdk-client", + "org.eclipse.milo:sdk-core", + "org.eclipse.milo:sdk-server", + "org.eclipse.milo:stack-client", + "org.eclipse.milo:stack-core", + "org.eclipse.milo:stack-server", + "org.fusesource.hawtbuf:hawtbuf", + "org.fusesource.hawtdispatch:hawtdispatch", + "org.fusesource.hawtdispatch:hawtdispatch-transport", + "org.fusesource.mqtt-client:mqtt-client", + "org.glassfish.hk2:hk2-api", + "org.glassfish.hk2:hk2-locator", + "org.glassfish.hk2:hk2-utils", + "org.glassfish.hk2:osgi-resource-locator", + "org.glassfish.hk2.external:aopalliance-repackaged", + "org.glassfish.hk2.external:jakarta.inject", + "org.glassfish.jaxb:jaxb-runtime", + "org.glassfish.jaxb:txw2", + "org.glassfish.jersey.containers:jersey-container-servlet-core", + "org.glassfish.jersey.core:jersey-client", + "org.glassfish.jersey.core:jersey-common", + "org.glassfish.jersey.core:jersey-server", + "org.glassfish.jersey.inject:jersey-hk2", + "org.glassfish.jersey.media:jersey-media-multipart", + "org.hdrhistogram:HdrHistogram", + "org.java-websocket:Java-WebSocket", + "org.javassist:javassist", + "org.jline:jline", + "org.jvnet.mimepull:mimepull", + "org.latencyutils:LatencyUtils", + "org.ops4j.pax.jdbc:pax-jdbc-common", + "org.osgi:osgi.cmpn", + "org.osgi:osgi.core", + "org.ow2.asm:asm", + "org.reactivestreams:reactive-streams", + "org.slf4j:slf4j-api", + "org.slf4j:slf4j-reload4j", + "org.tukaani:xz", + "org.xerial.snappy:snappy-java", + "org.yaml:snakeyaml", + "pl.edu.icm:JLargeArrays" + ] } diff --git a/integration-test/src/main/java/org/apache/iotdb/itbase/constant/BuiltinTimeSeriesGeneratingFunctionEnum.java b/integration-test/src/main/java/org/apache/iotdb/itbase/constant/BuiltinTimeSeriesGeneratingFunctionEnum.java index fa0c5b5b148..e269f1af701 100644 --- a/integration-test/src/main/java/org/apache/iotdb/itbase/constant/BuiltinTimeSeriesGeneratingFunctionEnum.java +++ b/integration-test/src/main/java/org/apache/iotdb/itbase/constant/BuiltinTimeSeriesGeneratingFunctionEnum.java @@ -72,7 +72,6 @@ public enum BuiltinTimeSeriesGeneratingFunctionEnum { EQUAL_SIZE_BUCKET_AGG_SAMPLE("EQUAL_SIZE_BUCKET_AGG_SAMPLE"), EQUAL_SIZE_BUCKET_M4_SAMPLE("EQUAL_SIZE_BUCKET_M4_SAMPLE"), EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE("EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE"), - JEXL("JEXL"), MASTER_REPAIR("MASTER_REPAIR"), M4("M4"); diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java index 61de72829cc..4bec71586cc 100644 --- a/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/db/it/udf/IoTDBUDTFBuiltinFunctionIT.java @@ -1490,241 +1490,6 @@ public class IoTDBUDTFBuiltinFunctionIT { } } - @Test - public void testUDTFJexl() { - try (Connection connection = EnvFactory.getEnv().getConnection(); - Statement statement = connection.createStatement()) { - statement.execute("CREATE TIMESERIES root.sg.d7.s1 with datatype=INT32,encoding=PLAIN"); - statement.execute("CREATE TIMESERIES root.sg.d7.s2 with datatype=FLOAT,encoding=PLAIN"); - statement.execute("CREATE TIMESERIES root.sg.d7.s3 with datatype=DOUBLE,encoding=PLAIN"); - statement.execute("CREATE TIMESERIES root.sg.d7.s4 with datatype=TEXT,encoding=PLAIN"); - statement.execute("CREATE TIMESERIES root.sg.d7.s5 with datatype=BOOLEAN,encoding=PLAIN"); - statement.execute("CREATE TIMESERIES root.sg.d7.s6 with datatype=INT64,encoding=PLAIN"); - statement.execute("CREATE TIMESERIES root.sg.d7.s7 with datatype=INT64,encoding=PLAIN"); - statement.execute("CREATE TIMESERIES root.sg.d7.s8 with datatype=FLOAT,encoding=PLAIN"); - statement.execute("CREATE TIMESERIES root.sg.d7.s9 with datatype=TEXT,encoding=PLAIN"); - } catch (SQLException throwable) { - fail(throwable.getMessage()); - } - String[] SQL_FOR_SAMPLE_1 = new String[6]; - String[] SQL_FOR_SAMPLE_2 = new String[6]; - String[] SQL_FOR_SAMPLE_3 = new String[6]; - String[] SQL_FOR_SAMPLE_4 = new String[6]; - String[] SQL_FOR_SAMPLE_5 = new String[6]; - String[] SQL_FOR_SAMPLE_6 = new String[6]; - String[] SQL_FOR_SAMPLE_7 = new String[6]; - String[] SQL_FOR_SAMPLE_8 = new String[6]; - String[] SQL_FOR_SAMPLE_9 = new String[6]; - for (int i = 0; i < 5; i++) { - SQL_FOR_SAMPLE_1[i] = - String.format( - Locale.ENGLISH, "insert into root.sg.d7(time, s1) values (%d, %d)", i, i + 1); - SQL_FOR_SAMPLE_2[i] = - String.format( - Locale.ENGLISH, "insert into root.sg.d7(time, s2) values (%d, %f)", i, i + 1.0); - SQL_FOR_SAMPLE_3[i] = - String.format( - Locale.ENGLISH, "insert into root.sg.d7(time, s3) values (%d, %f)", i, i + 1.0); - SQL_FOR_SAMPLE_4[i] = - String.format( - Locale.ENGLISH, "insert into root.sg.d7(time, s4) values (%d, '%s')", i, "string"); - SQL_FOR_SAMPLE_5[i] = String.format("insert into root.sg.d7(time, s5) values (%d, true)", i); - SQL_FOR_SAMPLE_6[i] = - String.format( - Locale.ENGLISH, "insert into root.sg.d7(time, s6) values (%d, %d)", i, i + 8); - SQL_FOR_SAMPLE_7[i] = - String.format( - Locale.ENGLISH, "insert into root.sg.d7(time, s7) values (%d, %d)", i, i + 1); - SQL_FOR_SAMPLE_8[i] = - String.format( - Locale.ENGLISH, "insert into root.sg.d7(time, s8) values (%d, %f)", i, i + 1.0); - SQL_FOR_SAMPLE_9[i] = - String.format( - Locale.ENGLISH, "insert into root.sg.d7(time, s9) values (%d, '%s')", i, "string"); - } - SQL_FOR_SAMPLE_1[5] = - String.format( - Locale.ENGLISH, - "insert into root.sg.d7(time, s1) values (%d, %d)", - 10000000000L, - 5 + 1); - SQL_FOR_SAMPLE_2[5] = - String.format( - Locale.ENGLISH, - "insert into root.sg.d7(time, s2) values (%d, %f)", - 10000000000L, - 5 + 1.0); - SQL_FOR_SAMPLE_3[5] = - String.format( - Locale.ENGLISH, - "insert into root.sg.d7(time, s3) values (%d, %f)", - 10000000000L, - 5 + 1.0); - SQL_FOR_SAMPLE_4[5] = - String.format( - Locale.ENGLISH, - "insert into root.sg.d7(time, s4) values (%d, '%s')", - 10000000000L, - "string"); - SQL_FOR_SAMPLE_5[5] = String.format("insert into root.sg.d7(time, s5) values (%d, true)", 5); - SQL_FOR_SAMPLE_6[5] = - String.format( - Locale.ENGLISH, - "insert into root.sg.d7(time, s6) values (%d, %d)", - 10000000000L, - 5 + 8); - SQL_FOR_SAMPLE_7[5] = - String.format( - Locale.ENGLISH, - "insert into root.sg.d7(time, s7) values (%d, %d)", - 10000000000L, - 5 + 1); - SQL_FOR_SAMPLE_8[5] = - String.format( - Locale.ENGLISH, - "insert into root.sg.d7(time, s8) values (%d, %f)", - 10000000000L, - 5 + 1.0); - SQL_FOR_SAMPLE_9[5] = - String.format( - Locale.ENGLISH, - "insert into root.sg.d7(time, s9) values (%d, '%s')", - 10000000000L, - "string"); - double[] ANSWER1 = new double[] {2, 4, 6, 8, 10, 12}; - double[] ANSWER2 = new double[] {2, 4, 6, 8, 10, 12}; - double[] ANSWER3 = new double[] {4, 7, 10, 13, 16, 19}; - String[] ANSWER4 = - new String[] {"string2", "string2", "string2", "string2", "string2", "string2"}; - double[] ANSWER7 = new double[] {1, 4, 9, 16, 25, 36}; - String[] ANSWER8 = - new String[] {"string1", "string4", "string9", "string16", "string25", "string36"}; - double[] ANSWER9 = new double[] {2, 9, 28, 65, 126, 469}; - try (Connection connection = EnvFactory.getEnv().getConnection(); - Statement statement = connection.createStatement()) { - for (int i = 0; i < 5; i++) { - statement.execute(SQL_FOR_SAMPLE_1[i]); - statement.execute(SQL_FOR_SAMPLE_2[i]); - statement.execute(SQL_FOR_SAMPLE_3[i]); - statement.execute(SQL_FOR_SAMPLE_4[i]); - statement.execute(SQL_FOR_SAMPLE_5[i]); - statement.execute(SQL_FOR_SAMPLE_6[i]); - statement.execute(SQL_FOR_SAMPLE_7[i]); - statement.execute(SQL_FOR_SAMPLE_8[i]); - statement.execute(SQL_FOR_SAMPLE_9[i]); - } - } catch (SQLException throwable) { - fail(throwable.getMessage()); - } - - try (Connection connection = EnvFactory.getEnv().getConnection(); - Statement statement = connection.createStatement()) { - String functionName = "JEXL"; - String expr1 = "x -> {2 * x}"; - String expr2 = "x -> {x + x}"; - String expr3 = "x -> {x * 3 + 1}"; - String expr4 = "x -> {x + 2}"; - String expr5 = "x -> {x == true}"; - String expr6 = "x -> {x == x}"; - String expr7 = "(x, y) -> {x * y}"; - String expr8 = "(x, y, z) -> {x + y * z}"; - String expr9 = "(x, y, z, a) -> {x * y * z + (a ? 1 : -1)}"; - ResultSet resultSet = - statement.executeQuery( - String.format( - "select %s(s1, 'expr'='%s'), " - + "%s(s2, 'expr'='%s'), " - + "%s(s3, 'expr'='%s'), " - + "%s(s4, 'expr'='%s'), " - + "%s(s5, 'expr'='%s'), " - + "%s(s6, 'expr'='%s'), " - + "%s(s7, s8, 'expr'='%s'), " - + "%s(s4, s7, s1, 'expr'='%s'), " - + "%s(s1, s7, s8, s5, 'expr'='%s') " - + "from root.sg.d7", - functionName, - expr1, - functionName, - expr2, - functionName, - expr3, - functionName, - expr4, - functionName, - expr5, - functionName, - expr6, - functionName, - expr7, - functionName, - expr8, - functionName, - expr9)); - int columnCount = resultSet.getMetaData().getColumnCount(); - assertEquals(1 + 9, columnCount); - for (int i = 0; i < 5; i++) { - resultSet.next(); - assertEquals(ANSWER1[i], resultSet.getDouble(2), 0.01); - assertEquals(ANSWER2[i], resultSet.getDouble(3), 0.01); - assertEquals(ANSWER3[i], resultSet.getDouble(4), 0.01); - assertEquals(ANSWER4[i], resultSet.getString(5)); - assertTrue(resultSet.getBoolean(6)); - assertTrue(resultSet.getBoolean(7)); - assertEquals(ANSWER7[i], resultSet.getDouble(8), 0.01); - assertEquals(ANSWER8[i], resultSet.getString(9)); - assertEquals(ANSWER9[i], resultSet.getDouble(10), 0.01); - } - - resultSet = - statement.executeQuery( - String.format( - "select %s(s1, 'expr'='%s'), " - + "%s(s2, 'expr'='%s'), " - + "%s(s3, 'expr'='%s'), " - + "%s(s4, 'expr'='%s'), " - + "%s(s5, 'expr'='%s'), " - + "%s(s6, 'expr'='%s'), " - + "%s(s7, s8, 'expr'='%s'), " - + "%s(s4, s7, s1, 'expr'='%s'), " - + "%s(s1, s7, s8, s5, 'expr'='%s') " - + "from root.sg.d7 align by device", - functionName, - expr1, - functionName, - expr2, - functionName, - expr3, - functionName, - expr4, - functionName, - expr5, - functionName, - expr6, - functionName, - expr7, - functionName, - expr8, - functionName, - expr9)); - columnCount = resultSet.getMetaData().getColumnCount(); - assertEquals(2 + 9, columnCount); - for (int i = 0; i < 5; i++) { - resultSet.next(); - assertEquals(ANSWER1[i], resultSet.getDouble(2 + 1), 0.01); - assertEquals(ANSWER2[i], resultSet.getDouble(3 + 1), 0.01); - assertEquals(ANSWER3[i], resultSet.getDouble(4 + 1), 0.01); - assertEquals(ANSWER4[i], resultSet.getString(5 + 1)); - assertTrue(resultSet.getBoolean(6 + 1)); - assertTrue(resultSet.getBoolean(7 + 1)); - assertEquals(ANSWER7[i], resultSet.getDouble(8 + 1), 0.01); - assertEquals(ANSWER8[i], resultSet.getString(9 + 1)); - assertEquals(ANSWER9[i], resultSet.getDouble(10 + 1), 0.01); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - @Test public void testStringFunctions() { String[] createSQLs = diff --git a/iotdb-core/node-commons/pom.xml b/iotdb-core/node-commons/pom.xml index 5c5cf963a9c..1a70babcc12 100644 --- a/iotdb-core/node-commons/pom.xml +++ b/iotdb-core/node-commons/pom.xml @@ -159,10 +159,6 @@ <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-jexl3</artifactId> - </dependency> <dependency> <groupId>com.github.luben</groupId> <artifactId>zstd-jni</artifactId> diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/BuiltinTimeSeriesGeneratingFunction.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/BuiltinTimeSeriesGeneratingFunction.java index 304fdcb040f..2284c0c96df 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/BuiltinTimeSeriesGeneratingFunction.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/BuiltinTimeSeriesGeneratingFunction.java @@ -91,7 +91,6 @@ public enum BuiltinTimeSeriesGeneratingFunction { EQUAL_SIZE_BUCKET_M4_SAMPLE("EQUAL_SIZE_BUCKET_M4_SAMPLE", UDTFEqualSizeBucketM4Sample.class), EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE( "EQUAL_SIZE_BUCKET_OUTLIER_SAMPLE", UDTFEqualSizeBucketOutlierSample.class), - JEXL("JEXL", UDTFJexl.class), MASTER_REPAIR("MASTER_REPAIR", UDTFMasterRepair.class), M4("M4", UDTFM4.class); diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/UDTFJexl.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/UDTFJexl.java deleted file mode 100644 index d554cfe2572..00000000000 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/builtin/UDTFJexl.java +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.iotdb.commons.udf.builtin; - -import org.apache.iotdb.commons.exception.MetadataException; -import org.apache.iotdb.commons.udf.utils.UDFDataTypeTransformer; -import org.apache.iotdb.udf.api.UDTF; -import org.apache.iotdb.udf.api.access.Row; -import org.apache.iotdb.udf.api.collector.PointCollector; -import org.apache.iotdb.udf.api.customizer.config.UDTFConfigurations; -import org.apache.iotdb.udf.api.customizer.parameter.UDFParameterValidator; -import org.apache.iotdb.udf.api.customizer.parameter.UDFParameters; -import org.apache.iotdb.udf.api.customizer.strategy.RowByRowAccessStrategy; -import org.apache.iotdb.udf.api.exception.UDFException; -import org.apache.iotdb.udf.api.exception.UDFInputSeriesDataTypeNotValidException; -import org.apache.iotdb.udf.api.exception.UDFOutputSeriesDataTypeNotValidException; -import org.apache.iotdb.udf.api.type.Type; - -import org.apache.commons.jexl3.JexlBuilder; -import org.apache.commons.jexl3.JexlEngine; -import org.apache.commons.jexl3.JexlScript; -import org.apache.tsfile.enums.TSDataType; - -import java.io.IOException; -import java.util.HashMap; - -public class UDTFJexl implements UDTF { - - private int inputSeriesNumber; - private TSDataType[] inputDataType; - private TSDataType outputDataType; - private JexlScript script; - private Evaluator evaluator; - - @Override - public void validate(UDFParameterValidator validator) throws UDFException { - inputSeriesNumber = validator.getParameters().getChildExpressionsSize(); - for (int i = 0; i < inputSeriesNumber; i++) { - validator.validateInputSeriesDataType( - i, Type.INT32, Type.INT64, Type.FLOAT, Type.DOUBLE, Type.TEXT, Type.BOOLEAN); - } - validator.validateRequiredAttribute("expr"); - } - - @Override - public void beforeStart(UDFParameters parameters, UDTFConfigurations configurations) - throws UDFInputSeriesDataTypeNotValidException, - UDFOutputSeriesDataTypeNotValidException, - MetadataException { - String expr = parameters.getString("expr"); - JexlEngine jexl = new JexlBuilder().create(); - script = jexl.createScript(expr); - - inputDataType = new TSDataType[inputSeriesNumber]; - for (int i = 0; i < inputSeriesNumber; i++) { - inputDataType[i] = UDFDataTypeTransformer.transformToTsDataType(parameters.getDataType(i)); - } - outputDataType = probeOutputDataType(); - - if (inputSeriesNumber == 1) { - switch (inputDataType[0]) { - case INT32: - evaluator = new EvaluatorIntInput(); - break; - case INT64: - evaluator = new EvaluatorLongInput(); - break; - case FLOAT: - evaluator = new EvaluatorFloatInput(); - break; - case DOUBLE: - evaluator = new EvaluatorDoubleInput(); - break; - case TEXT: - evaluator = new EvaluatorStringInput(); - break; - case BOOLEAN: - evaluator = new EvaluatorBooleanInput(); - break; - case STRING: - case TIMESTAMP: - case DATE: - case BLOB: - default: - throw new UDFInputSeriesDataTypeNotValidException( - 0, - UDFDataTypeTransformer.transformToUDFDataType(inputDataType[0]), - Type.INT32, - Type.INT64, - Type.FLOAT, - Type.DOUBLE, - Type.TEXT, - Type.BOOLEAN); - } - } else { - evaluator = new EvaluatorMulInput(); - } - - configurations - .setAccessStrategy(new RowByRowAccessStrategy()) - .setOutputDataType(UDFDataTypeTransformer.transformToUDFDataType(outputDataType)); - } - - // 23, 23L, 23f, 23d, "string", true are hard codes for probing - private HashMap<TSDataType, Object> initialMap() { - HashMap<TSDataType, Object> map = new HashMap<>(); - map.put(TSDataType.INT32, 23); - map.put(TSDataType.INT64, 23L); - map.put(TSDataType.FLOAT, 23f); - map.put(TSDataType.DOUBLE, 23d); - map.put(TSDataType.TEXT, "string"); - map.put(TSDataType.BOOLEAN, true); - return map; - } - - private TSDataType probeOutputDataType() throws UDFOutputSeriesDataTypeNotValidException { - // initial inputHardCodes to probe OutputDataType - HashMap<TSDataType, Object> map = initialMap(); - Object[] inputHardCodes = new Object[inputSeriesNumber]; - for (int i = 0; i < inputSeriesNumber; i++) { - inputHardCodes[i] = map.get(inputDataType[i]); - } - - Object o = script.execute(null, inputHardCodes); - - if (o instanceof Number) { - return TSDataType.DOUBLE; - } else if (o instanceof String) { - return TSDataType.TEXT; - } else if (o instanceof Boolean) { - return TSDataType.BOOLEAN; - } else { - throw new UDFOutputSeriesDataTypeNotValidException(0, "[Number, String, Boolean]"); - } - } - - @Override - public void transform(Row row, PointCollector collector) - throws IOException, - UDFOutputSeriesDataTypeNotValidException, - UDFInputSeriesDataTypeNotValidException { - switch (outputDataType) { - case DOUBLE: - evaluator.evaluateDouble(row, collector); - break; - case TEXT: - evaluator.evaluateText(row, collector); - break; - case BOOLEAN: - evaluator.evaluateBoolean(row, collector); - break; - case TIMESTAMP: - case DATE: - case STRING: - case BLOB: - case INT64: - case INT32: - case FLOAT: - default: - // This will not happen. - throw new UDFOutputSeriesDataTypeNotValidException(0, "[Number, String, Boolean]"); - } - } - - private interface Evaluator { - void evaluateDouble(Row row, PointCollector collector) - throws IOException, UDFInputSeriesDataTypeNotValidException; - - void evaluateText(Row row, PointCollector collector) - throws IOException, UDFInputSeriesDataTypeNotValidException; - - void evaluateBoolean(Row row, PointCollector collector) - throws IOException, UDFInputSeriesDataTypeNotValidException; - } - - private class EvaluatorIntInput implements Evaluator { - @Override - public void evaluateDouble(Row row, PointCollector collector) throws IOException { - collector.putDouble( - row.getTime(), ((Number) script.execute(null, row.getInt(0))).doubleValue()); - } - - @Override - public void evaluateText(Row row, PointCollector collector) throws IOException { - collector.putString(row.getTime(), (String) script.execute(null, row.getInt(0))); - } - - @Override - public void evaluateBoolean(Row row, PointCollector collector) throws IOException { - collector.putBoolean(row.getTime(), (Boolean) script.execute(null, row.getInt(0))); - } - } - - private class EvaluatorLongInput implements Evaluator { - @Override - public void evaluateDouble(Row row, PointCollector collector) throws IOException { - collector.putDouble( - row.getTime(), ((Number) script.execute(null, row.getLong(0))).doubleValue()); - } - - @Override - public void evaluateText(Row row, PointCollector collector) throws IOException { - collector.putString(row.getTime(), (String) script.execute(null, row.getLong(0))); - } - - @Override - public void evaluateBoolean(Row row, PointCollector collector) throws IOException { - collector.putBoolean(row.getTime(), (Boolean) script.execute(null, row.getLong(0))); - } - } - - private class EvaluatorFloatInput implements Evaluator { - @Override - public void evaluateDouble(Row row, PointCollector collector) throws IOException { - collector.putDouble( - row.getTime(), ((Number) script.execute(null, row.getFloat(0))).doubleValue()); - } - - @Override - public void evaluateText(Row row, PointCollector collector) throws IOException { - collector.putString(row.getTime(), (String) script.execute(null, row.getFloat(0))); - } - - @Override - public void evaluateBoolean(Row row, PointCollector collector) throws IOException { - collector.putBoolean(row.getTime(), (Boolean) script.execute(null, row.getFloat(0))); - } - } - - private class EvaluatorDoubleInput implements Evaluator { - @Override - public void evaluateDouble(Row row, PointCollector collector) throws IOException { - collector.putDouble( - row.getTime(), ((Number) script.execute(null, row.getDouble(0))).doubleValue()); - } - - @Override - public void evaluateText(Row row, PointCollector collector) throws IOException { - collector.putString(row.getTime(), (String) script.execute(null, row.getDouble(0))); - } - - @Override - public void evaluateBoolean(Row row, PointCollector collector) throws IOException { - collector.putBoolean(row.getTime(), (Boolean) script.execute(null, row.getDouble(0))); - } - } - - private class EvaluatorStringInput implements Evaluator { - @Override - public void evaluateDouble(Row row, PointCollector collector) throws IOException { - collector.putDouble( - row.getTime(), ((Number) script.execute(null, row.getString(0))).doubleValue()); - } - - @Override - public void evaluateText(Row row, PointCollector collector) throws IOException { - collector.putString(row.getTime(), (String) script.execute(null, row.getString(0))); - } - - @Override - public void evaluateBoolean(Row row, PointCollector collector) throws IOException { - collector.putBoolean(row.getTime(), (Boolean) script.execute(null, row.getString(0))); - } - } - - private class EvaluatorBooleanInput implements Evaluator { - @Override - public void evaluateDouble(Row row, PointCollector collector) throws IOException { - collector.putDouble( - row.getTime(), ((Number) script.execute(null, row.getBoolean(0))).doubleValue()); - } - - @Override - public void evaluateText(Row row, PointCollector collector) throws IOException { - collector.putString(row.getTime(), (String) script.execute(null, row.getBoolean(0))); - } - - @Override - public void evaluateBoolean(Row row, PointCollector collector) throws IOException { - collector.putBoolean(row.getTime(), (Boolean) script.execute(null, row.getBoolean(0))); - } - } - - private class EvaluatorMulInput implements Evaluator { - - Object[] values = new Object[inputSeriesNumber]; - - @Override - public void evaluateDouble(Row row, PointCollector collector) - throws IOException, UDFInputSeriesDataTypeNotValidException { - getValues(row); - collector.putDouble(row.getTime(), ((Number) script.execute(null, values)).doubleValue()); - } - - @Override - public void evaluateText(Row row, PointCollector collector) - throws IOException, UDFInputSeriesDataTypeNotValidException { - getValues(row); - collector.putString(row.getTime(), (String) script.execute(null, values)); - } - - @Override - public void evaluateBoolean(Row row, PointCollector collector) - throws IOException, UDFInputSeriesDataTypeNotValidException { - getValues(row); - collector.putBoolean(row.getTime(), (Boolean) script.execute(null, values)); - } - - public void getValues(Row row) throws IOException, UDFInputSeriesDataTypeNotValidException { - for (int i = 0; i < inputSeriesNumber; i++) { - switch (inputDataType[i]) { - case INT32: - values[i] = row.getInt(i); - break; - case INT64: - values[i] = row.getLong(i); - break; - case FLOAT: - values[i] = row.getFloat(i); - break; - case DOUBLE: - values[i] = row.getDouble(i); - break; - case TEXT: - values[i] = row.getString(i); - break; - case BOOLEAN: - values[i] = row.getBoolean(i); - break; - case STRING: - case BLOB: - case DATE: - case TIMESTAMP: - default: - throw new UDFInputSeriesDataTypeNotValidException( - i, - UDFDataTypeTransformer.transformToUDFDataType(inputDataType[i]), - Type.INT32, - Type.INT64, - Type.FLOAT, - Type.DOUBLE, - Type.TEXT, - Type.BOOLEAN); - } - } - } - } -} diff --git a/pom.xml b/pom.xml index 1c01f72b1a3..baba6fcdd46 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,6 @@ <commons-codec.version>1.16.1</commons-codec.version> <commons-csv.version>1.10.0</commons-csv.version> <commons-io.version>2.14.0</commons-io.version> - <commons-jexl3.version>3.3</commons-jexl3.version> <commons-lang3.version>3.18.0</commons-lang3.version> <commons-math3.version>3.6.1</commons-math3.version> <commons-pool2.version>2.11.1</commons-pool2.version> @@ -515,11 +514,6 @@ <artifactId>cglib</artifactId> <version>${cglib.version}</version> </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-jexl3</artifactId> - <version>${commons-jexl3.version}</version> - </dependency> <dependency> <groupId>com.github.luben</groupId> <artifactId>zstd-jni</artifactId>
