[GitHub] [flink] KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects
KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects URL: https://github.com/apache/flink/pull/9971#discussion_r339658621 ## File path: flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/delegation/Parser.java ## @@ -0,0 +1,57 @@ +/* + * 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.flink.table.delegation; + +import org.apache.flink.annotation.Internal; +import org.apache.flink.table.catalog.UnresolvedIdentifier; +import org.apache.flink.table.operations.Operation; +import org.apache.flink.table.operations.QueryOperation; + +import java.util.List; + +/** + * Provides methods for parsing SQL objects from a SQL string. + */ +@Internal +public interface Parser { + + /** +* Entry point for parsing SQL queries expressed as a String. +* +* Note:If the created {@link Operation} is a {@link QueryOperation} +* it must be in a form that will be understood by the +* {@link Planner#translate(List)} method. +* +* The produced Operation trees should already be validated. +* +* @param statement the SQL statement to evaluate +* @return parsed queries as trees of relational {@link Operation}s +* @throws org.apache.flink.table.api.SqlParserException when failed to parse the statement +*/ + List parse(String statement); + + /** +* Entry point for parsing SQL identifiers expressed as a String. +* +* @param identifier the SQL identifier to parse +* @return parsed identifier +* @throws org.apache.flink.table.api.SqlParserException when failed to parse the identifier +*/ + UnresolvedIdentifier parseIdentifier(String identifier); Review comment: After some more thoughts, I think this API is also reasonable. My first impression about this is, normally Parser have to deal with a whole SQL string, and table/function identifies are among the SQL string. But I missed other scenarios like when people register or delete table/function, the user will provide the identify directly. 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] [flink] KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects
KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects URL: https://github.com/apache/flink/pull/9971#discussion_r339622165 ## File path: flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/delegation/Parser.java ## @@ -0,0 +1,57 @@ +/* + * 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.flink.table.delegation; + +import org.apache.flink.annotation.Internal; +import org.apache.flink.table.catalog.UnresolvedIdentifier; +import org.apache.flink.table.operations.Operation; +import org.apache.flink.table.operations.QueryOperation; + +import java.util.List; + +/** + * Provides methods for parsing SQL objects from a SQL string. + */ +@Internal +public interface Parser { + + /** +* Entry point for parsing SQL queries expressed as a String. +* +* Note:If the created {@link Operation} is a {@link QueryOperation} +* it must be in a form that will be understood by the +* {@link Planner#translate(List)} method. +* +* The produced Operation trees should already be validated. +* +* @param statement the SQL statement to evaluate +* @return parsed queries as trees of relational {@link Operation}s +* @throws org.apache.flink.table.api.SqlParserException when failed to parse the statement +*/ + List parse(String statement); + + /** +* Entry point for parsing SQL identifiers expressed as a String. +* +* @param identifier the SQL identifier to parse +* @return parsed identifier +* @throws org.apache.flink.table.api.SqlParserException when failed to parse the identifier +*/ + UnresolvedIdentifier parseIdentifier(String identifier); Review comment: I'm ok with `UnresolvedIdentifier` now. How about the interface about `parseIdentifier`, what's your thought about moving it to `CatalogManager`? 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] [flink] KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects
KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects URL: https://github.com/apache/flink/pull/9971#discussion_r339620824 ## File path: flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/catalog/UnresolvedIdentifier.java ## @@ -0,0 +1,127 @@ +/* + * 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.flink.table.catalog; + +import org.apache.flink.annotation.PublicEvolving; +import org.apache.flink.table.api.ValidationException; +import org.apache.flink.table.utils.EncodingUtils; +import org.apache.flink.util.Preconditions; +import org.apache.flink.util.StringUtils; + +import javax.annotation.Nullable; + +import java.util.Arrays; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Identifier of an object, such as table, view, function or type in a catalog. This identifier + * cannot be used directly to access an object in a {@link CatalogManager}, but has to be first + * fully resolved into {@link ObjectIdentifier}. + */ +@PublicEvolving +public class UnresolvedIdentifier { Review comment: If this class also serve the function resolution, I would be also fine with `Unresolved`. 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] [flink] KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects
KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects URL: https://github.com/apache/flink/pull/9971#discussion_r339412246 ## File path: flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/delegation/Parser.java ## @@ -0,0 +1,57 @@ +/* + * 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.flink.table.delegation; + +import org.apache.flink.annotation.Internal; +import org.apache.flink.table.catalog.UnresolvedIdentifier; +import org.apache.flink.table.operations.Operation; +import org.apache.flink.table.operations.QueryOperation; + +import java.util.List; + +/** + * Provides methods for parsing SQL objects from a SQL string. + */ +@Internal +public interface Parser { + + /** +* Entry point for parsing SQL queries expressed as a String. +* +* Note:If the created {@link Operation} is a {@link QueryOperation} +* it must be in a form that will be understood by the +* {@link Planner#translate(List)} method. +* +* The produced Operation trees should already be validated. +* +* @param statement the SQL statement to evaluate +* @return parsed queries as trees of relational {@link Operation}s +* @throws org.apache.flink.table.api.SqlParserException when failed to parse the statement +*/ + List parse(String statement); + + /** +* Entry point for parsing SQL identifiers expressed as a String. +* +* @param identifier the SQL identifier to parse +* @return parsed identifier +* @throws org.apache.flink.table.api.SqlParserException when failed to parse the identifier +*/ + UnresolvedIdentifier parseIdentifier(String identifier); Review comment: IIUC when user enters a table name / function name, we will translate it through following path: `string > UnresolvedIdentifier(via Parser) > ObjectIdentifier(via CatalogManager)` Besides with my previous comment in `UnresolvedIdentifier`, I'm not sure whether this is necessary. It also sounds not intuitive that it's parser's responsibility to convert the string to `UnresolvedIdentifier`. One alternative solution might be: 1. we can relax the ObjectIdentifier to tolerant partial identifies, i.e. only table name. Then we can pass `String` or `String[]` to ObjectIdentifier to construct. 2. ObjectIdentifier can tell whether itself has been qualified or not. And we can qualify the ObjectIdentifier through `CatalogManager`. 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] [flink] KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects
KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects URL: https://github.com/apache/flink/pull/9971#discussion_r339396074 ## File path: flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/catalog/UnresolvedIdentifier.java ## @@ -0,0 +1,127 @@ +/* + * 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.flink.table.catalog; + +import org.apache.flink.annotation.PublicEvolving; +import org.apache.flink.table.api.ValidationException; +import org.apache.flink.table.utils.EncodingUtils; +import org.apache.flink.util.Preconditions; +import org.apache.flink.util.StringUtils; + +import javax.annotation.Nullable; + +import java.util.Arrays; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Identifier of an object, such as table, view, function or type in a catalog. This identifier + * cannot be used directly to access an object in a {@link CatalogManager}, but has to be first + * fully resolved into {@link ObjectIdentifier}. + */ +@PublicEvolving +public class UnresolvedIdentifier { Review comment: Some thoughts about this class: 1. Should it be `@Internal`? I don't find any public interface or class referencing this yet. Otherwise, I would suggest to put this in `flink-table-common`. 2. I kind of get confused by the prefix `Unresolved`. Normally we will do some validation check to make it a "resolved" identifier. But according to the implementation, we just expand the path. It dons't sound get resolved yet in my opinion. 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services
[GitHub] [flink] KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects
KurtYoung commented on a change in pull request #9971: [FLINK-14490][table] Add methods for interacting with temporary objects URL: https://github.com/apache/flink/pull/9971#discussion_r339394157 ## File path: flink-table/flink-table-planner-blink/src/main/scala/org/apache/flink/table/planner/calcite/FlinkPlannerImpl.scala ## @@ -179,15 +154,7 @@ class FlinkPlannerImpl( schemaPath: util.List[String], viewPath: util.List[String]): RelRoot = { - val parser: SqlParser = SqlParser.create(queryString, parserConfig) - var sqlNode: SqlNode = null - try { -sqlNode = parser.parseQuery - } - catch { -case e: CSqlParseException => - throw new SqlParserException(s"SQL parse failed. ${e.getMessage}", e) - } + val sqlNode: SqlNode = parser.parse(queryString) Review comment: Is it intended to re-use parser here? I noticed in `PlannerBase::parser` you pointed out that you didn't want to reuse parser since config might changed. 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services