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

Reply via email to