Skip to content

Instantly share code, notes, and snippets.

@lovasoa
Created February 5, 2018 00:59
Show Gist options
  • Save lovasoa/5910c07e30990add4aafb6f16f036c92 to your computer and use it in GitHub Desktop.
Save lovasoa/5910c07e30990add4aafb6f16f036c92 to your computer and use it in GitHub Desktop.
#!/bin/env python3
from pathlib import Path
import subprocess
import csv
import re
linterpath = Path("/mnt/c/Program Files (x86)/Linter/bin/")
inl = linterpath / "inl.exe"
loarel = linterpath / "loarel.exe"
# a) создадут таблицы через утилиту INL;
sqlstr = "CREATE OR REPLACE TABLE people (id INTEGER PRIMARY KEY, name VARCHAR(1024));"
db_opts = ["-u","SYSTEM/MANAGER","-n","Demo"]
subprocess.run([str(inl)] + db_opts + ["-t","-q"], input=sqlstr, universal_newlines=True)
# b) сгенерируют скриптами данные CSV и ...
with open('people.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile, quoting=csv.QUOTE_NONNUMERIC, quotechar="'")
for i in range(10): writer.writerow([i, 'User {}'.format(i)])
# загрузят их через LOAREL;
res = subprocess.run(
[str(loarel)]+db_opts+["-f","people.csv","-t",'PEOPLE',"-r",",","-rt","'",'-rr'],
stdout=subprocess.DEVNULL
)
# c) выполнят запросы SQL;
res = subprocess.run(
[str(inl)] + db_opts + ["-t","-q"],
input=b"SELECT name from people WHERE id>5;",
stdout=subprocess.PIPE
)
users = re.findall(b'\|(User \d+)', res.stdout)
# d) сравнят полученный результат с ожидаемым.
expected_users = [b'User 6', b'User 7', b'User 8', b'User 9']
assert(users==expected_users)
print("OK")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment