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
16 changes: 9 additions & 7 deletions stix2/datastore/relational_db/input_creation.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from stix2.datastore.relational_db.add_method import add_method
from stix2.datastore.relational_db.utils import (
SCO_COMMON_PROPERTIES, SDO_COMMON_PROPERTIES, canonicalize_table_name,
SCO_COMMON_PROPERTIES, SDO_COMMON_PROPERTIES, canonicalize_table_name, shorten_extension_definition_id
)
from stix2.properties import (
BinaryProperty, BooleanProperty, DictionaryProperty,
Expand Down Expand Up @@ -153,9 +153,10 @@ def generate_insert_information(self, name, stix_object, data_sink=None, table_n
for ex_name, ex in stix_object["extensions"].items():
# ignore new extensions - they have no properties
if ex.extension_type is None or not ex.extension_type.startswith("new"):
if ex_name.startswith("extension-definition"):
ex_name = ex_name[0:30]
ex_name = ex_name.replace("extension-definition-", "ext_def")
if ex_name.startswith("extension-definition--"):
# ex_name = ex_name[0:30]
# ex_name = ex_name.replace("extension-definition-", "ext_def")
ex_name = shorten_extension_definition_id(ex_name)
bindings = {
"id": stix_object["id"],
"ext_table_name": canonicalize_table_name(ex_name, schema_name),
Expand Down Expand Up @@ -510,9 +511,10 @@ def generate_insert_for_sub_object(
bindings["id"] = foreign_key_value
if parent_table_name and (not is_extension or level > 0):
type_name = parent_table_name + "_" + type_name
if type_name.startswith("extension-definition"):
type_name = type_name[0:30]
type_name = type_name.replace("extension-definition-", "ext_def")
if type_name.startswith("extension-definition--"):
# type_name = type_name[0:30]
# type_name = type_name.replace("extension-definition-", "ext_def")
type_name = shorten_extension_definition_id(type_name)
sub_insert_statements = list()
for name, prop in stix_object._properties.items():
if name in stix_object:
Expand Down
9 changes: 5 additions & 4 deletions stix2/datastore/relational_db/table_creation.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from stix2.datastore.relational_db.utils import (
SCO_COMMON_PROPERTIES, SDO_COMMON_PROPERTIES, canonicalize_table_name,
determine_column_name, determine_sql_type_from_stix, flat_classes,
get_stix_object_classes,
get_stix_object_classes, shorten_extension_definition_id
)
from stix2.properties import (
BinaryProperty, BooleanProperty, DictionaryProperty,
Expand Down Expand Up @@ -800,9 +800,10 @@ def generate_object_table(
else:
table_name = stix_object_class.__name__
# avoid long table names
if table_name.startswith("extension-definition"):
table_name = table_name[0:30]
table_name = table_name.replace("extension-definition-", "ext_def")
if table_name.startswith("extension-definition--"):
# table_name = table_name[0:30]
# table_name = table_name.replace("extension-definition-", "ext_def")
table_name = shorten_extension_definition_id(table_name)
if parent_table_name:
table_name = parent_table_name + "_" + table_name
if is_embedded_object:
Expand Down
17 changes: 13 additions & 4 deletions stix2/datastore/relational_db/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,10 @@ def table_name_for(stix_type_or_class):
# Applies to registered extension-definition style extensions only.
# Their "_type" attribute is actually set to the extension definition ID,
# rather than a STIX type.
if table_name.startswith("extension-definition"):
table_name = table_name[0:30]
table_name = table_name.replace("extension-definition-", "ext_def")

if table_name.startswith("extension-definition--"):
# table_name = table_name[0:30]
# table_name = table_name.replace("extension-definition-", "ext_def")
table_name = shorten_extension_definition_id(table_name)
table_name = canonicalize_table_name(table_name)
return table_name

Expand Down Expand Up @@ -169,3 +169,12 @@ def determine_column_name(cls_or_inst): # noqa: F811
return "string_value"
elif is_class_or_instance(cls_or_inst, TimestampProperty):
return "timestamp_value"


def shorten_extension_definition_id(id):
id_parts = id.split("--")
uuid_parts = id_parts[1].split("-")
shortened_part = ""
for p in uuid_parts:
shortened_part = shortened_part + p[0] + p[-1]
return "ext_def_" + shortened_part
Loading