You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2022/05/30 17:37:45 UTC

[ignite-3] branch ignite-14972 updated: wip ClientAsyncResultSet

This is an automated email from the ASF dual-hosted git repository.

ptupitsyn pushed a commit to branch ignite-14972
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/ignite-14972 by this push:
     new 9dac75c0d wip ClientAsyncResultSet
9dac75c0d is described below

commit 9dac75c0da5b19c4d280e250b4a8b04f9ca5f2c8
Author: Pavel Tupitsyn <pt...@apache.org>
AuthorDate: Mon May 30 20:37:38 2022 +0300

    wip ClientAsyncResultSet
---
 .../requests/sql/ClientSqlExecuteRequest.java      |  1 +
 .../internal/client/sql/ClientAsyncResultSet.java  | 81 ++++++++++++++++++++--
 .../ignite/internal/client/sql/ClientSession.java  |  7 +-
 3 files changed, 82 insertions(+), 7 deletions(-)

diff --git a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlExecuteRequest.java b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlExecuteRequest.java
index 58ec320be..b574777f5 100644
--- a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlExecuteRequest.java
+++ b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/requests/sql/ClientSqlExecuteRequest.java
@@ -72,6 +72,7 @@ public class ClientSqlExecuteRequest {
             out.packBoolean(asyncResultSet.hasRowSet());
             out.packBoolean(asyncResultSet.hasMorePages());
             out.packBoolean(asyncResultSet.wasApplied());
+            out.packLong(asyncResultSet.affectedRows());
 
             // Pack metadata.
             // TODO: IGNITE-17052
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/client/sql/ClientAsyncResultSet.java b/modules/client/src/main/java/org/apache/ignite/internal/client/sql/ClientAsyncResultSet.java
index 1c706637c..8a1f63e75 100644
--- a/modules/client/src/main/java/org/apache/ignite/internal/client/sql/ClientAsyncResultSet.java
+++ b/modules/client/src/main/java/org/apache/ignite/internal/client/sql/ClientAsyncResultSet.java
@@ -17,7 +17,9 @@
 
 package org.apache.ignite.internal.client.sql;
 
+import java.util.List;
 import java.util.concurrent.CompletionStage;
+import org.apache.ignite.sql.NoRowSetExpectedException;
 import org.apache.ignite.sql.ResultSetMetadata;
 import org.apache.ignite.sql.SqlRow;
 import org.apache.ignite.sql.async.AsyncResultSet;
@@ -27,49 +29,116 @@ import org.jetbrains.annotations.Nullable;
  * Client async result set.
  */
 class ClientAsyncResultSet implements AsyncResultSet {
+    /** */
+    private final Long resourceId;
+
+    /** */
+    private final boolean hasRowSet;
+
+    /** */
+    private final boolean hasMorePages;
+
+    /** */
+    private final boolean wasApplied;
+
+    /** */
+    private final long affectedRows;
+
+    /** */
+    private final List<SqlRow> rows;
+
+    /**
+     * Constructor.
+     *
+     * @param resourceId Resource id.
+     * @param hasRowSet Row set flag.
+     * @param hasMorePages More pages flag.
+     * @param wasApplied Applied flag.
+     * @param rows Rows.
+     */
+    @SuppressWarnings("AssignmentOrReturnOfFieldWithMutableType")
+    public ClientAsyncResultSet(
+            Long resourceId,
+            boolean hasRowSet,
+            boolean hasMorePages,
+            boolean wasApplied,
+            long affectedRows,
+            @Nullable List<SqlRow> rows) {
+        this.resourceId = resourceId;
+        this.hasRowSet = hasRowSet;
+        this.hasMorePages = hasMorePages;
+        this.wasApplied = wasApplied;
+        this.affectedRows = affectedRows;
+        this.rows = rows;
+    }
+
+    /** {@inheritDoc} */
     @Override
     public @Nullable ResultSetMetadata metadata() {
         // TODO: IGNITE-17052
         throw new UnsupportedOperationException("Not implemented yet.");
     }
 
+    /** {@inheritDoc} */
     @Override
     public boolean hasRowSet() {
-        return false;
+        return hasRowSet;
     }
 
+    /** {@inheritDoc} */
     @Override
     public long affectedRows() {
-        return 0;
+        return affectedRows;
     }
 
+    /** {@inheritDoc} */
     @Override
     public boolean wasApplied() {
-        return false;
+        return wasApplied;
     }
 
+    /** {@inheritDoc} */
+    @SuppressWarnings("AssignmentOrReturnOfFieldWithMutableType")
     @Override
     public Iterable<SqlRow> currentPage() {
-        return null;
+        requireResultSet();
+
+        return rows;
     }
 
+    /** {@inheritDoc} */
     @Override
     public int currentPageSize() {
-        return 0;
+        requireResultSet();
+
+        return rows.size();
     }
 
+    /** {@inheritDoc} */
     @Override
     public CompletionStage<? extends AsyncResultSet> fetchNextPage() {
+        requireResultSet();
+
+        // TODO
         return null;
     }
 
+    /** {@inheritDoc} */
     @Override
     public boolean hasMorePages() {
-        return false;
+        return hasMorePages;
     }
 
+    /** {@inheritDoc} */
     @Override
     public CompletionStage<Void> closeAsync() {
+        // TODO
         return null;
     }
+
+    private void requireResultSet() {
+        if (!hasRowSet()) {
+            throw new NoRowSetExpectedException("Query has no result set");
+        }
+    }
 }
diff --git a/modules/client/src/main/java/org/apache/ignite/internal/client/sql/ClientSession.java b/modules/client/src/main/java/org/apache/ignite/internal/client/sql/ClientSession.java
index d505fd000..f2f67b93d 100644
--- a/modules/client/src/main/java/org/apache/ignite/internal/client/sql/ClientSession.java
+++ b/modules/client/src/main/java/org/apache/ignite/internal/client/sql/ClientSession.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.client.sql;
 import static org.apache.ignite.internal.client.ClientUtils.sync;
 import static org.apache.ignite.internal.client.table.ClientTable.writeTx;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
@@ -31,6 +32,7 @@ import org.apache.ignite.internal.client.proto.ClientOp;
 import org.apache.ignite.sql.BatchedArguments;
 import org.apache.ignite.sql.ResultSet;
 import org.apache.ignite.sql.Session;
+import org.apache.ignite.sql.SqlRow;
 import org.apache.ignite.sql.Statement;
 import org.apache.ignite.sql.async.AsyncResultSet;
 import org.apache.ignite.sql.reactive.ReactiveResultSet;
@@ -148,14 +150,17 @@ public class ClientSession implements Session {
             boolean hasRowSet = r.in().unpackBoolean();
             boolean hasMorePages = r.in().unpackBoolean();
             boolean wasApplied = r.in().unpackBoolean();
+            long affectedRows = r.in().unpackLong();
 
             r.in().unpackArrayHeader(); // TODO: Metadata IGNITE-17052.
 
+            List<SqlRow> rows = null;
+
             if (hasRowSet) {
                 // TODO: Unpack rows.
             }
 
-            return new ClientAsyncResultSet(resourceId, hasRowSet, hasMorePages, wasApplied);
+            return new ClientAsyncResultSet(resourceId, hasRowSet, hasMorePages, wasApplied, affectedRows, rows);
         });
     }