You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ignite.apache.org by GitBox <gi...@apache.org> on 2021/09/09 15:13:02 UTC

[GitHub] [ignite-3] ptupitsyn commented on a change in pull request #326: IGNITE-15212 Add SQL API

ptupitsyn commented on a change in pull request #326:
URL: https://github.com/apache/ignite-3/pull/326#discussion_r705441041



##########
File path: modules/api/src/main/java/org/apache/ignite/query/sql/async/AsyncSqlMultiResultSet.java
##########
@@ -0,0 +1,47 @@
+/*
+ * 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.ignite.query.sql.async;
+
+import java.util.concurrent.CompletionStage;
+
+/**
+ * Asynchronous multi-statement result set.
+ */
+public interface AsyncSqlMultiResultSet extends AsyncSqlResultSet {
+    /**
+     * Returns current statement result index.
+     *
+     * @return Statement result index.
+     */
+    int currentResult();
+
+    /**
+     * Skip current statement result and fetch first page of the next statement.
+     *
+     * @return Operation future.
+     */
+    CompletionStage<AsyncSqlMultiResultSet> skipResult();

Review comment:
       ```suggestion
       CompletionStage<AsyncSqlMultiResultSet> skipResultAsync();
   ```
   
   Should we add `Async` suffix to all async methods?

##########
File path: modules/api/src/main/java/org/apache/ignite/query/sql/SqlTx.java
##########
@@ -0,0 +1,42 @@
+/*
+ * 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.ignite.query.sql;
+
+import org.apache.ignite.tx.Transaction;
+
+/**
+ * Transactional SQL session projection.
+ */
+public interface SqlTx extends SqlSession {
+    /**
+     * Commits current transaction.
+     */
+    void commit();

Review comment:
       Can we make it async?

##########
File path: modules/api/src/main/java/org/apache/ignite/query/sql/IgniteSql.java
##########
@@ -0,0 +1,67 @@
+/*
+ * 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.ignite.query.sql;
+
+import java.util.UUID;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Ignite SQL query facade.
+ */
+public interface IgniteSql {
+    /**
+     * Creates SQL session.
+     *
+     * @return Session.
+     */
+    SqlSession session();
+
+    /**
+     * Creates statement.
+     *
+     * @param sql SQL query template.
+     * @return Prepared statement.
+     * @throws SQLException If parsing failed.
+     */
+    SqlStatement prepare(@NotNull String sql);
+
+    /**
+     * Kills query by its' id.
+     *
+     * @param queryID Query id.
+     */
+    void killQuery(UUID queryID);
+
+    /**
+     * Returns statistics facade for table statistics management.
+     * <p>
+     * Table statistics are used by SQL engine for SQL queries planning.
+     *
+     * @return Statistics facade.
+     */
+    // TODO: Do we need this here or move to Table facade?
+    IgniteTableStatistics statistics();
+
+    //TODO: Custom function registration. Move to session?
+    void registerUserFunction(Class type, String... methodNames); //TODO: Get function details from method annotations.
+
+    void registerUserFunction(Class type);
+
+    void unregistedUserFunction(String functionName);

Review comment:
       ```suggestion
       void unregisterUserFunction(String functionName);
   ```

##########
File path: modules/api/src/main/java/org/apache/ignite/query/sql/SqlSession.java
##########
@@ -0,0 +1,113 @@
+/*
+ * 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.ignite.query.sql;
+
+import java.util.concurrent.TimeUnit;
+import org.apache.ignite.query.sql.async.AsyncSqlSession;
+import org.apache.ignite.query.sql.reactive.ReactiveSqlSession;
+import org.apache.ignite.tx.Transaction;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * SQL Session provides methods for query execution.
+ */
+public interface SqlSession extends AsyncSqlSession, ReactiveSqlSession {
+    /**
+     * Creates transactional SQL session projection with given transaction.
+     *
+     * @param tx Transaction.
+     * @return Transactional projection for the session.
+     */
+    SqlTx withTransaction(@NotNull Transaction tx);
+
+    /**
+     * Creates transactional SQL session projection with a new transaction.
+     *
+     * @return Transactional projection for the session.
+     */
+    SqlTx withNewTransaction();
+
+    /**
+     * Sets default query timeout.
+     *
+     * @param timeout Query timeout value.
+     * @param timeUnit Timeunit.
+     */
+    void defaultTimeout(int timeout, TimeUnit timeUnit);
+
+    /**
+     * Gets default query timeout.
+     *
+     * @param timeUnit Timeunit.
+     * @return Default query timeout.
+     */
+    long defaultTimeout(TimeUnit timeUnit);
+
+    /**
+     * Sets default query schema.
+     *
+     * @param schema Default schema.
+     */
+    void defaultSchema(@NotNull String schema);
+
+    /**
+     * Gets default query schema.
+     *
+     * @return Default query schema.
+     */
+    String defaultSchema();
+
+    /**
+     * Executes single SQL query.
+     *
+     * @param query SQL query template.
+     * @param arguments Arguments for the template (optional).
+     * @return SQL query results set.
+     * @throws SQLException If failed.
+     */
+    SqlResultSet execute(@NotNull String query, Object... arguments);

Review comment:
       Should we make all `execute` methods async?




-- 
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: notifications-unsubscribe@ignite.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org