Changeset: 05cf63e8be73 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/05cf63e8be73
Added Files:
sql/jdbc/tests/Tests/OnClientDownloadData.sql
sql/jdbc/tests/Tests/OnClientUploadData.sql
Modified Files:
sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py
Branch: Jan2022
Log Message:
Add JdbcClient tests for new COPY ... ON CLIENT functionality to do local
downloads to file and uploads from file
diffs (158 lines):
diff --git a/sql/jdbc/tests/Tests/OnClientDownloadData.sql
b/sql/jdbc/tests/Tests/OnClientDownloadData.sql
new file mode 100644
--- /dev/null
+++ b/sql/jdbc/tests/Tests/OnClientDownloadData.sql
@@ -0,0 +1,36 @@
+-- test ON CLIENT data exports with different delimiters
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.dsv' ON
CLIENT;
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.csv' ON
CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.tsv' ON
CLIENT USING DELIMITERS E'\t' , E'\n' , '"' NULL AS '';
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.psv' ON
CLIENT USING DELIMITERS '|' , E'\n' , '"' NULL AS '';
+
+-- and compressed exports (only .gz is supported)
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.csv.gz' ON
CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+
+
+-- test error handling
+COPY SELECT * FROM sys.tables ORDER BY id INTO '' ON CLIENT USING DELIMITERS
',' , E'\n' , '"' NULL AS '';
+-- Error [22000] Missing file name
+COPY SELECT * FROM sys.tables ORDER BY id INTO '.' ON CLIENT USING DELIMITERS
',' , E'\n' , '"' NULL AS '';
+-- Error [22000] File already exists: /home/dinther/csvfiles
+COPY SELECT * FROM sys.tables ORDER BY id INTO '..' ON CLIENT USING DELIMITERS
',' , E'\n' , '"' NULL AS '';
+-- Error [22000] File is not in download directory: /home/dinther/csvfiles
+COPY SELECT * FROM sys.tables ORDER BY id INTO '../b' ON CLIENT USING
DELIMITERS ',' , E'\n' , '"' NULL AS '';
+-- Error [22000] File is not in download directory: /home/dinther/csvfiles
+COPY SELECT * FROM sys.tables ORDER BY id INTO
'/home/Doesnotexist/sys_tables_by_id.dsv' ON CLIENT;
+-- Error [22000] File is not in download directory: /home/dinther/csvfiles
+
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.dsv' ON
CLIENT;
+-- Error [22000] File already exists:
/home/dinther/csvfiles/sys_tables_by_id.dsv
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.csv.gz' ON
CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+-- Error [22000] File already exists:
/home/dinther/csvfiles/sys_tables_by_id.csv.gz
+
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.csv.bz2' ON
CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+-- Error [22000] Requested compression .bz2 is not supported. Use .gz instead.
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.csv.lz4' ON
CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+-- Error [22000] Requested compression .lz4 is not supported. Use .gz instead.
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.csv.xz' ON
CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+-- Error [22000] Requested compression .xz is not supported. Use .gz instead.
+COPY SELECT * FROM sys.tables ORDER BY id INTO 'sys_tables_by_id.csv.zip' ON
CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+-- Error [22000] Requested compression .zip is not supported. Use .gz instead.
+
diff --git a/sql/jdbc/tests/Tests/OnClientUploadData.sql
b/sql/jdbc/tests/Tests/OnClientUploadData.sql
new file mode 100644
--- /dev/null
+++ b/sql/jdbc/tests/Tests/OnClientUploadData.sql
@@ -0,0 +1,41 @@
+DROP TABLE IF EXISTS importedFileData;
+CREATE TABLE importedFileData AS SELECT * FROM sys.tables WITH NO DATA;
+
+COPY INTO importedFileData FROM 'sys_tables_by_id.dsv' ON CLIENT USING
DELIMITERS '|' , E'\n' , '"' NULL AS '';
+SELECT COUNT(*) > 0 FROM importedFileData;
+TRUNCATE importedFileData;
+
+COPY INTO importedFileData FROM 'sys_tables_by_id.csv' ON CLIENT USING
DELIMITERS ',' , E'\n' , '"' NULL AS '';
+SELECT COUNT(*) > 0 FROM importedFileData;
+TRUNCATE importedFileData;
+
+COPY 20 OFFSET 5 RECORDS INTO importedFileData FROM 'sys_tables_by_id.csv' ON
CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+SELECT COUNT(*) > 0 FROM importedFileData;
+TRUNCATE importedFileData;
+
+COPY INTO importedFileData FROM 'sys_tables_by_id.tsv' ON CLIENT USING
DELIMITERS E'\t' , E'\n' , '"' NULL AS '';
+SELECT COUNT(*) > 0 FROM importedFileData;
+TRUNCATE importedFileData;
+
+COPY INTO importedFileData FROM 'sys_tables_by_id.psv' ON CLIENT USING
DELIMITERS '|' , E'\n' , '"' NULL AS '';
+SELECT COUNT(*) > 0 FROM importedFileData;
+TRUNCATE importedFileData;
+
+-- compressed .gz imports
+COPY INTO importedFileData FROM 'sys_tables_by_id.csv.gz' ON CLIENT USING
DELIMITERS ',' , E'\n' , '"' NULL AS '';
+SELECT COUNT(*) > 0 FROM importedFileData;
+TRUNCATE importedFileData;
+
+COPY 80 OFFSET 5 RECORDS INTO importedFileData FROM 'sys_tables_by_id.csv.gz'
ON CLIENT USING DELIMITERS ',' , E'\n' , '"' NULL AS '';
+SELECT COUNT(*) > 0 FROM importedFileData;
+TRUNCATE importedFileData;
+
+
+-- other compression formats are NOT supported
+COPY INTO importedFileData FROM 'sys_tables_by_id.csv.bz2' ON CLIENT USING
DELIMITERS ',' , E'\n' , '"' NULL AS '';
+COPY INTO importedFileData FROM 'sys_tables_by_id.csv.lz4' ON CLIENT USING
DELIMITERS ',' , E'\n' , '"' NULL AS '';
+COPY INTO importedFileData FROM 'sys_tables_by_id.csv.xz' ON CLIENT USING
DELIMITERS ',' , E'\n' , '"' NULL AS '';
+COPY INTO importedFileData FROM 'sys_tables_by_id.csv.zip' ON CLIENT USING
DELIMITERS ',' , E'\n' , '"' NULL AS '';
+
+DROP TABLE IF EXISTS importedFileData;
+
diff --git a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py
b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py
--- a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py
+++ b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py
@@ -1,5 +1,4 @@
-import os
-import sys
+import os, sys
from subprocess import run, PIPE, CalledProcessError
HOST=os.getenv('HOST')
@@ -15,34 +14,60 @@ PASSWORD='monetdb'
if __name__ == '__main__':
with open(os.path.join('.monetdb'), 'w') as f:
f.write('\n'.join(['user=monetdb', 'password=monetdb']))
+
cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '--help']
try:
p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
except CalledProcessError as e:
raise SystemExit(e.stderr)
+
cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-f',
os.path.join(TSTSRCBASE, TSTDIR, 'Tests/JdbcClient_create_tables.sql')]
try:
p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
except CalledProcessError as e:
print(e.stderr, file=sys.stderr)
raise SystemExit('ERROR: failed to create tables!')
+
cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-f',
os.path.join(TSTSRCBASE, TSTDIR, 'Tests/JdbcClient_inserts_selects.sql')]
try:
p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
except CalledProcessError as e:
print(e.stderr, file=sys.stderr)
raise SystemExit('ERROR: failed to insert!')
+
cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-D']
try:
p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
except CalledProcessError as e:
raise SystemExit(e.stderr)
+
cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-f',
os.path.join(TSTSRCBASE, TSTDIR, 'Tests/JdbcClient_drop_tables.sql')]
try:
p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
except CalledProcessError as e:
raise SystemExit(e.stderr)
+# test the ON CLIENT download/export functionality via JdbcClient with
--csvdir argument (to enable the ON CLIENT functionality)
+ cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB,
'--csvdir', os.path.join(TSTSRCBASE, TSTDIR, 'Tests'), '-f',
os.path.join(TSTSRCBASE, TSTDIR, 'Tests/OnClientDownloadData.sql')]
+ try:
+ p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
+ except CalledProcessError as e:
+ raise SystemExit(e.stderr)
+
+# test the ON CLIENT upload/import functionality via JdbcClient with --csvdir
argument (to enable the ON CLIENT functionality)
+ cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB,
'--csvdir', os.path.join(TSTSRCBASE, TSTDIR, 'Tests'), '-f',
os.path.join(TSTSRCBASE, TSTDIR, 'Tests/OnClientUploadData.sql')]
+ try:
+ p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
+ except CalledProcessError as e:
+ raise SystemExit(e.stderr)
+
+# cleanup created data export files from Tests/DownloadData.sql
+ cmd = ['rm', '-f', os.path.join(TSTSRCBASE, TSTDIR,
'Tests/sys_tables_by_id.*')]
+ try:
+ p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8')
+ except CalledProcessError as e:
+ raise SystemExit(e.stderr)
+
#set -e
#
#cat << EOF > .monetdb
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list