execsql2 2.1.2__py3-none-any.whl → 2.4.0__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 (94) 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 +65 -1
  6. execsql/db/access.py +27 -15
  7. execsql/db/base.py +328 -215
  8. execsql/db/dsn.py +10 -5
  9. execsql/db/duckdb.py +6 -2
  10. execsql/db/factory.py +21 -0
  11. execsql/db/firebird.py +27 -19
  12. execsql/db/mysql.py +12 -7
  13. execsql/db/oracle.py +15 -11
  14. execsql/db/postgres.py +31 -16
  15. execsql/db/sqlite.py +15 -11
  16. execsql/db/sqlserver.py +16 -5
  17. execsql/exceptions.py +25 -7
  18. execsql/exporters/base.py +12 -1
  19. execsql/exporters/delimited.py +80 -35
  20. execsql/exporters/duckdb.py +6 -2
  21. execsql/exporters/feather.py +10 -6
  22. execsql/exporters/html.py +89 -69
  23. execsql/exporters/json.py +52 -45
  24. execsql/exporters/latex.py +37 -27
  25. execsql/exporters/ods.py +32 -11
  26. execsql/exporters/parquet.py +5 -2
  27. execsql/exporters/pretty.py +16 -9
  28. execsql/exporters/raw.py +22 -16
  29. execsql/exporters/sqlite.py +6 -2
  30. execsql/exporters/templates.py +39 -21
  31. execsql/exporters/values.py +26 -20
  32. execsql/exporters/xls.py +30 -11
  33. execsql/exporters/xml.py +31 -13
  34. execsql/exporters/zip.py +15 -0
  35. execsql/importers/base.py +6 -4
  36. execsql/importers/csv.py +8 -6
  37. execsql/importers/feather.py +6 -4
  38. execsql/importers/ods.py +6 -4
  39. execsql/importers/xls.py +6 -4
  40. execsql/metacommands/__init__.py +208 -1548
  41. execsql/metacommands/conditions.py +101 -27
  42. execsql/metacommands/control.py +8 -4
  43. execsql/metacommands/data.py +6 -6
  44. execsql/metacommands/debug.py +6 -2
  45. execsql/metacommands/dispatch.py +2011 -0
  46. execsql/metacommands/io.py +67 -1310
  47. execsql/metacommands/io_export.py +442 -0
  48. execsql/metacommands/io_fileops.py +287 -0
  49. execsql/metacommands/io_import.py +398 -0
  50. execsql/metacommands/io_write.py +248 -0
  51. execsql/metacommands/prompt.py +22 -66
  52. execsql/metacommands/system.py +7 -2
  53. execsql/models.py +7 -0
  54. execsql/parser.py +10 -0
  55. execsql/py.typed +0 -0
  56. execsql/script/__init__.py +95 -0
  57. execsql/script/control.py +162 -0
  58. execsql/{script.py → script/engine.py} +184 -402
  59. execsql/script/variables.py +281 -0
  60. execsql/types.py +49 -20
  61. execsql/utils/auth.py +2 -0
  62. execsql/utils/crypto.py +4 -6
  63. execsql/utils/datetime.py +1 -0
  64. execsql/utils/errors.py +11 -0
  65. execsql/utils/fileio.py +33 -8
  66. execsql/utils/gui.py +46 -0
  67. execsql/utils/mail.py +7 -17
  68. execsql/utils/numeric.py +2 -0
  69. execsql/utils/regex.py +9 -0
  70. execsql/utils/strings.py +16 -0
  71. execsql/utils/timer.py +2 -0
  72. execsql2-2.4.0.data/data/execsql2_extras/README.md +65 -0
  73. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/execsql.conf +1 -1
  74. {execsql2-2.1.2.dist-info → execsql2-2.4.0.dist-info}/METADATA +13 -6
  75. execsql2-2.4.0.dist-info/RECORD +108 -0
  76. execsql2-2.1.2.data/data/execsql2_extras/READ_ME.rst +0 -127
  77. execsql2-2.1.2.dist-info/RECORD +0 -96
  78. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/config_settings.sqlite +0 -0
  79. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/example_config_prompt.sql +0 -0
  80. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/make_config_db.sql +0 -0
  81. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/md_compare.sql +0 -0
  82. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/md_glossary.sql +0 -0
  83. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/md_upsert.sql +0 -0
  84. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/pg_compare.sql +0 -0
  85. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/pg_glossary.sql +0 -0
  86. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/pg_upsert.sql +0 -0
  87. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/script_template.sql +0 -0
  88. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/ss_compare.sql +0 -0
  89. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/ss_glossary.sql +0 -0
  90. {execsql2-2.1.2.data → execsql2-2.4.0.data}/data/execsql2_extras/ss_upsert.sql +0 -0
  91. {execsql2-2.1.2.dist-info → execsql2-2.4.0.dist-info}/WHEEL +0 -0
  92. {execsql2-2.1.2.dist-info → execsql2-2.4.0.dist-info}/entry_points.txt +0 -0
  93. {execsql2-2.1.2.dist-info → execsql2-2.4.0.dist-info}/licenses/LICENSE.txt +0 -0
  94. {execsql2-2.1.2.dist-info → execsql2-2.4.0.dist-info}/licenses/NOTICE +0 -0
