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