execsql2 2.1.2__py3-none-any.whl → 2.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. execsql/cli/__init__.py +436 -0
  2. execsql/cli/dsn.py +86 -0
  3. execsql/cli/help.py +140 -0
  4. execsql/{cli.py → cli/run.py} +14 -589
  5. execsql/config.py +13 -1
  6. execsql/db/access.py +16 -12
  7. execsql/db/base.py +158 -90
  8. execsql/db/dsn.py +6 -5
  9. execsql/db/duckdb.py +2 -2
  10. execsql/db/firebird.py +23 -19
  11. execsql/db/mysql.py +8 -7
  12. execsql/db/oracle.py +11 -11
  13. execsql/db/postgres.py +28 -16
  14. execsql/db/sqlite.py +12 -11
  15. execsql/db/sqlserver.py +5 -3
  16. execsql/exceptions.py +7 -7
  17. execsql/exporters/base.py +6 -1
  18. execsql/exporters/delimited.py +44 -35
  19. execsql/exporters/duckdb.py +2 -2
  20. execsql/exporters/feather.py +6 -6
  21. execsql/exporters/html.py +83 -69
  22. execsql/exporters/json.py +50 -42
  23. execsql/exporters/latex.py +33 -27
  24. execsql/exporters/ods.py +4 -4
  25. execsql/exporters/parquet.py +2 -2
  26. execsql/exporters/pretty.py +11 -9
  27. execsql/exporters/raw.py +17 -13
  28. execsql/exporters/sqlite.py +2 -2
  29. execsql/exporters/templates.py +23 -15
  30. execsql/exporters/values.py +22 -20
  31. execsql/exporters/xls.py +4 -4
  32. execsql/exporters/xml.py +28 -13
  33. execsql/importers/base.py +4 -4
  34. execsql/importers/csv.py +6 -6
  35. execsql/importers/feather.py +4 -4
  36. execsql/importers/ods.py +4 -4
  37. execsql/importers/xls.py +4 -4
  38. execsql/metacommands/__init__.py +518 -67
  39. execsql/metacommands/conditions.py +101 -27
  40. execsql/metacommands/control.py +8 -4
  41. execsql/metacommands/data.py +6 -6
  42. execsql/metacommands/debug.py +6 -2
  43. execsql/metacommands/io.py +67 -1310
  44. execsql/metacommands/io_export.py +442 -0
  45. execsql/metacommands/io_fileops.py +287 -0
  46. execsql/metacommands/io_import.py +398 -0
  47. execsql/metacommands/io_write.py +248 -0
  48. execsql/metacommands/prompt.py +22 -66
  49. execsql/metacommands/system.py +7 -2
  50. execsql/py.typed +0 -0
  51. execsql/script.py +49 -5
  52. execsql/types.py +20 -20
  53. execsql/utils/fileio.py +15 -8
  54. {execsql2-2.1.2.dist-info → execsql2-2.2.1.dist-info}/METADATA +6 -6
  55. execsql2-2.2.1.dist-info/RECORD +104 -0
  56. execsql2-2.1.2.dist-info/RECORD +0 -96
  57. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/READ_ME.rst +0 -0
  58. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/config_settings.sqlite +0 -0
  59. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
  60. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/execsql.conf +0 -0
  61. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/make_config_db.sql +0 -0
  62. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/md_compare.sql +0 -0
  63. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/md_glossary.sql +0 -0
  64. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/md_upsert.sql +0 -0
  65. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/pg_compare.sql +0 -0
  66. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/pg_glossary.sql +0 -0
  67. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/pg_upsert.sql +0 -0
  68. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/script_template.sql +0 -0
  69. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/ss_compare.sql +0 -0
  70. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/ss_glossary.sql +0 -0
  71. {execsql2-2.1.2.data → execsql2-2.2.1.data}/data/execsql2_extras/ss_upsert.sql +0 -0
  72. {execsql2-2.1.2.dist-info → execsql2-2.2.1.dist-info}/WHEEL +0 -0
  73. {execsql2-2.1.2.dist-info → execsql2-2.2.1.dist-info}/entry_points.txt +0 -0
  74. {execsql2-2.1.2.dist-info → execsql2-2.2.1.dist-info}/licenses/LICENSE.txt +0 -0
  75. {execsql2-2.1.2.dist-info → execsql2-2.2.1.dist-info}/licenses/NOTICE +0 -0
execsql/types.py CHANGED
@@ -88,8 +88,8 @@ class DataType:
88
88
  return data
89
89
  try:
90
90
  i = self.data_type(data)
91
- except Exception:
92
- raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
91
+ except Exception as e:
92
+ raise DataTypeError(self.data_type_name, self._CONV_ERR % data) from e
93
93
  return i
94
94
 
95
95
 
@@ -354,8 +354,8 @@ class DT_Integer(DataType):
354
354
  raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
355
355
  try:
356
356
  i = int(data)
357
- except Exception:
358
- raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
357
+ except Exception as e:
358
+ raise DataTypeError(self.data_type_name, self._CONV_ERR % data) from e
359
359
  if leading_zero_num(data):
360
360
  raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
361
361
  return i
@@ -390,8 +390,8 @@ class DT_Long(DataType):
390
390
  raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
391
391
  try:
392
392
  i = int(data)
393
- except Exception:
394
- raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
393
+ except Exception as e:
394
+ raise DataTypeError(self.data_type_name, self._CONV_ERR % data) from e
395
395
  return i
396
396
 
397
397
 
@@ -428,8 +428,8 @@ class DT_Float(DataType):
428
428
  raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