execsql/utils/regex.py CHANGED
@@ -14,6 +14,15 @@ dispatch regexes at module load time:
14
14
 
15
15
  import os
16
16
 
17
+ __all__ = [
18
+ "ins_rxs",
19
+ "ins_quoted_rx",
20
+ "ins_schema_rxs",
21
+ "ins_table_rxs",
22
+ "ins_table_list_rxs",
23
+ "ins_fn_rxs",
24
+ ]
25
+
17
26
 
18
27
  def ins_rxs(rx_list: tuple, fragment1: object, fragment2: object) -> tuple:
19
28
  # Returns a tuple of all strings consisting of elements of the 'rx_list' tuple
execsql/utils/strings.py CHANGED
@@ -23,6 +23,22 @@ identifiers:
23
23
 
24
24
  import re
25
25
 
26
+ __all__ = [
27
+ "clean_word",
28
+ "clean_words",
29
+ "trim_word",
30
+ "trim_words",
31
+ "fold_word",
32
+ "fold_words",
33
+ "dedup_words",
34
+ "is_doublequoted",
35
+ "unquoted",
36
+ "unquoted2",
37
+ "encodings_match",
38
+ "wo_quotes",
39
+ "get_subvarset",
40
+ ]
41
+
26
42
 
27
43
  def clean_word(word: str) -> str:
28
44
  # Trim leading and trailing spaces and replaces all non-alphanumeric characters with an underscore.
execsql/utils/timer.py CHANGED
@@ -17,6 +17,8 @@ import time
17
17
 
18
18
  from execsql.exceptions import ExecSqlTimeoutError
19
19
 
20
+ __all__ = ["Timer", "TimerHandler"]
21
+
20
22
 
21
23
  class TimerHandler:
22
24
  def __init__(self, maxtime: float) -> None:
