This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new 1c843915c docs: demonstrate `WITH_MAX_MSG_SIZE` (#2089)
1c843915c is described below
commit 1c843915c5af7e80d1980059ec2345db075d0898
Author: David Li <[email protected]>
AuthorDate: Wed Aug 21 08:35:43 2024 +0900
docs: demonstrate `WITH_MAX_MSG_SIZE` (#2089)
Fixes #2078.
---
docs/source/python/recipe/flight_sql.rst | 5 ++
.../python/recipe/flightsql_sqlite_max_msg_size.py | 74 ++++++++++++++++++++++
2 files changed, 79 insertions(+)
diff --git a/docs/source/python/recipe/flight_sql.rst
b/docs/source/python/recipe/flight_sql.rst
index c3bffb133..cef2ccecb 100644
--- a/docs/source/python/recipe/flight_sql.rst
+++ b/docs/source/python/recipe/flight_sql.rst
@@ -56,3 +56,8 @@ Set timeouts and other options
------------------------------
.. recipe:: flightsql_sqlite_options.py
+
+Set the max gRPC message size
+-----------------------------
+
+.. recipe:: flightsql_sqlite_max_msg_size.py
diff --git a/docs/source/python/recipe/flightsql_sqlite_max_msg_size.py
b/docs/source/python/recipe/flightsql_sqlite_max_msg_size.py
new file mode 100644
index 000000000..1a77460d5
--- /dev/null
+++ b/docs/source/python/recipe/flightsql_sqlite_max_msg_size.py
@@ -0,0 +1,74 @@
+# 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.
+
+# RECIPE STARTS HERE
+
+#: By default, the Flight SQL driver limits the size of incoming/outgoing
+#: messages. You might see an error like this if those limits are exceeded::
+#:
+#: INTERNAL: [FlightSQL] grpc: received message larger than max
+#:
+#: These limits can be adjusted to avoid this.
+
+import os
+
+import adbc_driver_flightsql.dbapi
+from adbc_driver_flightsql import DatabaseOptions
+
+uri = os.environ["ADBC_SQLITE_FLIGHTSQL_URI"]
+
+#: This query generates about 16 MiB per batch, which will trip the default
+#: limit.
+
+query = """
+WITH RECURSIVE generate_series(value) AS (
+ SELECT 1
+ UNION ALL
+ SELECT value + 1 FROM generate_series
+ WHERE value + 1 <= 2048
+)
+SELECT printf('%.*c', 16384, 'x') FROM generate_series
+"""
+
+#: When we execute the query, we'll get an error.
+
+conn = adbc_driver_flightsql.dbapi.connect(uri)
+with conn.cursor() as cur:
+ cur.execute(query)
+
+ try:
+ cur.fetchallarrow()
+ except adbc_driver_flightsql.dbapi.InternalError:
+ # This exception is expected.
+ pass
+ else:
+ assert False, "Did not raise expected exception"
+
+conn.close()
+
+#: We can instead change the limit when connecting.
+
+conn = adbc_driver_flightsql.dbapi.connect(
+ uri,
+ db_kwargs={DatabaseOptions.WITH_MAX_MSG_SIZE.value: "2147483647"},
+)
+with conn.cursor() as cur:
+ cur.execute(query)
+
+ assert len(cur.fetchallarrow()) == 2048
+
+conn.close()