429
429
  try:
430
430
  i = float(data)
431
- except Exception:
432
- raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
431
+ except Exception as e:
432
+ raise DataTypeError(self.data_type_name, self._CONV_ERR % data) from e
433
433
  return i
434
434
 
435
435
 
@@ -464,8 +464,8 @@ class DT_Decimal(DataType):
464
464
  raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
465
465
  try:
466
466
  dec = Decimal(data)
467
- except Exception:
468
- raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
467
+ except Exception as e:
468
+ raise DataTypeError(self.data_type_name, self._CONV_ERR % data) from e
469
469
  self.set_scale_prec(dec)
470
470
  return dec
471
471
  raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
@@ -493,8 +493,8 @@ class DT_Character(DataType):
493
493
  if not isinstance(data, str):
494
494
  try:
495
495
  data = data_type(data)
496
- except ValueError:
497
- raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
496
+ except ValueError as e:
497
+ raise DataTypeError(self.data_type_name, self._CONV_ERR % data) from e
498
498
  if len(data) > 255:
499
499
  raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
500
500
  return data
@@ -521,8 +521,8 @@ class DT_Varchar(DataType):
521
521
  if isinstance(data, str):
522
522
  try:
523
523
  data = data_type(data)
524
- except ValueError:
525
- raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
524
+ except ValueError as e:
525
+ raise DataTypeError(self.data_type_name, self._CONV_ERR % data) from e
526
526
  if len(data) > 255:
527
527
  raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
528
528
  return data
@@ -546,8 +546,8 @@ class DT_Text(DataType):
546
546
  if not isinstance(data, str):
547
547
  try:
548
548
  data = data_type(data)
549
- except ValueError:
550
- raise DataTypeError(self.data_type_name, self._CONV_ERR % data)
549
+ except ValueError as e:
550
+ raise DataTypeError(self.data_type_name, self._CONV_ERR % data) from e
551
551
  return data
552
552
 
553
553
 
@@ -605,12 +605,12 @@ class DbType:
605
605
  # A convenience function to simplify access to data type names.
606
606
  try:
607
607
  return self.dialect[data_type][0]
608
- except Exception:
608
+ except Exception as e:
609
609
  raise DbTypeError(
610
610
  self.dbms_id,
611
611
  data_type,
612
612
  f"{self.dbms_id} DBMS type has no specification for data type {data_type.data_type_name}",
613
- )
613
+ ) from e
614
614
 
615
615
  def quoted(self, dbms_object: str) -> str:
616
616
  if re.search(r"\W", dbms_object):
@@ -638,12 +638,12 @@ class DbType:
638
638
  data_type = self.spec_type(data_type)
639
639
  try:
640
640
  dts = self.dialect[data_type]
641
- except Exception:
641
+ except Exception as e:
642
642
  raise DbTypeError(
643
643
  self.dbms_id,
644
644
  data_type,
645
645
  f"{self.dbms_id} DBMS type has no specification for data type {data_type.data_type_name}",
646
- )
646
+ ) from e
647
647
  if max_len and max_len > 0 and dts[1]:
648
648
  spec = f"{self.quoted(column_name)} {dts[0]}({max_len})"
649
649
  elif data_type.precspec and precision and scale:
execsql/utils/fileio.py CHANGED
@@ -49,8 +49,8 @@ def make_export_dirs(outfile: str) -> None:
49
49
  except OSError as e:
50
50
  if e.errno != errno.EEXIST:
51
51
  raise ErrInfo("exception", exception_msg=emsg) from e
52
- except Exception:
53
- raise ErrInfo("exception", exception_msg=emsg)
52
+ except Exception as e:
53
+ raise ErrInfo("exception", exception_msg=emsg) from e
54
54
 
55
55
 
56
56
  def check_dir(filename: str) -> None:
@@ -265,14 +265,11 @@ class FileWriter(multiprocessing.Process):
265
265
  # is a command and the second is a tuple of arguments for the function indicated
266
266
  # by that command.
267
267
  while self.active:
268
- command = None
269
- argtuple = None
270
268
  try:
271
- command, argtuple = self.input_queue.get_nowait()
269
+ command, argtuple = self.input_queue.get(timeout=0.1)
272
270
  except queue.Empty:
273
- pass
274
- if command is not None:
275
- self.execvec[command](*argtuple)
271
+ continue
272
+ self.execvec[command](*argtuple)
276
273
 
277
274
 
278
275
  # Subprocess objects for asynchronous writing to text files.
@@ -539,6 +536,16 @@ class Logger:
539
536
  wmsg = f"status\t{self.run_id}\t{self.seq_no}\t{self._ts()}\twarning\t{msg or ''}\n"
540
537
  self.writelog(wmsg)
541
538
 
539
+ def log_sql_query(self, sql: str, db_name: str, line_no: int | None = None) -> None:
540
+ """Log an executed SQL statement for audit purposes."""
541
+ cleaned = sql.replace("\n", " ").replace("\t", " ")
542
+ if len(cleaned) > 2000:
543
+ cleaned = cleaned[:2000] + "..."
544
+ self.seq_no += 1
545
+ lno = line_no if line_no is not None else 0
546
+ wmsg = f"sql\t{self.run_id}\t{self.seq_no}\t{self._ts()}\t{db_name}\t{lno}\t{cleaned}\n"
547
+ self.writelog(wmsg)
548
+
542
549
  def log_user_msg(self, msg: str | None) -> None:
543
550
  msg = None if not msg else msg.replace("\n", "")
544
551
  if msg != "":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: execsql2
