From 4475fa4e8b830cafa909c7d115775c94078e2262 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 11 Nov 2021 11:31:54 +0100 Subject: [PATCH] [jOOQ/jOOQ#982] Add support for GIS extensions - Add support for ST_AREA, ST_ASTEXT - Add support for SQL Server method style syntax - Add Geography type and Spatial super type --- jOOQ/src/main/java/org/jooq/Geometry.java | 1 - jOOQ/src/main/java/org/jooq/impl/DSL.java | 99 +++++++++++++++++++ jOOQ/src/main/java/org/jooq/impl/Names.java | 2 + .../main/java/org/jooq/impl/ParserImpl.java | 52 +++++++++- jOOQ/src/main/java/org/jooq/impl/QOM.java | 24 +++++ .../main/java/org/jooq/impl/SQLDataType.java | 10 ++ .../java/org/jooq/impl/StGeomfromtext.java | 4 + jOOQ/src/main/java/org/jooq/impl/StX.java | 4 + jOOQ/src/main/java/org/jooq/impl/StY.java | 4 + 9 files changed, 196 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Geometry.java b/jOOQ/src/main/java/org/jooq/Geometry.java index 033db91638..22fceecc89 100644 --- a/jOOQ/src/main/java/org/jooq/Geometry.java +++ b/jOOQ/src/main/java/org/jooq/Geometry.java @@ -115,6 +115,5 @@ package org.jooq; - diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 842071e347..e7b99b442a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -214,6 +214,7 @@ import org.jooq.Field; import org.jooq.FieldOrRow; // ... // ... +// ... import org.jooq.GroupConcatOrderByStep; import org.jooq.GroupConcatSeparatorStep; import org.jooq.GroupField; @@ -367,6 +368,7 @@ import org.jooq.SelectForStep; import org.jooq.SelectSelectStep; import org.jooq.SelectWhereStep; import org.jooq.Sequence; +// ... import org.jooq.Statement; import org.jooq.Stringly; import org.jooq.Support; @@ -20512,6 +20514,58 @@ public class DSL { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -26722,6 +26776,18 @@ public class DSL { + + + + + + + + + + + + @@ -27622,6 +27688,28 @@ public class DSL { + + + + + + + + + + + + + + + + + + + + + + @@ -28169,6 +28257,17 @@ public class DSL { + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 577774cec7..8f52180b74 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -378,6 +378,8 @@ final class Names { static final Name N_STRING_AGG = unquotedName("string_agg"); static final Name N_STRREVERSE = unquotedName("strreverse"); static final Name N_STR_REPLACE = unquotedName("str_replace"); + static final Name N_ST_ASTEXT = unquotedName("st_astext"); + static final Name N_ST_AREA = unquotedName("st_area"); static final Name N_ST_GEOMFROMTEXT = unquotedName("st_geomfromtext"); static final Name N_ST_X = unquotedName("st_x"); static final Name N_ST_Y = unquotedName("st_y"); diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 4c2b5c8612..1c9e55883c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -311,6 +311,8 @@ import static org.jooq.impl.DSL.sqrt; import static org.jooq.impl.DSL.square; // ... // ... +// ... +// ... import static org.jooq.impl.DSL.stddevPop; import static org.jooq.impl.DSL.stddevSamp; import static org.jooq.impl.DSL.substringIndex; @@ -7543,6 +7545,35 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { r = arrayGet((Field) toField(r), (Field) parseField()); parse(']'); } + + r = parseMethodCallIf(r); + return r; + } + + private FieldOrRow parseMethodCallIf(FieldOrRow r) { + + + + + + + + + + + + + + + + + + + + + + + return r; } @@ -7831,7 +7862,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { else if ((field = parseFieldGreatestIf()) != null) return field; - else if (parseFunctionNameIf("GROUP_ID") && requireProEdition() && parse('(') && parse(')')) { + else if (parseFunctionNameIf("GROUP_ID") && requireProEdition() && parseEmptyParens()) { @@ -7840,6 +7871,11 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { return field; else if (parseFunctionNameIf("GROUPING")) return grouping(parseFieldParenthesised()); + else if ((parseFunctionNameIf("GEOMETRY::STGEOMFROMTEXT") || parseFunctionNameIf("GEOGRAPHY::STGEOMFROMTEXT")) && requireProEdition()) { + + + + } else break; @@ -8079,7 +8115,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { return parseFunctionArgs3(DSL::splitPart); else if ((field = parseFieldReplaceIf()) != null) return field; - else if (parseFunctionNameIf("SCHEMA") && parseIf('(') && parse(')')) + else if (parseFunctionNameIf("SCHEMA") && parseEmptyParensIf()) return currentSchema(); else if (parseFunctionNameIf("STRREVERSE")) return reverse((Field) parseFieldParenthesised()); @@ -8088,7 +8124,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { else if (parseFunctionNameIf("SECOND")) return second(parseFieldParenthesised()); - else if (parseFunctionNameIf("SEQ4", "SEQ8") && parse('(') && parse(')') && requireProEdition()) { + else if (parseFunctionNameIf("SEQ4", "SEQ8") && parseEmptyParens() && requireProEdition()) { @@ -8110,6 +8146,16 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { else if ((field = parseFieldSysConnectByPathIf()) != null) return field; + else if (parseFunctionNameIf("ST_AREA") && requireProEdition()) { + + + + } + else if (parseFunctionNameIf("ST_ASTEXT") && requireProEdition()) { + + + + } else if (parseFunctionNameIf("ST_GEOMFROMTEXT") && requireProEdition()) { diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java index d75bec9e63..3a32e60f26 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QOM.java +++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java @@ -83,6 +83,7 @@ import org.jooq.Function7; import org.jooq.Function8; import org.jooq.Function9; // ... +// ... import org.jooq.GroupField; import org.jooq.Index; import org.jooq.Internal; @@ -107,6 +108,7 @@ import org.jooq.RowId; import org.jooq.Schema; import org.jooq.Select; import org.jooq.Sequence; +// ... import org.jooq.Statement; import org.jooq.Table; import org.jooq.Traverser; @@ -3452,6 +3454,28 @@ public final class QOM { + + + + + + + + + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java b/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java index 70c5415c4b..99b952a66b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/SQLDataType.java @@ -88,6 +88,7 @@ import java.util.UUID; import org.jooq.Configuration; import org.jooq.DataType; // ... +// ... import org.jooq.JSON; import org.jooq.JSONB; // ... @@ -719,6 +720,15 @@ public final class SQLDataType { + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/StGeomfromtext.java b/jOOQ/src/main/java/org/jooq/impl/StGeomfromtext.java index 0e86c28b4d..ed882cf3a4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/StGeomfromtext.java +++ b/jOOQ/src/main/java/org/jooq/impl/StGeomfromtext.java @@ -192,6 +192,10 @@ package org.jooq.impl; + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/StX.java b/jOOQ/src/main/java/org/jooq/impl/StX.java index 5c89fcd75c..672b7e22cc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/StX.java +++ b/jOOQ/src/main/java/org/jooq/impl/StX.java @@ -162,6 +162,10 @@ package org.jooq.impl; + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/StY.java b/jOOQ/src/main/java/org/jooq/impl/StY.java index 5c89fcd75c..672b7e22cc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/StY.java +++ b/jOOQ/src/main/java/org/jooq/impl/StY.java @@ -162,6 +162,10 @@ package org.jooq.impl; + + + +