@@ -0,0 +1,65 @@
1
+ # Templates for execsql
2
+
3
+ Several types of templates are provided that may be useful in conjunction with execsql. These are:
4
+
5
+ - **execsql.conf** — An annotated version of the configuration file that includes all configuration settings and notes on their usage.
6
+
7
+ - **script_template.sql** — A framework for SQL scripts that make use of several execsql features. It includes sections for custom configuration settings, custom logfile creation, and reporting of unexpected script exits (through user cancellation or errors).
8
+
9
+ - **config_settings.sqlite** and **example_config_prompt.sql** — A SQLite database containing specifications for all settings configurable with the CONFIG metacommand, in the form used by the PROMPT ENTRY_FORM metacommand, and a SQL script illustrating how this database can be used to prompt the user for some or all of the configuration settings. *execsql* version 1.63.0 or later is needed to use this script.
10
+
11
+ ## Functional Scripts for execsql
12
+
13
+ These script files provide useful functionality that should be accessed by including these scripts in other SQL scripts and then calling the sub-scripts that they contain.
14
+
15
+ ### Upsert Scripts
16
+
17
+ These scripts perform automated upsert operations on any tables of any database in a DBMS that supports the standard *information_schema* views. Currently that includes:
18
+
19
+ - **PostgreSQL:** `pg_upsert.sql`
20
+ - **MySQL/MariaDB:** `md_upsert.sql`
21
+ - **SQL Server:** `ss_upsert.sql`
22
+
23
+ These scripts perform the upsert operation by using standard SQL UPDATE and INSERT statements rather than DBMS-specific implementations of the SQL MERGE statement.
24
+
25
+ Features of these upsert scripts include:
26
+
27
+ - They can be applied to any table in any database without modification.
28
+ - They can be applied to multiple tables simultaneously, and will perform the upsert operations in top-down order to maintain referential integrity among tables.
29
+ - Prior to performing the upsert operation, they check for null values in the columns of each staging table that must be non-null in the corresponding base table.
30
+ - Prior to performing the upsert operation, they check for duplicate primary key values in the staging tables.
31
+ - Prior to performing the upsert operation, they check foreign keys against both base tables and any other appropriate staging tables.
32
+ - They will not attempt to perform the upsert operation on any table if there are any violations of the non-null checks, primary key checks, or foreign key checks.
33
+ - They produce a table that either a) summarizes the number of rows that violated each type of non-null and foreign-key check, or b) summarizes the number of rows updated and the number of rows inserted for each table.
34
+ - Optionally, they will display all the changes to be made in a GUI interface, prompting the user to approve each update and insert operation.
35
+ - Optionally, they will record all operations carried out in a custom log file; this log may include the SQL statements executed and the data values that were added or changed.
36
+ - If an execsql console is active, they will use the console's status bar and progress bar to indicate the activity underway.
37
+
38
+ Complete documentation is available at [Read The Docs (execsql-upsert)](https://execsql-upsert.readthedocs.io/en/latest/).
39
+
40
+ ### Table Comparison Scripts
41
+
42
+ These scripts generate SQL that can be used to identify differences in the content of two tables with equivalent structure. These are specifically intended to be base and staging tables. Running the SQL provided by these scripts will provide different summaries of the types of changes that would be made to the base tables by upserting the staging tables.
43
+
44
+ These scripts work with any tables of any database in a DBMS that supports the standard *information_schema* views. Currently that includes:
45
+
46
+ - **PostgreSQL:** `pg_compare.sql`
47
+ - **MySQL/MariaDB:** `md_compare.sql`
48
+ - **SQL Server:** `ss_compare.sql`
49
+
50
+ Complete documentation is available at [Read The Docs (execsql-compare)](https://execsql-compare.readthedocs.io/en/latest/).
51
+
52
+ ### Glossary Creation Scripts
53
+
54
+ These scripts create a glossary of column names or other terms that can be exported to accompany a data summary. These scripts work with any tables of any database in a DBMS that supports the standard *information_schema* views. Currently that includes:
55
+
56
+ - **PostgreSQL:** `pg_glossary.sql`
57
+ - **MySQL/MariaDB:** `md_glossary.sql`
58
+ - **SQL Server:** `ss_glossary.sql`
59
+
60
+ Complete documentation is available at [Read The Docs (execsql-glossary)](https://execsql-compare.readthedocs.io/en/latest/).
61
+
62
+ ## Roadmap
63
+
64
+ - [ ] Integrate documentation for [execsql-compare](https://execsql-compare.readthedocs.io/en/latest/) into the main execsql2 documentation site.
65
+ - [ ] Integrate documentation for [execsql-upsert](https://execsql-upsert.readthedocs.io/en/latest/) into the main execsql2 documentation site.
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # PURPOSE
4
4
  # Configuration file for execsql.py
5
- # See http://execsql.osdn.io/configuration.html
5
+ # See https://execsql2.readthedocs.io/en/latest/configuration/
6
6
  #
7
7
  # AUTHORS
8
8
  #
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: execsql2
3
- Version: 2.1.2
3
+ Version: 2.4.0
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
@@ -34,6 +34,7 @@ Classifier: Programming Language :: Python :: 3.10
34
34
  Classifier: Programming Language :: Python :: 3.11
35
35
  Classifier: Programming Language :: Python :: 3.12
36
36
  Classifier: Programming Language :: Python :: 3.13
37
+ Classifier: Programming Language :: Python :: 3.14
37
38
  Classifier: Topic :: Database
38
39
  Classifier: Topic :: Database :: Front-Ends
39
40
  Requires-Python: >=3.10
@@ -67,13 +68,19 @@ Requires-Dist: keyring; extra == 'auth'
67
68
  Provides-Extra: dev
68
69
  Requires-Dist: build>=1.2.2.post1; extra == 'dev'
69
70
  Requires-Dist: bump-my-version>=1.2.7; extra == 'dev'
71
+ Requires-Dist: jinja2; extra == 'dev'
70
72
  Requires-Dist: markdown-include>=0.8; extra == 'dev'
71
73
  Requires-Dist: mkdocstrings-python>=2.0.3; extra == 'dev'
74
+ Requires-Dist: odfpy; extra == 'dev'
75
+ Requires-Dist: openpyxl; extra == 'dev'
76
+ Requires-Dist: polars; extra == 'dev'
72
77
  Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
73
78
  Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
74
79
  Requires-Dist: ruff>=0.4; extra == 'dev'
80
+ Requires-Dist: tables; extra == 'dev'
75
81
  Requires-Dist: tox-uv>=1.13.1; extra == 'dev'
76
82
  Requires-Dist: twine>=6.1.0; extra == 'dev'
83
+ Requires-Dist: xlrd; extra == 'dev'
77
84
  Requires-Dist: zensical>=0.0.28; extra == 'dev'
78
85
  Provides-Extra: duckdb
79
86
  Requires-Dist: duckdb; extra == 'duckdb'
@@ -98,11 +105,11 @@ Provides-Extra: postgres
98
105
  Requires-Dist: psycopg2-binary; extra == 'postgres'
99
106
  Description-Content-Type: text/markdown
100
107
 
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/).
108
+ > [!NOTE]
109
+ > **This is a maintained fork of [execsql](https://execsql.readthedocs.io/).**
110
+ > The original monolith has been fully refactored into a modular package with 2,000+ tests.
111
+ > The CLI and configuration are backwards-compatible with upstream v1.130.1.
112
+ > Report issues at [github.com/geocoug/execsql/issues](https://github.com/geocoug/execsql/issues).
106
113
 
107
114
  <div align="center">
108
115
 
@@ -0,0 +1,108 @@
1
+ execsql/__init__.py,sha256=BIny4bL8uHuSl3gXPqEkIB2FtcexlARjR7IYPwtD9bM,486
2
+ execsql/__main__.py,sha256=HdbK-SAhyUmfB6xINY5AzxdMSxGzWSGEG_2dv42Jn64,315
3
+ execsql/config.py,sha256=ipOrF8frgtN9CDg5b9J3cQB0b5RiwzoH_znNN1GrkR8,36390
4
+ execsql/constants.py,sha256=up8I1sfFg1KaQ-ZgwufDOYbupMgTkPVpHzAdWpi5-BQ,12628
5
+ execsql/exceptions.py,sha256=UE38-7HhQiwXzwKz9DgE4coTD2j6Jlam3jEB6-U-hNg,8383
6
+ execsql/format.py,sha256=4uNF2MSDBYwZuK9k4wywcUZFU4D_9bMokseOyaCjmGU,11911
7
+ execsql/models.py,sha256=kMqw5GSfb4posItCZtEX9FQRBx-BxQnUdD4_FP8rLo0,12513
8
+ execsql/parser.py,sha256=PnuGdux9iLaMwYkVy3CWFzZqBYaK7JNBEdBBoD5KvVI,12839
9
+ execsql/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ execsql/state.py,sha256=INT7eXwO8_drZrngHqq2A4hN8Hrh-JFXELUVuqX4wgY,12385
11
+ execsql/types.py,sha256=8lCYX4ihkSzQJKqCYFTOVv0GDfvNrY7dcb8pAnTSR4E,29776
12
+ execsql/cli/__init__.py,sha256=rxQy5MktCksykRm9u7kqxqbTo-Rx0MCIHd3wqWufszY,14667
13
+ execsql/cli/dsn.py,sha256=_mDilt_dhjt1uwN1AC6Mbl9zmKl7pdaZA7eMgR7ZpeE,2759
14
+ execsql/cli/help.py,sha256=zSEn66LDnNEnkqgA6CEQWraIzgiwGBJSiaflRuCySXQ,5331
15
+ execsql/cli/run.py,sha256=Ex3B_gGEGgQlkBEiYz5O3qQBK4IiCj7VKTO6Bu8zny0,22469
16
+ execsql/db/__init__.py,sha256=jTbuafuKOqYtXFR1wvCOoKK5Lr3l1uErfaIbIr6UywI,1063
17
+ execsql/db/access.py,sha256=bx5qr_K51LNHVTibPqmjv7U1O2bW6DRQr8HzlzHrYIY,16520
18
+ execsql/db/base.py,sha256=jcamHa5pHsOKpoNf3E166j_eKsMxu-8QMkHkMePLwd0,30110
19
+ execsql/db/dsn.py,sha256=4YZr4yzXeaMrE-b72c8mJvi4gnllpI9v8iRrlzXKjb4,5142
20
+ execsql/db/duckdb.py,sha256=KQQzO89ajJjXqEchysn9_kKdXdWxRPi4mKp8ra6A8v4,2836
21
+ execsql/db/factory.py,sha256=fD0JlJjPn_czlW5VmjXpdSC9RB1mzLQQGQXzhdDFGYw,4970
22
+ execsql/db/firebird.py,sha256=Kgjlij7HeKXr7fymFDl05Ljzvs25uoQcI6Do3A2mSNQ,7871
23
+ execsql/db/mysql.py,sha256=n3T-MKDQrWbDjMYrjI9NgA5iykyelAX8tUrjjgV2k0M,12909
24
+ execsql/db/oracle.py,sha256=Psl9JZ0XWwHshr2xyy1vIbLf2KJ2TGRj_kTcc0YXLh4,9464
25
+ execsql/db/postgres.py,sha256=gYG1Jw8tbq06TROokoSlEfg6ZtSOXhWDYAeyS_K2Yaw,19443
26
+ execsql/db/sqlite.py,sha256=oT8MlhsaD7lmJx9ZK32wR6H9Pccr5wxs3Bk9Q3iypRI,9429
27
+ execsql/db/sqlserver.py,sha256=hSCu68Z21s2OSLow38qXwLQGxvM7IF6xjehGwgPXl9k,7092
28
+ execsql/exporters/__init__.py,sha256=a679NAJp92e3565fhfqbBIbIT_RdyWQWCJ3-wqJJyYE,525
29
+ execsql/exporters/base.py,sha256=a4jphxKnlEjXAemeNSHGelk7KvHJTghKhone75FyXAE,6242
30
+ execsql/exporters/delimited.py,sha256=UCe5oUNhymkXD-4xek2Pk1K_9Sv9ziP7o0__LMl8ZuM,29512
31
+ execsql/exporters/duckdb.py,sha256=Wc9I5uiV4MzmVQzCX-vgVHQUL7U3ZWdOkFVFWBv5SXM,2911
32
+ execsql/exporters/feather.py,sha256=w2qZAnewzeiRMnmPXECvkgD-6KtyxaiQwjokRT7Awrc,4167
33
+ execsql/exporters/html.py,sha256=ISQBOr7AJ5koKlebXSvWqzEvl1nXriCRGeKmk-bzkrc,9335
34
+ execsql/exporters/json.py,sha256=yljlRBbmvDVSTQUe0EdfdqTTRpD5sHfn7-jQ457ydvc,4139
35
+ execsql/exporters/latex.py,sha256=w_B83_5vKPe8uYxCWGdqvxwJeq0mw5zzKYDiAb7dbN0,4503
36
+ execsql/exporters/ods.py,sha256=jl2qVHUeCLLv8xrkZfG3jgXbaglQ3rggCHziv7tNQOI,18876
37
+ execsql/exporters/parquet.py,sha256=186vUTH1oVAQ0s_qayLzEQVsKKu3ijAkhYEI6tysXkg,1095
38
+ execsql/exporters/pretty.py,sha256=9isA8f6xUz-3-JhMJimibnvtybVrT1cnoAjGnzsPEGI,3423
39
+ execsql/exporters/raw.py,sha256=jNzfVqUgpKSIO7BsOVwBi4CcfCV5ooZLLq_kEXa4W_I,1918
40
+ execsql/exporters/sqlite.py,sha256=XA0ALLvy-r6Pz1lpOFkWWbvpSP9Hm1tHHiuo_BvPVDk,2686
41
+ execsql/exporters/templates.py,sha256=T9nk7vJrlxiPGfOWGc79xqqDxK3TCYu0wXq48U02npw,5564
42
+ execsql/exporters/values.py,sha256=HIyud31aux_dbCphfKHEGeZB9fkIPE5PoGXQz817XIE,2520
43
+ execsql/exporters/xls.py,sha256=QiMtWr-S8mB22ubK7F40x4r9ZyliDENOehiiVydwZpA,10259
44
+ execsql/exporters/xml.py,sha256=lqcOM8uKDoCayU42BPSLNH1_2DIHU5D3LtQItREU90c,2564
45
+ execsql/exporters/zip.py,sha256=9-hExltQorONNThiMfxPDYHqHsbTeq9zM9zmtG4oFb8,4410
46
+ execsql/gui/__init__.py,sha256=KnLB-8GuRPBZij4W-sihcA9ORRuLDYoa0p2dCeIzYRg,2001
47
+ execsql/gui/base.py,sha256=gbfCqj3nOMkAcn-GNIIAy7RdPFJ0UMbzOxpDpfoEVxk,6042
48
+ execsql/gui/console.py,sha256=Ln9ixVMLlEK5foHi0t2EywrvTiBqWoPEpp8cnof3eIw,14241
49
+ execsql/gui/desktop.py,sha256=zooMA28FWHndy9Aw242wRzchs1QxYwlGGMsWvn4-EKo,42123
50
+ execsql/gui/tui.py,sha256=n5xzwe1jAsU54jj0PpcBmVfnvfycPVOeiLx07-IfVVk,45948
51
+ execsql/importers/__init__.py,sha256=dDsxSVeQYXBvm9yGqN3QswyGbLWTwt08pvUuRJgZhl4,289
52
+ execsql/importers/base.py,sha256=bURS7dXMIDuOzSpjRaOHqaC_jvwB70sLqWVQO36AtaQ,4040
53
+ execsql/importers/csv.py,sha256=P0uMwafYoG4s1H0Yo1OysKgWWea56Sq2DZqjtjGUwUE,4696
54
+ execsql/importers/feather.py,sha256=BBYtwM77EbdXBlpdd2BEacUK1DfwLHXW9ieSGHRxIws,1770
55
+ execsql/importers/ods.py,sha256=O-bXyy_vlG4xl_KEQstYOaSAlzkGdF6TRnoHCTGpgTo,2770
56
+ execsql/importers/xls.py,sha256=wWIS8T-zxHEhK_YFl9tovCE_ByTVtUlbmVLhrrdFRb8,3602
57
+ execsql/metacommands/__init__.py,sha256=z5KtcR7qCoV0P9qyoAB1i2naXMKLqKjCa7wBNjKMrHU,8720
58
+ execsql/metacommands/conditions.py,sha256=u-XdeIWj9QMht9hRGhvH0XlB9V09AliAPKDBHRXc02s,24540
59
+ execsql/metacommands/connect.py,sha256=Nsm0D91i3RX-R2rzQQ-Br-gULaI6Uvdn9fqb7DOAVfE,14804
60
+ execsql/metacommands/control.py,sha256=FCIWD-ZivHRZDqMS-2k37iR05HKHsv_7UPh5zJAg4I4,7693
61
+ execsql/metacommands/data.py,sha256=tRQBGTAuW-eJ2tBNWaoZI9OjTyNNyHJISo7gOdL-sm8,11370
62
+ execsql/metacommands/debug.py,sha256=nmfQ2ijUbTQO3drnyV9EzFueGSTfMl-CddP_NlQyI14,8178
63
+ execsql/metacommands/dispatch.py,sha256=jsM6tArl0em-71dJSWq_rNUChJzI084JaFfDwe07BnI,76153
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/script/__init__.py,sha256=pIo0EJ7-vg67rSMbOvbri_BOUgLoGoSEUfJgxUN7ZS0,3380
73
+ execsql/script/control.py,sha256=oNfHGYui1wulZQji5_pr1qBqGfpcgxm_ESZQT00dn9Y,6095
74
+ execsql/script/engine.py,sha256=zMwMmlBBXcBLdJcORIe9NBlyepqELLwDU80j3vM7Ydg,39278
75
+ execsql/script/variables.py,sha256=zv8FkvtuINAwimJButNs7xaLT6KDukWu_LBfT9p7w4Q,11464
76
+ execsql/utils/__init__.py,sha256=0uR6JwVJQRX3vceByNBduCAf5dd5assKjeqJUWvpZoA,278
77
+ execsql/utils/auth.py,sha256=onXzNkNZQZxGC5w7eey06sjvAIAX_Lf9g7nUJtcsel0,7009
78
+ execsql/utils/crypto.py,sha256=2OnBWwn9bCBGc1ZkyRv16TvhottoCNYtXqgbE3mG3Sg,2960
79
+ execsql/utils/datetime.py,sha256=V_itd5vVvUPjT86P_z_hh4mlerMDGhDzI5MwPMDBaI4,7715
80
+ execsql/utils/errors.py,sha256=2Nxp_uivLbhgeFNuAPCiGQzE9VAdF4b1kcPClOpvme8,6380
81
+ execsql/utils/fileio.py,sha256=F6M4osE0Mb2ycTcvwwcYnhBXH1L36v6d7Oxdab6J16s,24110
82
+ execsql/utils/gui.py,sha256=kCfHvqY60jdoJa1k5HlxhrmzM4HPp7uajV6nxz3_Qh4,17583
83
+ execsql/utils/mail.py,sha256=75A1cMnEfyP0_QMMWuSLv8hrcIjc9cGBCrttLpr2TXQ,5372
84
+ execsql/utils/numeric.py,sha256=xh02ANSRk3nUpQ-rtm66ILoMqoi7HtzCoRMIOT9U8QI,1570
85
+ execsql/utils/regex.py,sha256=diEzTZqU_HHwVMadPAvN1Vgzhl7I03eVaEFGCXyGGL8,3770
86
+ execsql/utils/strings.py,sha256=5Dvzrk-9SIw2lpxXZQkiJbNyo1sy7iXXAtSULlZ0KG8,8488
87
+ execsql/utils/timer.py,sha256=eDYf5VzCNFk7oo90InJucUm3XcBdhYMogjZMqeg9xzc,1899
88
+ execsql2-2.4.0.data/data/execsql2_extras/README.md,sha256=sxwVyU0ZahCfANv56LahkyuM505kFjrMhe-1SvWE69E,4845
89
+ execsql2-2.4.0.data/data/execsql2_extras/config_settings.sqlite,sha256=aY5cxR7Q7J6zJ4bC9lu5mHUrhy211Cq3MNKPQVCt02E,20480
90
+ execsql2-2.4.0.data/data/execsql2_extras/example_config_prompt.sql,sha256=SY3Jxn1qcVm4kPW9xmmTfknHfvURXmeEYTbRjYrjGSw,7487
91
+ execsql2-2.4.0.data/data/execsql2_extras/execsql.conf,sha256=_45iJ-KWZnB8uMW_gEg067MM5pmGJ-dVl7VbAZMunAE,9530
92
+ execsql2-2.4.0.data/data/execsql2_extras/make_config_db.sql,sha256=WwyC6dK-Eh5CAVppiBCDHqiI1_wEI9U95Ytpr4lsZkg,8726
93
+ execsql2-2.4.0.data/data/execsql2_extras/md_compare.sql,sha256=B8Wd7LZ0vnMY2qvA139JIEBkPObgRH2i5xj6PejTQt8,24092
94
+ execsql2-2.4.0.data/data/execsql2_extras/md_glossary.sql,sha256=DJRHcU5NbFpxTTX-IwH3yRlsboj1q6BBGrUAHKn4Cuo,10796
95
+ execsql2-2.4.0.data/data/execsql2_extras/md_upsert.sql,sha256=v_7GbWh_N1mBTmw3gvTrkagOVp2q0KmXvM8hE-DlFxY,112524
96
+ execsql2-2.4.0.data/data/execsql2_extras/pg_compare.sql,sha256=9dWa8hnfy5dVJI-z2iGpd9JzQmI4j2ziMlEdpnr66ro,24352
97
+ execsql2-2.4.0.data/data/execsql2_extras/pg_glossary.sql,sha256=pKjIIDsROAgJq2H-1qNEcRMAWManivcZ_AEVHzUUlic,9908
98
+ execsql2-2.4.0.data/data/execsql2_extras/pg_upsert.sql,sha256=k7AFiGTLBy3nf-qO5QIaZrEYTAKvdxxU3JDLx9jqkzs,108315
99
+ execsql2-2.4.0.data/data/execsql2_extras/script_template.sql,sha256=1Estacb_vm1FgK41k_G9nuduP1yiA-fQ1Kn4Z4mv5Ao,11153
100
+ execsql2-2.4.0.data/data/execsql2_extras/ss_compare.sql,sha256=TsVxWm3cEpR5-EiMYXNhtaY0arSNeKZhsJdHdLA7xeI,24833
101
+ execsql2-2.4.0.data/data/execsql2_extras/ss_glossary.sql,sha256=cLM7nN8JOIu9ZVP9oY9qdSK3hrnWJiDcX6nZmQQbQWI,13065
102
+ execsql2-2.4.0.data/data/execsql2_extras/ss_upsert.sql,sha256=BCqmBykXBF-BpCgOFeG1qhf2XfScKsxPD17wd1hYfHw,120647
103
+ execsql2-2.4.0.dist-info/METADATA,sha256=GZb9PGPvtiIATG_F_8a1QzeuH49j3aro92xDioQtbds,15168
104
+ execsql2-2.4.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
105
+ execsql2-2.4.0.dist-info/entry_points.txt,sha256=sUOxkM-dN1eBGGpSpDLsAaE0yNXYQKWZAfxPOlMkQyk,90
106
+ execsql2-2.4.0.dist-info/licenses/LICENSE.txt,sha256=LBdhuxejF8_bLCHZ2kWfmDXpDGUu914Gbd6_3JjCRe0,676
107
+ execsql2-2.4.0.dist-info/licenses/NOTICE,sha256=sqVrM73Ys9zfvWC_P797lHfTnoPW_ETeBSrUTFaob0A,339
108
+ execsql2-2.4.0.dist-info/RECORD,,
@@ -1,127 +0,0 @@
1
- Templates for execsql.py
2
- ===================================================
3
-
4
- Several types of templates are provided that may be useful in conjunction with execsql.py. These are:
5
-
6
- *execsql.conf*
7
- An annotated version of the configuration file that includes all configuration settings
8
- and notes on their usage.
9
-
10
- *script_template.sql*
11
- A framework for SQL scripts that make use of several execsql features. It includes sections
12
- for custom configuration settings, custom logfile creation, and reporting of unexpected
13
- script exits (through user cancellation or errors).
14
-
15
- *config_settings.sqlite* and *example_config_prompt.sql*
16
- A SQLite database containing specifications for all settings configurable with the CONFIG
17
- metacommand, in the form used by the PROMPT ENTRY_FORM metacommand, and a SQL script
18
- illustrating how this database can be used to prompt the user for some or all of the
19
- configuration settings. *execsql* version 1.63.0 or later is needed to use this script.
20
-
21
-
22
- Functional Scripts for execsql.py
23
- =================================================
24
-
25
- These script files provide useful functionality that should be accessed by including these
26
- scripts in other SQL scripts and then calling the sub-scripts that they contain.
27
-
28
- Upsert Scripts
29
- ------------------------------------------------
30
-
31
- These scripts perform automated upsert operations on any tables of
32
- any database in a DBMS that supports the standard
33
- *information_schema* views. Currently that includes:
34
-
35
- * PostgreSQL: pg_upsert.sql;
36
-
37
- * MySQL/MariaDB: md_upsert.sql; and
38
-
39
- * SQL Server: ss_upsert.sql.
40
-
41
- These scripts perform the upsert operation by using standard SQL
42
- UPDATE and INSERT statements rather than DBMS-specific implementations
43
- of the SQL MERGE statement.
44
-
45
- Features of these upsert scripts include:
46
-
47
- * They can be applied to any table in any database without modification.
48
-
49
- * They can be applied to multiple tables simultaneously, and will
50
- perform the upsert operations in top-down order to maintain
51
- referential integrity among tables.
52
-
53
- * Prior to performing the upsert operation, they check for null
54
- values in the columns of each staging table that must be non-null in the
55
- corresponding base table.
56
-
57
- * Prior to performing the upsert operation, they check for duplicate
58
- primary key values in the staging tables.
59
-
60
- * Prior to performing the upsert operation, they check foreign keys
61
- against both base tables and any other appropriate staging tables.
62
-
63
- * They will not attempt to perform the upsert operation on any
64
- table if there are any violations of the non-null
65
- checks, primary key checks, or foreign key checks.
66
-
67
- * They produce a table that either a) summarizes the number of
68
- rows that violated each type of non-null and foreign-key check,
69
- or b) summarizes the number of rows updated and the number of
70
- rows inserted for each table.
71
-
72
- * Optionally, they will display all the changes to be made in a
73
- GUI interface, prompting the user to approve each update and
74
- insert operation.
75
-
76
- * Optionally, they will record all operations carried out in a
77
- custom log file; this log may include the SQL statements executed
78
- and the data values that were added or changed.
79
-
80
- * If an execsql console is active, they will use the console's
81
- status bar and progress bar to indicate the activity underway.
82
-
83
-
84
- Complete documentation is available at
85
- `Read The Docs (execsql-upsert) <https://execsql-upsert.readthedocs.io/en/latest/>`_.
86
-
87
-
88
- Table Comparison Scripts
89
- ----------------------------------------------------------
90
-
91
- These scripts generate SQL that can be used to identify differences
92
- in the content of two tables with equivalent structure. These are
93
- specifically intended to be base and staging tables. Running the
94
- SQL provided by these scripts will provide different summaries of
95
- the types of changes that would be made to the base tables by
96
- upserting the staging tables.
97
-
98
- These scripts work with
99
- any tables of any database in a DBMS that supports the standard
100
- *information_schema* views. Currently that includes:
101
-
102
- * PostgreSQL: pg_compare.sql;
103
-
104
- * MySQL/MariaDB: md_compare.sql; and
105
-
106
- * SQL Server: ss_compare.sql.
107
-
108
- Complete documentation is available at
109
- `Read The Docs (execsql-compare) <https://execsql-compare.readthedocs.io/en/latest/>`_.
110
-
111
-
112
- Glossary Creation Scripts
113
- ------------------------------------------------------------
114
-
115
- These scripts create a glossary of column names or other terms
116
- that can be exported to accompany a data summary. These scripts work with
117
- any tables of any database in a DBMS that supports the standard
118
- *information_schema* views. Currently that includes:
119
-
120
- * PostgreSQL: pg_glossary.sql;
121
-
122
- * MySQL/MariaDB: md_glossary.sql; and
123
-
124
- * SQL Server: ss_glossary.sql.
125
-
126
- Complete documentation is available at
127
- `Read The Docs (execsql-glossary) <https://execsql-compare.readthedocs.io/en/latest/>`_.
@@ -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,,