3
- Version: 2.1.2
3
+ Version: 2.2.1
4
4
  Summary: Runs a SQL script against a PostgreSQL, SQLite, MariaDB/MySQL, DuckDB, Firebird, MS-Access, MS-SQL-Server, or Oracle database, or an ODBC DSN. Provides metacommands to import and export data, copy data between databases, conditionally execute SQL and metacommands, and dynamically alter SQL and metacommands with substitution variables.
5
5
  Project-URL: Repository, https://github.com/geocoug/execsql
6
6
  Project-URL: Issues, https://github.com/geocoug/execsql/issues
@@ -98,11 +98,11 @@ Provides-Extra: postgres
98
98
  Requires-Dist: psycopg2-binary; extra == 'postgres'
99
99
  Description-Content-Type: text/markdown
100
100
 
101
- > [!WARNING]
102
- > **This project is in active development and is not yet stable.**
103
- > The codebase is being modernized from the upstream monolith into a modular package.
104
- > APIs, CLI behavior, and configuration options may change without notice.
105
- > Not recommended for production use. For the stable upstream release, see [execsql](https://execsql.readthedocs.io/).
101
+ > [!NOTE]
102
+ > **This is a maintained fork of [execsql](https://execsql.readthedocs.io/).**
103
+ > The original monolith has been fully refactored into a modular package with 2,000+ tests.
104
+ > The CLI and configuration are backwards-compatible with upstream v1.130.1.
105
+ > Report issues at [github.com/geocoug/execsql/issues](https://github.com/geocoug/execsql/issues).
106
106
 
107
107
  <div align="center">
108
108
 
@@ -0,0 +1,104 @@
1
+ execsql/__init__.py,sha256=BIny4bL8uHuSl3gXPqEkIB2FtcexlARjR7IYPwtD9bM,486
2
+ execsql/__main__.py,sha256=HdbK-SAhyUmfB6xINY5AzxdMSxGzWSGEG_2dv42Jn64,315
3
+ execsql/config.py,sha256=X8MuO3FhDtSfKwdVDdNrHd-htiia8Jty3TSTvMLTHBk,34048
4
+ execsql/constants.py,sha256=up8I1sfFg1KaQ-ZgwufDOYbupMgTkPVpHzAdWpi5-BQ,12628
5
+ execsql/exceptions.py,sha256=SH71rOUBvg_ITvfl6xgRsxlJzLLYXWpD4ntFYjmqDlE,8039
6
+ execsql/format.py,sha256=4uNF2MSDBYwZuK9k4wywcUZFU4D_9bMokseOyaCjmGU,11911
7
+ execsql/models.py,sha256=INArNIF_lds_Jv3aXXXFO8Cf1W7G_IjsZDLsVnDlSCs,12427
8
+ execsql/parser.py,sha256=kue_NonM_VLAnfYDqJ_7mXJSfKsTLFLJBOj9pRWACJ0,12689
9
+ execsql/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ execsql/script.py,sha256=weMYQFMR_Au9Xz32YYxOEqdD3SLj_BMRmfa_Me-Q81M,48418
11
+ execsql/state.py,sha256=INT7eXwO8_drZrngHqq2A4hN8Hrh-JFXELUVuqX4wgY,12385
12
+ execsql/types.py,sha256=N4DiNYrs2BuI_IIIdepo-VHcPr6hbQjavpYRGzvXqoU,29307
13
+ execsql/cli/__init__.py,sha256=rxQy5MktCksykRm9u7kqxqbTo-Rx0MCIHd3wqWufszY,14667
14
+ execsql/cli/dsn.py,sha256=_mDilt_dhjt1uwN1AC6Mbl9zmKl7pdaZA7eMgR7ZpeE,2759
15
+ execsql/cli/help.py,sha256=zSEn66LDnNEnkqgA6CEQWraIzgiwGBJSiaflRuCySXQ,5331
16
+ execsql/cli/run.py,sha256=Ex3B_gGEGgQlkBEiYz5O3qQBK4IiCj7VKTO6Bu8zny0,22469
17
+ execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
18
+ execsql/db/access.py,sha256=rl9z-w5SYTv9FAhAGTU7TY_P2m9k5fv6_sDHNX5QFe0,16228
19
+ execsql/db/base.py,sha256=MqggHYPaV8aNuOhsS9jzckvIc9TJqts9yhHvKS5Usug,26612
20
+ execsql/db/dsn.py,sha256=R-cLMzitDsVVz099Lp3ls2t6uGl9p2ivUimORZ6s0gw,5012
21
+ execsql/db/duckdb.py,sha256=lalqeaPN0Z3amVwjc3pJqXvwOEN8v3sIF1Q2kr0zLPI,2733
22
+ execsql/db/factory.py,sha256=O8YDNRWBFNcsfN6pnlFb3vuTH3rklfzlpQbAFcMnpGg,4150
23
+ execsql/db/firebird.py,sha256=dmAa_ORCwdY5F0nX57NvXS55rQ9dPUTpBfHkXm9yl8M,7770
24
+ execsql/db/mysql.py,sha256=W7BchogZ7VyqFnCYKvyPQACezaI7h8LPk8QvuqaVnCQ,12816
25
+ execsql/db/oracle.py,sha256=BZhSkXG_1RfC5dSktXSOr62XJfRSjlRYBCbnvpgLz-8,9362
26
+ execsql/db/postgres.py,sha256=1px6neapeB8DQqYsaRf_YF8sAtLLZlHxlWPBQcZ-xJw,19309
27
+ execsql/db/sqlite.py,sha256=yphiggqhoX89ClyV3uCwp12IP8UcRYkTLnPqIwOpE9I,9324
28
+ execsql/db/sqlserver.py,sha256=Q9kh2-2HIzfo2CYiwRYrgoOD2yE_VPvMMJNHC9CxU_c,6781
29
+ execsql/exporters/__init__.py,sha256=a679NAJp92e3565fhfqbBIbIT_RdyWQWCJ3-wqJJyYE,525
30
+ execsql/exporters/base.py,sha256=YzMzkCKMDpVxknHSSwZYx1QV9rYmWyAK0o-CSLwnVBM,5864
31
+ execsql/exporters/delimited.py,sha256=9dvygIzmsv71cllaPRtPH_T4LhImEf1d3EOPmjYjUyg,27202
32
+ execsql/exporters/duckdb.py,sha256=bmjiT13y6aNf4EvGFZIzHZb5ceSZPu-V22FlyTXBz5U,2689
33
+ execsql/exporters/feather.py,sha256=jXEwh-_pdeMXf-gy9SO496ovVhgwTDERLmUOgkUJARs,3934
34
+ execsql/exporters/html.py,sha256=bINhyrxu_0IyDJJfkxRV8FT7LYUbtmS3iyaEWbZWA10,8885
35
+ execsql/exporters/json.py,sha256=HNpNF7p20rXApSJHcu3awEDg4mPs6waVy23qCrbfLN0,3947
36
+ execsql/exporters/latex.py,sha256=vD0V3gqBcFYeQ2WazdDeHWYRQGWY4Y3hFdFff4pGxYQ,4283
37
+ execsql/exporters/ods.py,sha256=l9sPCElV2Cn6M3AxK6KZThx5YD5RIHaD7YmOTnJN-7I,17088
38
+ execsql/exporters/parquet.py,sha256=Lkbu3TU9MtBGp2sBFENSsYKrR_i9HwNahVMqbn2HVc8,988
39
+ execsql/exporters/pretty.py,sha256=o37Xiu2_m33VR8tExu-Vpq_E0MIwkhmX-VBE6z0QL68,3184
40
+ execsql/exporters/raw.py,sha256=LpUnaNBqArFNrwM0XROo0vur6QXXhLyvyFVhmDtLZ10,1695
41
+ execsql/exporters/sqlite.py,sha256=oKB7zsVm745Hr8-tBabEiOSbn6NZ9rqzu8eEkkmXsi8,2442
42
+ execsql/exporters/templates.py,sha256=42YFIqxLsdUcbKwR_38pFxfPC4kiLV2jvGvugNf-JUQ,4858
43
+ execsql/exporters/values.py,sha256=I299loqtObmqM6-lgowmQKpVKhoEDAQKSyYgkvCHff4,2282
44
+ execsql/exporters/xls.py,sha256=M4jF1vGYpPEDWF0wvFlJUXtCuqTDrUIjwiYMYOMsY7A,9063
45
+ execsql/exporters/xml.py,sha256=Ji-fbpBN6ikot1E6513pkeU03RY_eACGzU9-Xc4ORes,2447
46
+ execsql/exporters/zip.py,sha256=Ujp4gD3vfqy8Cq2b1iLFhfDdjcGdibawrxnSoNtCjS8,3463
47
+ execsql/gui/__init__.py,sha256=KnLB-8GuRPBZij4W-sihcA9ORRuLDYoa0p2dCeIzYRg,2001
48
+ execsql/gui/base.py,sha256=gbfCqj3nOMkAcn-GNIIAy7RdPFJ0UMbzOxpDpfoEVxk,6042
49
+ execsql/gui/console.py,sha256=Ln9ixVMLlEK5foHi0t2EywrvTiBqWoPEpp8cnof3eIw,14241
50
+ execsql/gui/desktop.py,sha256=zooMA28FWHndy9Aw242wRzchs1QxYwlGGMsWvn4-EKo,42123
51
+ execsql/gui/tui.py,sha256=n5xzwe1jAsU54jj0PpcBmVfnvfycPVOeiLx07-IfVVk,45948
52
+ execsql/importers/__init__.py,sha256=dDsxSVeQYXBvm9yGqN3QswyGbLWTwt08pvUuRJgZhl4,289
53
+ execsql/importers/base.py,sha256=UsQqVj_ETLTuMQrdjxgMaT-HJaln8ZPN8aNHOaXdN9A,4007
54
+ execsql/importers/csv.py,sha256=2M5ubw6LRAxHap7UXS9ZEa0qSAL-KD_d4oFO9twLFFo,4655
55
+ execsql/importers/feather.py,sha256=yvK001uN1EveET0pnS7B4clzCuauYPCS5oB4a_7Agu0,1722
56
+ execsql/importers/ods.py,sha256=amJqKdN2H-LaFMHo0m0tMiHMDjm64pRkfXBDswJU0aA,2733
57
+ execsql/importers/xls.py,sha256=yFPSu_5rmeRjLfBDVMLJ1pDs9_JfUEnVPAsJANngHCM,3565
58
+ execsql/metacommands/__init__.py,sha256=ebmM3aDwfqg2jzxSSLguuPRfxKqYvcAD6jVFjML87kM,77556
59
+ execsql/metacommands/conditions.py,sha256=u-XdeIWj9QMht9hRGhvH0XlB9V09AliAPKDBHRXc02s,24540
60
+ execsql/metacommands/connect.py,sha256=Nsm0D91i3RX-R2rzQQ-Br-gULaI6Uvdn9fqb7DOAVfE,14804
61
+ execsql/metacommands/control.py,sha256=FCIWD-ZivHRZDqMS-2k37iR05HKHsv_7UPh5zJAg4I4,7693
62
+ execsql/metacommands/data.py,sha256=tRQBGTAuW-eJ2tBNWaoZI9OjTyNNyHJISo7gOdL-sm8,11370
63
+ execsql/metacommands/debug.py,sha256=nmfQ2ijUbTQO3drnyV9EzFueGSTfMl-CddP_NlQyI14,8178
64
+ execsql/metacommands/io.py,sha256=ON6j_I6tmxXCvHRh0vaXWgFONLHsvt896IrgTWEwmrA,2020
65
+ execsql/metacommands/io_export.py,sha256=kxfGnoBDdPFfncxgz6dazMIoGZEHPOO-Mg02kbpdd20,15965
66
+ execsql/metacommands/io_fileops.py,sha256=RKqbWPTYiwiqCZYG-lpih0w1JVOY4RBFdWr3BJb_pnY,9669
67
+ execsql/metacommands/io_import.py,sha256=wyxJJdlW07P5ZIhweejhXyyGANAvEhY5uMjKZ200Jyc,12983
68
+ execsql/metacommands/io_write.py,sha256=NpL2aYGfBpbqmPpYsqniYltYfd_SCA1EQz3_4qSdNbo,8279
69
+ execsql/metacommands/prompt.py,sha256=xd3mAkdbn4AE4hUPuSfN5DgZGUZmk-Db23iL-JJPwXs,36918
70
+ execsql/metacommands/script_ext.py,sha256=TUgAldB2LSJAwZrCvDDi804hQ1d9BDQD2GDqHNPVOcM,2280
71
+ execsql/metacommands/system.py,sha256=sUR5kLL7idTVg8WXIMdd-Kv7nkERIiaeL0beWsz8NyY,7293
72
+ execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
73
+ execsql/utils/auth.py,sha256=AVAKsLN4qBlfO8Axz4rmav4IujdM50RgPFZeidGmYqI,6931
74
+ execsql/utils/crypto.py,sha256=RRbrmbwq0NoNWUH4ZjzsI1H42um3d7Ftfoap9Fp0Nl4,3033
75
+ execsql/utils/datetime.py,sha256=WNnU5xXJWKN1dEeeaEX8GzOK0wqDuLwnaVnU7LKT0RI,7666
76
+ execsql/utils/errors.py,sha256=1beWINMdvE0HUJamIlToKOdDZEmIdsIxtfUMTv6l_Ko,6210
77
+ execsql/utils/fileio.py,sha256=O51pkc9Bf7uh3j2fud_Ycf7bX3vRJPhGKyMf8s46E9o,23739
78
+ execsql/utils/gui.py,sha256=LS2Z8sSwW65QGYHHQBApVDaLaPdB6Eq8aTNn71cPimE,16668
79
+ execsql/utils/mail.py,sha256=Z1t0agMd6zQbB0fJM3aejmpVYTi6PbsPDchqT8pKay0,5628
80
+ execsql/utils/numeric.py,sha256=n9DSZOTJ2gAjUY_S6JZVxpAZ71SKDEFiLwdbE7haymw,1524
81
+ execsql/utils/regex.py,sha256=B6XXlaGAznKarrrrowLcjZ52PbkwAWmZzWz1FlRrUZM,3632
82
+ execsql/utils/strings.py,sha256=YSaPlax1b_EEL3VZAAP508AL2UomCEOYuhriX_pG7Kc,8230
83
+ execsql/utils/timer.py,sha256=1oqmmMU7w0L7zgo_3n7b_7rpoHt0H081zCPFYwrWBlo,1862
84
+ execsql2-2.2.1.data/data/execsql2_extras/READ_ME.rst,sha256=xrseluXaBIw0mec1J5rcNVKIgOqHRCJcbGrCsAay7UI,4848
85
+ execsql2-2.2.1.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
86
+ execsql2-2.2.1.data/data/execsql2_extras/example_config_prompt.sql,sha256=SY3Jxn1qcVm4kPW9xmmTfknHfvURXmeEYTbRjYrjGSw,7487
87
+ execsql2-2.2.1.data/data/execsql2_extras/execsql.conf,sha256=l0DI9CEZhNAqknjNYzYr5GzGtO3NTO4WwlVUJgj3n7M,9515
88
+ execsql2-2.2.1.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
89
+ execsql2-2.2.1.data/data/execsql2_extras/md_compare.sql,sha256=B8Wd7LZ0vnMY2qvA139JIEBkPObgRH2i5xj6PejTQt8,24092
90
+ execsql2-2.2.1.data/data/execsql2_extras/md_glossary.sql,sha256=DJRHcU5NbFpxTTX-IwH3yRlsboj1q6BBGrUAHKn4Cuo,10796
91
+ execsql2-2.2.1.data/data/execsql2_extras/md_upsert.sql,sha256=v_7GbWh_N1mBTmw3gvTrkagOVp2q0KmXvM8hE-DlFxY,112524
92
+ execsql2-2.2.1.data/data/execsql2_extras/pg_compare.sql,sha256=9dWa8hnfy5dVJI-z2iGpd9JzQmI4j2ziMlEdpnr66ro,24352
93
+ execsql2-2.2.1.data/data/execsql2_extras/pg_glossary.sql,sha256=pKjIIDsROAgJq2H-1qNEcRMAWManivcZ_AEVHzUUlic,9908
94
+ execsql2-2.2.1.data/data/execsql2_extras/pg_upsert.sql,sha256=k7AFiGTLBy3nf-qO5QIaZrEYTAKvdxxU3JDLx9jqkzs,108315
95
+ execsql2-2.2.1.data/data/execsql2_extras/script_template.sql,sha256=1Estacb_vm1FgK41k_G9nuduP1yiA-fQ1Kn4Z4mv5Ao,11153
96
+ execsql2-2.2.1.data/data/execsql2_extras/ss_compare.sql,sha256=TsVxWm3cEpR5-EiMYXNhtaY0arSNeKZhsJdHdLA7xeI,24833
97
+ execsql2-2.2.1.data/data/execsql2_extras/ss_glossary.sql,sha256=cLM7nN8JOIu9ZVP9oY9qdSK3hrnWJiDcX6nZmQQbQWI,13065
98
+ execsql2-2.2.1.data/data/execsql2_extras/ss_upsert.sql,sha256=BCqmBykXBF-BpCgOFeG1qhf2XfScKsxPD17wd1hYfHw,120647
99
+ execsql2-2.2.1.dist-info/METADATA,sha256=OX_RjzGB5kYi3tnP-yDlnclymVdwJlQiqFyMkpH7MXU,14890
100
+ execsql2-2.2.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
101
+ execsql2-2.2.1.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
102
+ execsql2-2.2.1.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
103
+ execsql2-2.2.1.dist-info/licenses/NOTICE,sha256=sqVrM73Ys9zfvWC_P797lHfTnoPW_ETeBSrUTFaob0A,339
104
+ execsql2-2.2.1.dist-info/RECORD,,
@@ -1,96 +0,0 @@
1
- execsql/__init__.py,sha256=BIny4bL8uHuSl3gXPqEkIB2FtcexlARjR7IYPwtD9bM,486
2
- execsql/__main__.py,sha256=HdbK-SAhyUmfB6xINY5AzxdMSxGzWSGEG_2dv42Jn64,315
3
- execsql/cli.py,sha256=vXK97DZ0HAb_jOJP2qFXAXEtNbfdyA5tnhjY_xdB5bo,41347
4
- execsql/config.py,sha256=qwhavI1KpU9FnxciE30cqbk8JfOmzrZa3g5IVRDJZlA,33344
5
- execsql/constants.py,sha256=up8I1sfFg1KaQ-ZgwufDOYbupMgTkPVpHzAdWpi5-BQ,12628
6
- execsql/exceptions.py,sha256=O68QF4VRdqslGQbTQX0IaRT0EW2s6t_4fdHb0-4sA2Y,8003
7
- execsql/format.py,sha256=4uNF2MSDBYwZuK9k4wywcUZFU4D_9bMokseOyaCjmGU,11911
8
- execsql/models.py,sha256=INArNIF_lds_Jv3aXXXFO8Cf1W7G_IjsZDLsVnDlSCs,12427
9
- execsql/parser.py,sha256=kue_NonM_VLAnfYDqJ_7mXJSfKsTLFLJBOj9pRWACJ0,12689
10
- execsql/script.py,sha256=6vorNTs1RP90VcbL06bDZQp1_04LBbldT04k5TUzbQY,46852
11
- execsql/state.py,sha256=INT7eXwO8_drZrngHqq2A4hN8Hrh-JFXELUVuqX4wgY,12385
12
- execsql/types.py,sha256=aqGX-EFIdWUWt5ofiWQFphzhuYhrAhGH0xtFBTvb1KY,29187
13
- execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
14
- execsql/db/access.py,sha256=4VT-FtKixcHInM9pdKWc7983WSvMXDY32wWBr-iu8uI,15930
15
- execsql/db/base.py,sha256=gsFUH2SnQQdw0fLVrfzJFuQizSIqq-2XKJRQbZjagfw,23924
16
- execsql/db/dsn.py,sha256=wFx1CcpXRbMQH5YonMLlfe1qHlSurWdMBrccCfFAuWM,4933
17
- execsql/db/duckdb.py,sha256=4jSLGn7Hh_Q1eNv7YZJHewxijHO59_DT2y9taSIeGo4,2721
18
- execsql/db/factory.py,sha256=O8YDNRWBFNcsfN6pnlFb3vuTH3rklfzlpQbAFcMnpGg,4150
19
- execsql/db/firebird.py,sha256=QF7yVdA1pXeQEsJ4Qg-M6g1FSWFV3PnQDRYF_7FmWm8,7544
20
- execsql/db/mysql.py,sha256=-miUlWUhyySZgxPPfyI4uYhnQgGhfhzKBu3ibSii_V8,12781
21
- execsql/db/oracle.py,sha256=6it40w2uXkYOjay46_Ei42Ztbmvmcfky9ovHjrvoD4U,9302
22
- execsql/db/postgres.py,sha256=ny0ZxN97BVrs2u35adFqYPeHabJb_NSyJt2g-naC7tk,18690
23
- execsql/db/sqlite.py,sha256=4R5MqoQI4QFAtkEMlOIZmdsRVDuvF_oWYYY2VDWfHIk,9209
24
- execsql/db/sqlserver.py,sha256=teru36YUAdHl4xx2bupC4o0M1Lp6dAa5xz9pKZ3hGeU,6712
25
- execsql/exporters/__init__.py,sha256=a679NAJp92e3565fhfqbBIbIT_RdyWQWCJ3-wqJJyYE,525
26
- execsql/exporters/base.py,sha256=jE2F6KpXwI3YG6iotNyHJc09-rlXwGYPhFVbWngym-I,5735
27
- execsql/exporters/delimited.py,sha256=3dt0XEB81tzRCtfpyMZeNhBhJ9FVPnaMIC1a6MjS1U0,26886
28
- execsql/exporters/duckdb.py,sha256=rf0Mg3YWkG2GSlu_wCgNBsQ3Z8m92pfDRh3qAHi8Ado,2677
29
- execsql/exporters/feather.py,sha256=SVMVNp5Zqf1VN5chFI5hZpcabn45XKnaNfwhU5Rg9SQ,3898
30
- execsql/exporters/html.py,sha256=0WlY14aPhhht2nrm3s5YDP22sZRTR7lbIYjIwv1GB8Y,8247
31
- execsql/exporters/json.py,sha256=9mUgBFBbZQtuwgs75WPp3KGMZa0KpZsBhodubX0P1oY,3644
32
- execsql/exporters/latex.py,sha256=q_3u7whsISdeBcsIeFVEYoACD8g-VsJU-OXPCN5Nb7U,4061
33
- execsql/exporters/ods.py,sha256=WeM7PtHPn-L0erOyW-puslpG1hb_nQJ5r2J_Oy4JwU8,17064
34
- execsql/exporters/parquet.py,sha256=Qok-zM-vLMpOh4FsevuL7AM8moawzhsht_DZ3lWmcQ0,976
35
- execsql/exporters/pretty.py,sha256=lWVd8hWBPHck8xThVPg-GZzRgF74S_X1-LhOXS_Gzos,3122
36
- execsql/exporters/raw.py,sha256=tS0jp3MIZF_i8VTOkWbFhsNGw8C6aHmPBD8zovtnrQE,1595
37
- execsql/exporters/sqlite.py,sha256=gzVUilTiVt_4hn8KUk43qk7yeyquYo_zg04f1vOyBQo,2430
38
- execsql/exporters/templates.py,sha256=3y-2EFvHK_8x5VOND77Xrs91iHyaCra3ody0tOi9jRM,4620
39
- execsql/exporters/values.py,sha256=DzvdbaS9LQvglrvCkUnTVg9ZIkt8wTO01Q4XgZmV9rk,2176
40
- execsql/exporters/xls.py,sha256=3A5T9wYWtw0UetqpL4fwYa9xbKiqUbiVigyzDEs_MaA,9039
41
- execsql/exporters/xml.py,sha256=FUcPW71uG2jpWQF9S_P5cdtvBv4VQJUSUgNlPv-ucWk,1754
42
- execsql/exporters/zip.py,sha256=Ujp4gD3vfqy8Cq2b1iLFhfDdjcGdibawrxnSoNtCjS8,3463
43
- execsql/gui/__init__.py,sha256=KnLB-8GuRPBZij4W-sihcA9ORRuLDYoa0p2dCeIzYRg,2001
44
- execsql/gui/base.py,sha256=gbfCqj3nOMkAcn-GNIIAy7RdPFJ0UMbzOxpDpfoEVxk,6042
45
- execsql/gui/console.py,sha256=Ln9ixVMLlEK5foHi0t2EywrvTiBqWoPEpp8cnof3eIw,14241
46
- execsql/gui/desktop.py,sha256=zooMA28FWHndy9Aw242wRzchs1QxYwlGGMsWvn4-EKo,42123
47
- execsql/gui/tui.py,sha256=n5xzwe1jAsU54jj0PpcBmVfnvfycPVOeiLx07-IfVVk,45948
48
- execsql/importers/__init__.py,sha256=dDsxSVeQYXBvm9yGqN3QswyGbLWTwt08pvUuRJgZhl4,289
49
- execsql/importers/base.py,sha256=E9CIzy4O_DKdVB6n3lyxF44M1PL_FdDGynE1wCOtDk0,3983
50
- execsql/importers/csv.py,sha256=BlMsUlVd6q0hzi-4jmAj76P3Zd_nafhm54sOo_pSKzM,4619
51
- execsql/importers/feather.py,sha256=oRXdgGsJB_16rc8oewvqKYo2lBe3tivFGufJG7Wvfy0,1698
52
- execsql/importers/ods.py,sha256=f_OlQpjb49CFUDiC5ypct0SjmxUsFNY5OybETvKmVJw,2709
53
- execsql/importers/xls.py,sha256=bOsAOt_XRtNVYZVthNAweoH-EArG3s56_MyOzgjBErE,3541
54
- execsql/metacommands/__init__.py,sha256=Gbf_hQJHFqxdVsChoqeQxKbPv0txK6lSENRCBtsPgPg,65018
55
- execsql/metacommands/conditions.py,sha256=A-6I_jZ_zsq0CV9k4X5mZ6APg0TnHEahEiZ_0oa-nhc,22423
56
- execsql/metacommands/connect.py,sha256=Nsm0D91i3RX-R2rzQQ-Br-gULaI6Uvdn9fqb7DOAVfE,14804
57
- execsql/metacommands/control.py,sha256=iaGK_X1vF18HMEcGOWQuJPG7UfaZFkph2iXkOvf7BQc,7617
58
- execsql/metacommands/data.py,sha256=Cfb9-vpKQkK-ql8hIgKqMAJhjuA4fgb56vaxqqbo4es,11334
59
- execsql/metacommands/debug.py,sha256=tIGosPmn4YbQTp67VJK8CmUOvwjiSg2WBRPznKOCKfU,8058
60
- execsql/metacommands/io.py,sha256=7e6Y37gAbMND0m2Zk-_Szy6lG6jNwUg_9glcPfQs2hA,44860
61
- execsql/metacommands/prompt.py,sha256=yAs7HNMN38ttxjl5ubxY1u-lE7nkBc5B5uk1G5ksK0c,38093
62
- execsql/metacommands/script_ext.py,sha256=TUgAldB2LSJAwZrCvDDi804hQ1d9BDQD2GDqHNPVOcM,2280
63
- execsql/metacommands/system.py,sha256=w6xL3dT7zJ0pVOOckyHQM4SBvCmaX9q_daPlwq4Mi4I,7137
64
- execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
65
- execsql/utils/auth.py,sha256=AVAKsLN4qBlfO8Axz4rmav4IujdM50RgPFZeidGmYqI,6931
66
- execsql/utils/crypto.py,sha256=RRbrmbwq0NoNWUH4ZjzsI1H42um3d7Ftfoap9Fp0Nl4,3033
67
- execsql/utils/datetime.py,sha256=WNnU5xXJWKN1dEeeaEX8GzOK0wqDuLwnaVnU7LKT0RI,7666
68
- execsql/utils/errors.py,sha256=1beWINMdvE0HUJamIlToKOdDZEmIdsIxtfUMTv6l_Ko,6210
69
- execsql/utils/fileio.py,sha256=zVUZ4y5r60b6LUdxRVa7iziJ9ns_3kqPMkyBePCHvMQ,23321
70
- execsql/utils/gui.py,sha256=LS2Z8sSwW65QGYHHQBApVDaLaPdB6Eq8aTNn71cPimE,16668
71
- execsql/utils/mail.py,sha256=Z1t0agMd6zQbB0fJM3aejmpVYTi6PbsPDchqT8pKay0,5628
72
- execsql/utils/numeric.py,sha256=n9DSZOTJ2gAjUY_S6JZVxpAZ71SKDEFiLwdbE7haymw,1524
73
- execsql/utils/regex.py,sha256=B6XXlaGAznKarrrrowLcjZ52PbkwAWmZzWz1FlRrUZM,3632
74
- execsql/utils/strings.py,sha256=YSaPlax1b_EEL3VZAAP508AL2UomCEOYuhriX_pG7Kc,8230
75
- execsql/utils/timer.py,sha256=1oqmmMU7w0L7zgo_3n7b_7rpoHt0H081zCPFYwrWBlo,1862
76
- execsql2-2.1.2.data/data/execsql2_extras/READ_ME.rst,sha256=xrseluXaBIw0mec1J5rcNVKIgOqHRCJcbGrCsAay7UI,4848
77
- execsql2-2.1.2.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
78
- execsql2-2.1.2.data/data/execsql2_extras/example_config_prompt.sql,sha256=SY3Jxn1qcVm4kPW9xmmTfknHfvURXmeEYTbRjYrjGSw,7487
79
- execsql2-2.1.2.data/data/execsql2_extras/execsql.conf,sha256=l0DI9CEZhNAqknjNYzYr5GzGtO3NTO4WwlVUJgj3n7M,9515
80
- execsql2-2.1.2.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
81
- execsql2-2.1.2.data/data/execsql2_extras/md_compare.sql,sha256=B8Wd7LZ0vnMY2qvA139JIEBkPObgRH2i5xj6PejTQt8,24092
82
- execsql2-2.1.2.data/data/execsql2_extras/md_glossary.sql,sha256=DJRHcU5NbFpxTTX-IwH3yRlsboj1q6BBGrUAHKn4Cuo,10796
83
- execsql2-2.1.2.data/data/execsql2_extras/md_upsert.sql,sha256=v_7GbWh_N1mBTmw3gvTrkagOVp2q0KmXvM8hE-DlFxY,112524
84
- execsql2-2.1.2.data/data/execsql2_extras/pg_compare.sql,sha256=9dWa8hnfy5dVJI-z2iGpd9JzQmI4j2ziMlEdpnr66ro,24352
85
- execsql2-2.1.2.data/data/execsql2_extras/pg_glossary.sql,sha256=pKjIIDsROAgJq2H-1qNEcRMAWManivcZ_AEVHzUUlic,9908
86
- execsql2-2.1.2.data/data/execsql2_extras/pg_upsert.sql,sha256=k7AFiGTLBy3nf-qO5QIaZrEYTAKvdxxU3JDLx9jqkzs,108315
87
- execsql2-2.1.2.data/data/execsql2_extras/script_template.sql,sha256=1Estacb_vm1FgK41k_G9nuduP1yiA-fQ1Kn4Z4mv5Ao,11153
88
- execsql2-2.1.2.data/data/execsql2_extras/ss_compare.sql,sha256=TsVxWm3cEpR5-EiMYXNhtaY0arSNeKZhsJdHdLA7xeI,24833
89
- execsql2-2.1.2.data/data/execsql2_extras/ss_glossary.sql,sha256=cLM7nN8JOIu9ZVP9oY9qdSK3hrnWJiDcX6nZmQQbQWI,13065
90
- execsql2-2.1.2.data/data/execsql2_extras/ss_upsert.sql,sha256=BCqmBykXBF-BpCgOFeG1qhf2XfScKsxPD17wd1hYfHw,120647
91
- execsql2-2.1.2.dist-info/METADATA,sha256=hf_k-tE3yUQEsbzUOc_bkEhQt-c1D3w-C9geEd0Brw0,14893
92
- execsql2-2.1.2.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
93
- execsql2-2.1.2.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
94
- execsql2-2.1.2.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
95
- execsql2-2.1.2.dist-info/licenses/NOTICE,sha256=sqVrM73Ys9zfvWC_P797lHfTnoPW_ETeBSrUTFaob0A,339
96
- execsql2-2.1.2.dist-info/RECORD,,