diff --git a/src/xml2db/model.py b/src/xml2db/model.py index 3038189..09dcf39 100644 --- a/src/xml2db/model.py +++ b/src/xml2db/model.py @@ -545,12 +545,15 @@ def get_occurs(particle): or parent_node.type.has_simple_content() ): if parent_node.type.base_type is not None: + parent_base_type = parent_node.type.base_type + while parent_base_type.base_type is not None: + parent_base_type = parent_base_type.base_type ( data_type, min_length, max_length, allow_empty, - ) = recurse_parse_simple_type([parent_node.type.base_type]) + ) = recurse_parse_simple_type([parent_base_type]) else: data_type, min_length, max_length, allow_empty = "string", 0, None, True diff --git a/src/xml2db/table/reused_table.py b/src/xml2db/table/reused_table.py index ce3d62f..3c09851 100644 --- a/src/xml2db/table/reused_table.py +++ b/src/xml2db/table/reused_table.py @@ -1,3 +1,5 @@ +from hashlib import sha1 + from sqlalchemy import ( Table, Column, @@ -10,8 +12,15 @@ Sequence, ) -from .transformed_table import DataModelTableTransformed from .column import DataModelColumn +from .transformed_table import DataModelTableTransformed + + +def shorten_str(x: str, max_len: int = 30) -> str: + if len(x) > max_len: + h = sha1(x.encode("utf8")) + return f"{x[:(max_len - 7)]}_{h.hexdigest()[1:6]}" + return x class DataModelTableReused(DataModelTableTransformed): @@ -79,7 +88,7 @@ def get_col(temp=False): yield from hash_col.get_sqlalchemy_column(temp) yield UniqueConstraint( self.data_model.model_config["record_hash_column_name"], - name=f"{prefix if temp else ''}{self.name}_xml2db_record_hash", + name=f"{prefix if temp else ''}{shorten_str(self.name)}_xml2db_record_hash", ) # build target table diff --git a/tests/sample_models/orders/base_types.xsd b/tests/sample_models/orders/base_types.xsd index cadefa7..c10a3cd 100644 --- a/tests/sample_models/orders/base_types.xsd +++ b/tests/sample_models/orders/base_types.xsd @@ -36,7 +36,19 @@ - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/sample_models/orders/orders.xsd b/tests/sample_models/orders/orders.xsd index c54fcd3..4fa2801 100644 --- a/tests/sample_models/orders/orders.xsd +++ b/tests/sample_models/orders/orders.xsd @@ -11,16 +11,10 @@ - - - - - - - - + + diff --git a/tests/sample_models/orders/orders_ddl_mssql_version0.sql b/tests/sample_models/orders/orders_ddl_mssql_version0.sql index 3371f25..51662d8 100644 --- a/tests/sample_models/orders/orders_ddl_mssql_version0.sql +++ b/tests/sample_models/orders/orders_ddl_mssql_version0.sql @@ -6,6 +6,7 @@ CREATE TABLE orderperson ( address VARCHAR(1000) NULL, city VARCHAR(1000) NULL, [zip_codingSystem] VARCHAR(1000) NULL, + zip_state VARCHAR(1000) NULL, zip_value VARCHAR(1000) NULL, country VARCHAR(1000) NULL, [phoneNumber] VARCHAR(8000) NULL, diff --git a/tests/sample_models/orders/orders_ddl_mssql_version1.sql b/tests/sample_models/orders/orders_ddl_mssql_version1.sql index 21f3854..a7840aa 100644 --- a/tests/sample_models/orders/orders_ddl_mssql_version1.sql +++ b/tests/sample_models/orders/orders_ddl_mssql_version1.sql @@ -6,6 +6,7 @@ CREATE TABLE orderperson ( address VARCHAR(1000) NULL, city VARCHAR(1000) NULL, [zip_codingSystem] VARCHAR(1000) NULL, + zip_state VARCHAR(1000) NULL, zip_value VARCHAR(1000) NULL, country VARCHAR(1000) NULL, [phoneNumber] VARCHAR(8000) NULL, diff --git a/tests/sample_models/orders/orders_ddl_mssql_version2.sql b/tests/sample_models/orders/orders_ddl_mssql_version2.sql index a533b08..d09e427 100644 --- a/tests/sample_models/orders/orders_ddl_mssql_version2.sql +++ b/tests/sample_models/orders/orders_ddl_mssql_version2.sql @@ -17,6 +17,7 @@ CREATE TABLE orderperson ( address VARCHAR(1000) NULL, city VARCHAR(1000) NULL, [zip_codingSystem] VARCHAR(1000) NULL, + zip_state VARCHAR(1000) NULL, zip_value VARCHAR(1000) NULL, country VARCHAR(1000) NULL, [phoneNumber] VARCHAR(8000) NULL, @@ -100,6 +101,7 @@ CREATE TABLE shiporder ( orderperson_address VARCHAR(1000) NULL, orderperson_city VARCHAR(1000) NULL, [orderperson_zip_codingSystem] VARCHAR(1000) NULL, + orderperson_zip_state VARCHAR(1000) NULL, orderperson_zip_value VARCHAR(1000) NULL, orderperson_country VARCHAR(1000) NULL, [orderperson_phoneNumber] VARCHAR(8000) NULL, diff --git a/tests/sample_models/orders/orders_ddl_mysql_version0.sql b/tests/sample_models/orders/orders_ddl_mysql_version0.sql index 70929f2..45347ff 100644 --- a/tests/sample_models/orders/orders_ddl_mysql_version0.sql +++ b/tests/sample_models/orders/orders_ddl_mysql_version0.sql @@ -6,6 +6,7 @@ CREATE TABLE orderperson ( address VARCHAR(255), city VARCHAR(255), `zip_codingSystem` VARCHAR(255), + zip_state VARCHAR(255), zip_value VARCHAR(255), country VARCHAR(255), `phoneNumber` VARCHAR(4000), diff --git a/tests/sample_models/orders/orders_ddl_mysql_version1.sql b/tests/sample_models/orders/orders_ddl_mysql_version1.sql index 89d8d35..2d6626b 100644 --- a/tests/sample_models/orders/orders_ddl_mysql_version1.sql +++ b/tests/sample_models/orders/orders_ddl_mysql_version1.sql @@ -6,6 +6,7 @@ CREATE TABLE orderperson ( address VARCHAR(255), city VARCHAR(255), `zip_codingSystem` VARCHAR(255), + zip_state VARCHAR(255), zip_value VARCHAR(255), country VARCHAR(255), `phoneNumber` VARCHAR(4000), diff --git a/tests/sample_models/orders/orders_ddl_mysql_version2.sql b/tests/sample_models/orders/orders_ddl_mysql_version2.sql index f9901cf..c3ab769 100644 --- a/tests/sample_models/orders/orders_ddl_mysql_version2.sql +++ b/tests/sample_models/orders/orders_ddl_mysql_version2.sql @@ -17,6 +17,7 @@ CREATE TABLE orderperson ( address VARCHAR(255), city VARCHAR(255), `zip_codingSystem` VARCHAR(255), + zip_state VARCHAR(255), zip_value VARCHAR(255), country VARCHAR(255), `phoneNumber` VARCHAR(4000), @@ -100,6 +101,7 @@ CREATE TABLE shiporder ( orderperson_address VARCHAR(255), orderperson_city VARCHAR(255), `orderperson_zip_codingSystem` VARCHAR(255), + orderperson_zip_state VARCHAR(255), orderperson_zip_value VARCHAR(255), orderperson_country VARCHAR(255), `orderperson_phoneNumber` VARCHAR(4000), diff --git a/tests/sample_models/orders/orders_ddl_postgresql_version0.sql b/tests/sample_models/orders/orders_ddl_postgresql_version0.sql index 540e8de..204cd70 100644 --- a/tests/sample_models/orders/orders_ddl_postgresql_version0.sql +++ b/tests/sample_models/orders/orders_ddl_postgresql_version0.sql @@ -6,6 +6,7 @@ CREATE TABLE orderperson ( address VARCHAR(1000), city VARCHAR(1000), "zip_codingSystem" VARCHAR(1000), + zip_state VARCHAR(1000), zip_value VARCHAR(1000), country VARCHAR(1000), "phoneNumber" VARCHAR(8000), diff --git a/tests/sample_models/orders/orders_ddl_postgresql_version1.sql b/tests/sample_models/orders/orders_ddl_postgresql_version1.sql index 7d1bf33..7955a4b 100644 --- a/tests/sample_models/orders/orders_ddl_postgresql_version1.sql +++ b/tests/sample_models/orders/orders_ddl_postgresql_version1.sql @@ -6,6 +6,7 @@ CREATE TABLE orderperson ( address VARCHAR(1000), city VARCHAR(1000), "zip_codingSystem" VARCHAR(1000), + zip_state VARCHAR(1000), zip_value VARCHAR(1000), country VARCHAR(1000), "phoneNumber" VARCHAR(8000), diff --git a/tests/sample_models/orders/orders_ddl_postgresql_version2.sql b/tests/sample_models/orders/orders_ddl_postgresql_version2.sql index 17f6cd2..ed9c440 100644 --- a/tests/sample_models/orders/orders_ddl_postgresql_version2.sql +++ b/tests/sample_models/orders/orders_ddl_postgresql_version2.sql @@ -17,6 +17,7 @@ CREATE TABLE orderperson ( address VARCHAR(1000), city VARCHAR(1000), "zip_codingSystem" VARCHAR(1000), + zip_state VARCHAR(1000), zip_value VARCHAR(1000), country VARCHAR(1000), "phoneNumber" VARCHAR(8000), @@ -100,6 +101,7 @@ CREATE TABLE shiporder ( orderperson_address VARCHAR(1000), orderperson_city VARCHAR(1000), "orderperson_zip_codingSystem" VARCHAR(1000), + orderperson_zip_state VARCHAR(1000), orderperson_zip_value VARCHAR(1000), orderperson_country VARCHAR(1000), "orderperson_phoneNumber" VARCHAR(8000), diff --git a/tests/sample_models/orders/orders_erd_version0.md b/tests/sample_models/orders/orders_erd_version0.md index 443b28c..83291d8 100644 --- a/tests/sample_models/orders/orders_erd_version0.md +++ b/tests/sample_models/orders/orders_erd_version0.md @@ -36,6 +36,7 @@ erDiagram string address string city string zip_codingSystem + string zip_state string zip_value string country string-N phoneNumber diff --git a/tests/sample_models/orders/orders_erd_version1.md b/tests/sample_models/orders/orders_erd_version1.md index 4b07efa..2261d1c 100644 --- a/tests/sample_models/orders/orders_erd_version1.md +++ b/tests/sample_models/orders/orders_erd_version1.md @@ -36,6 +36,7 @@ erDiagram string address string city string zip_codingSystem + string zip_state string zip_value string country string-N phoneNumber diff --git a/tests/sample_models/orders/orders_erd_version2.md b/tests/sample_models/orders/orders_erd_version2.md index 26e96d9..fa07d52 100644 --- a/tests/sample_models/orders/orders_erd_version2.md +++ b/tests/sample_models/orders/orders_erd_version2.md @@ -10,6 +10,7 @@ erDiagram string orderperson_address string orderperson_city string orderperson_zip_codingSystem + string orderperson_zip_state string orderperson_zip_value string orderperson_country string-N orderperson_phoneNumber @@ -44,6 +45,7 @@ erDiagram string address string city string zip_codingSystem + string zip_state string zip_value string country string-N phoneNumber diff --git a/tests/sample_models/orders/xml/order2.xml b/tests/sample_models/orders/xml/order2.xml index 5926472..214f243 100644 --- a/tests/sample_models/orders/xml/order2.xml +++ b/tests/sample_models/orders/xml/order2.xml @@ -6,7 +6,7 @@ Alice
string
string - 21093 + 21093 string 198210983210983HE1209