Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/xml2db/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
13 changes: 11 additions & 2 deletions src/xml2db/table/reused_table.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from hashlib import sha1

from sqlalchemy import (
Table,
Column,
Expand All @@ -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):
Expand Down Expand Up @@ -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
Expand Down
18 changes: 15 additions & 3 deletions tests/sample_models/orders/base_types.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,19 @@
<xs:simpleType name="CoordinatesType">
<xs:restriction base="xs:float" />
</xs:simpleType>
<xs:simpleType name="CoordinatesListType">
<xs:list itemType="bt:CoordinatesType"/>
</xs:simpleType>
<xs:simpleType name="CoordinatesListType">
<xs:list itemType="bt:CoordinatesType"/>
</xs:simpleType>
<xs:simpleType name="PostalCodeType-base">
<xs:restriction base="bt:stringtype">
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PostalCodeType">
<xs:simpleContent>
<xs:extension base="bt:PostalCodeType-base">
<xs:attribute name="codingSystem" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
10 changes: 2 additions & 8 deletions tests/sample_models/orders/orders.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,10 @@
</xs:choice>
</xs:complexType>

<xs:simpleType name="ZipCodeType-base">
<xs:restriction base="bt:stringtype">
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>

<xs:complexType name="ZipCodeType">
<xs:simpleContent>
<xs:extension base="ZipCodeType-base">
<xs:attribute name="codingSystem" type="xs:string" use="required"/>
<xs:extension base="bt:PostalCodeType">
<xs:attribute name="state" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
Expand Down
1 change: 1 addition & 0 deletions tests/sample_models/orders/orders_ddl_mssql_version0.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions tests/sample_models/orders/orders_ddl_mssql_version1.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 2 additions & 0 deletions tests/sample_models/orders/orders_ddl_mssql_version2.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions tests/sample_models/orders/orders_ddl_mysql_version0.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
1 change: 1 addition & 0 deletions tests/sample_models/orders/orders_ddl_mysql_version1.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
2 changes: 2 additions & 0 deletions tests/sample_models/orders/orders_ddl_mysql_version2.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
2 changes: 2 additions & 0 deletions tests/sample_models/orders/orders_ddl_postgresql_version2.sql
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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),
Expand Down
1 change: 1 addition & 0 deletions tests/sample_models/orders/orders_erd_version0.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ erDiagram
string address
string city
string zip_codingSystem
string zip_state
string zip_value
string country
string-N phoneNumber
Expand Down
1 change: 1 addition & 0 deletions tests/sample_models/orders/orders_erd_version1.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ erDiagram
string address
string city
string zip_codingSystem
string zip_state
string zip_value
string country
string-N phoneNumber
Expand Down
2 changes: 2 additions & 0 deletions tests/sample_models/orders/orders_erd_version2.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -44,6 +45,7 @@ erDiagram
string address
string city
string zip_codingSystem
string zip_state
string zip_value
string country
string-N phoneNumber
Expand Down
2 changes: 1 addition & 1 deletion tests/sample_models/orders/xml/order2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<name>Alice</name>
<address>string</address>
<city>string</city>
<zip codingSystem="int">21093</zip>
<zip codingSystem="int" state="NY">21093</zip>
<country>string</country>
<companyId>
<lei>198210983210983HE1209</lei>
Expand Down