instructure-pysqlsync 0.8.5.dev0__tar.gz → 0.8.5.dev1__tar.gz
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.
- {instructure_pysqlsync-0.8.5.dev0/instructure_pysqlsync.egg-info → instructure_pysqlsync-0.8.5.dev1}/PKG-INFO +1 -9
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/README.md +0 -8
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1/instructure_pysqlsync.egg-info}/PKG-INFO +1 -9
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/instructure_pysqlsync.egg-info/SOURCES.txt +1 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/__init__.py +1 -1
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/data_types.py +8 -2
- instructure_pysqlsync-0.8.5.dev1/tests/test_mssql_odbc_types.py +57 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/LICENSE +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/MANIFEST.in +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/instructure_pysqlsync.egg-info/dependency_links.txt +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/instructure_pysqlsync.egg-info/requires.txt +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/instructure_pysqlsync.egg-info/top_level.txt +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/instructure_pysqlsync.egg-info/zip-safe +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pyproject.toml +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/base.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/connection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/data/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/data/exchange.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/data/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/README.md +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/delta/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/delta/data_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/delta/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/delta/engine.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/delta/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/delta/object_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/README.md +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/connection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/discovery.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/engine.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/mutation.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mssql/object_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/connection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/data_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/discovery.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/engine.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/mutation.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/mysql/object_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/README.md +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/connection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/data_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/discovery.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/engine.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/mutation.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/oracle/object_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/connection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/data_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/discovery.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/engine.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/mutation.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/postgresql/object_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/redshift/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/redshift/connection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/redshift/data_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/redshift/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/redshift/engine.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/redshift/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/snowflake/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/snowflake/data_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/snowflake/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/snowflake/engine.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/snowflake/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/snowflake/object_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/test/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/test/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/trino/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/trino/connection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/trino/dependency.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/trino/discovery.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/trino/engine.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/trino/generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/factory.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/constraints.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/data_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/discovery.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/inspection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/mutation.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/object_dict.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/object_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/py_to_sql.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/formation/sql_to_py.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/data_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/entity_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/id_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/key_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/properties.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/py.typed +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/python_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/resultset.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/util/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/util/dataclasses.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/util/dispatch.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/util/typing.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/setup.cfg +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/setup.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/example.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/measure.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/model/__init__.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/model/country.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/model/event.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/model/school.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/model/user.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/params.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/tables.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_api.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_connection.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_converter.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_discovery.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_exchange.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_generator.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_performance.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_synchronize.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_types.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/timed_test.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/update_readme.py +0 -0
- {instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: instructure-pysqlsync
|
|
3
|
-
Version: 0.8.5.
|
|
3
|
+
Version: 0.8.5.dev1
|
|
4
4
|
Summary: Synchronize schema and large volumes of data
|
|
5
5
|
Author-email: "Instructure, Inc." <dapclient@instructure.com>
|
|
6
6
|
Maintainer-email: "Instructure, Inc." <dapclient@instructure.com>
|
|
@@ -234,11 +234,3 @@ All objects are identified either with a local ID (e.g. namespaces and columns)
|
|
|
234
234
|
pysqlsync comes with several database dialects shipped with the library. However, it is possible to create and register new dialects that behave the same way as built-in dialects. In terms of capabilities, there are no differences between built-in and user-defined dialects.
|
|
235
235
|
|
|
236
236
|
If you are about to write integration for a new database dialect, it is recommended that you take one of the existing dialects (e.g. PostgreSQL, Microsoft SQL Server, Oracle or MySQL), and use it as a template. For more information, explore the folder `pysqlsync/dialect`.
|
|
237
|
-
|
|
238
|
-
## Upstream
|
|
239
|
-
|
|
240
|
-
This is an internal fork of [hunyadi/pysqlsync](https://github.com/hunyadi/pysqlsync). To track upstream changes, add the original repository as a remote:
|
|
241
|
-
|
|
242
|
-
```sh
|
|
243
|
-
git remote add hunyadi git@github.com:hunyadi/pysqlsync.git
|
|
244
|
-
```
|
|
@@ -185,11 +185,3 @@ All objects are identified either with a local ID (e.g. namespaces and columns)
|
|
|
185
185
|
pysqlsync comes with several database dialects shipped with the library. However, it is possible to create and register new dialects that behave the same way as built-in dialects. In terms of capabilities, there are no differences between built-in and user-defined dialects.
|
|
186
186
|
|
|
187
187
|
If you are about to write integration for a new database dialect, it is recommended that you take one of the existing dialects (e.g. PostgreSQL, Microsoft SQL Server, Oracle or MySQL), and use it as a template. For more information, explore the folder `pysqlsync/dialect`.
|
|
188
|
-
|
|
189
|
-
## Upstream
|
|
190
|
-
|
|
191
|
-
This is an internal fork of [hunyadi/pysqlsync](https://github.com/hunyadi/pysqlsync). To track upstream changes, add the original repository as a remote:
|
|
192
|
-
|
|
193
|
-
```sh
|
|
194
|
-
git remote add hunyadi git@github.com:hunyadi/pysqlsync.git
|
|
195
|
-
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: instructure-pysqlsync
|
|
3
|
-
Version: 0.8.5.
|
|
3
|
+
Version: 0.8.5.dev1
|
|
4
4
|
Summary: Synchronize schema and large volumes of data
|
|
5
5
|
Author-email: "Instructure, Inc." <dapclient@instructure.com>
|
|
6
6
|
Maintainer-email: "Instructure, Inc." <dapclient@instructure.com>
|
|
@@ -234,11 +234,3 @@ All objects are identified either with a local ID (e.g. namespaces and columns)
|
|
|
234
234
|
pysqlsync comes with several database dialects shipped with the library. However, it is possible to create and register new dialects that behave the same way as built-in dialects. In terms of capabilities, there are no differences between built-in and user-defined dialects.
|
|
235
235
|
|
|
236
236
|
If you are about to write integration for a new database dialect, it is recommended that you take one of the existing dialects (e.g. PostgreSQL, Microsoft SQL Server, Oracle or MySQL), and use it as a template. For more information, explore the folder `pysqlsync/dialect`.
|
|
237
|
-
|
|
238
|
-
## Upstream
|
|
239
|
-
|
|
240
|
-
This is an internal fork of [hunyadi/pysqlsync](https://github.com/hunyadi/pysqlsync). To track upstream changes, add the original repository as a remote:
|
|
241
|
-
|
|
242
|
-
```sh
|
|
243
|
-
git remote add hunyadi git@github.com:hunyadi/pysqlsync.git
|
|
244
|
-
```
|
|
@@ -7,7 +7,7 @@ of Python language elements and database drivers (client libraries).
|
|
|
7
7
|
:see: https://github.com/instructure-internal/pysqlsync
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
__version__ = "0.8.5.
|
|
10
|
+
__version__ = "0.8.5.dev1"
|
|
11
11
|
__author__ = "Instructure, Inc."
|
|
12
12
|
__copyright__ = "Copyright 2023-2025, Levente Hunyadi; 2026 Instructure, Inc."
|
|
13
13
|
__license__ = "MIT"
|
|
@@ -102,9 +102,15 @@ def sql_to_odbc_type(data_type: SqlDataType) -> tuple[int, int, int]:
|
|
|
102
102
|
return pyodbc.SQL_TYPE_TIME, data_type.precision or 6, 0
|
|
103
103
|
|
|
104
104
|
elif isinstance(data_type, SqlFixedCharacterType):
|
|
105
|
-
|
|
105
|
+
# Bind as a wide (Unicode) type so the driver describes the parameter
|
|
106
|
+
# buffer in terms of UTF-16 code units, not bytes. `char`/`varchar`
|
|
107
|
+
# columns under a UTF-8 collation hold multibyte data; binding them as
|
|
108
|
+
# the narrow `SQL_CHAR`/`SQL_VARCHAR` makes `fast_executemany` miscount
|
|
109
|
+
# the buffer width, observed to silently corrupt non-Latin text. SQL
|
|
110
|
+
# Server converts UTF-16 to the column's UTF-8 storage on insert.
|
|
111
|
+
return pyodbc.SQL_WCHAR, data_type.limit or 0, 0
|
|
106
112
|
elif isinstance(data_type, SqlVariableCharacterType):
|
|
107
|
-
return pyodbc.
|
|
113
|
+
return pyodbc.SQL_WVARCHAR, data_type.limit or 0, 0
|
|
108
114
|
elif isinstance(data_type, SqlFixedBinaryType):
|
|
109
115
|
return pyodbc.SQL_BINARY, data_type.storage or 0, 0
|
|
110
116
|
elif isinstance(data_type, SqlVariableBinaryType):
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import importlib.util
|
|
2
|
+
import unittest
|
|
3
|
+
|
|
4
|
+
from pysqlsync.model.data_types import (
|
|
5
|
+
SqlFixedCharacterType,
|
|
6
|
+
SqlVariableCharacterType,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
HAS_PYODBC = importlib.util.find_spec("pyodbc") is not None
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@unittest.skipUnless(HAS_PYODBC, "pyodbc (mssql extra) is not installed")
|
|
13
|
+
class TestMSSQLOdbcTypes(unittest.TestCase):
|
|
14
|
+
"""
|
|
15
|
+
Pins the ODBC type codes that `setinputsizes` feeds to `fast_executemany`.
|
|
16
|
+
|
|
17
|
+
`char`/`varchar` must bind as the *wide* (Unicode) types so the driver
|
|
18
|
+
sizes the bulk parameter buffer in UTF-16 code units rather than bytes;
|
|
19
|
+
the narrow `SQL_CHAR`/`SQL_VARCHAR` silently corrupt non-Latin text under
|
|
20
|
+
a UTF-8 collation. See `sql_to_odbc_type`.
|
|
21
|
+
|
|
22
|
+
The `pyodbc`-dependent imports are local to each test so the module still
|
|
23
|
+
imports (and skips cleanly) where the `mssql` extra is absent.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def test_fixed_character_binds_as_wide(self) -> None:
|
|
27
|
+
import pyodbc
|
|
28
|
+
|
|
29
|
+
from pysqlsync.dialect.mssql.data_types import sql_to_odbc_type
|
|
30
|
+
|
|
31
|
+
odbc_type, size, _ = sql_to_odbc_type(SqlFixedCharacterType(40))
|
|
32
|
+
self.assertEqual(odbc_type, pyodbc.SQL_WCHAR)
|
|
33
|
+
self.assertEqual(size, 40)
|
|
34
|
+
|
|
35
|
+
def test_variable_character_binds_as_wide(self) -> None:
|
|
36
|
+
import pyodbc
|
|
37
|
+
|
|
38
|
+
from pysqlsync.dialect.mssql.data_types import sql_to_odbc_type
|
|
39
|
+
|
|
40
|
+
odbc_type, size, _ = sql_to_odbc_type(SqlVariableCharacterType(40))
|
|
41
|
+
self.assertEqual(odbc_type, pyodbc.SQL_WVARCHAR)
|
|
42
|
+
self.assertEqual(size, 40)
|
|
43
|
+
|
|
44
|
+
def test_unbounded_variable_character_binds_as_wide_size_zero(self) -> None:
|
|
45
|
+
# str -> MSSQLVariableCharacterType() with no limit, i.e. varchar(max);
|
|
46
|
+
# `limit or 0` yields column_size 0, letting the driver size from data.
|
|
47
|
+
import pyodbc
|
|
48
|
+
|
|
49
|
+
from pysqlsync.dialect.mssql.data_types import sql_to_odbc_type
|
|
50
|
+
|
|
51
|
+
odbc_type, size, _ = sql_to_odbc_type(SqlVariableCharacterType())
|
|
52
|
+
self.assertEqual(odbc_type, pyodbc.SQL_WVARCHAR)
|
|
53
|
+
self.assertEqual(size, 0)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == "__main__":
|
|
57
|
+
unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/connection.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/data/__init__.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/data/exchange.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/data/generator.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/README.md
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/dialect/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/__init__.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/data_types.py
RENAMED
|
File without changes
|
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/id_types.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/key_types.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/model/properties.py
RENAMED
|
File without changes
|
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/python_types.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/resultset.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/util/__init__.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/util/dataclasses.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/util/dispatch.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/pysqlsync/util/typing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/model/__init__.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/model/country.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_connection.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_converter.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_discovery.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_exchange.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_generator.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_performance.py
RENAMED
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/test_synchronize.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{instructure_pysqlsync-0.8.5.dev0 → instructure_pysqlsync-0.8.5.dev1}/tests/update_readme.py
RENAMED
|
File without changes
|
|
File without changes
|