From 7c1cde273730abd58a63540667d9708da5efe21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 1 May 2016 18:30:28 +0200 Subject: [PATCH 001/216] schema_gen: add cli option to include derived attributes in the schema. fixes https://github.com/xtuml/pyxtuml/issues/1 --- bridgepoint/gen_sql_schema.py | 6 +++++- bridgepoint/ooaofooa.py | 23 +++++++++++++---------- docs/cli.rst | 1 + 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/bridgepoint/gen_sql_schema.py b/bridgepoint/gen_sql_schema.py index 4e863fe..eba5910 100644 --- a/bridgepoint/gen_sql_schema.py +++ b/bridgepoint/gen_sql_schema.py @@ -34,6 +34,10 @@ def main(): help="export sql schema for the component named NAME", action="store", default=None) + parser.add_option("-d", "--derived-attributes", dest="derived", + help="include derived attributes in the schema", + action="store_true", default=False) + parser.add_option("-o", "--output", dest='output', metavar="PATH", help="save sql schema to PATH (required)", action="store", default=None) @@ -59,7 +63,7 @@ def main(): for filename in args: loader.filename_input(filename) - c = loader.build_component(opts.component) + c = loader.build_component(opts.component, opts.derived) xtuml.persist_database(c, opts.output) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index dbbdf5c..b2cf608 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3813,7 +3813,7 @@ def get_related_attributes(r_rgo, r_rto): return l1, l2 -def mk_class(m, o_obj): +def mk_class(m, o_obj, derived_attributes=False): ''' Create a pyxtuml class from a BridgePoint class. ''' @@ -3823,12 +3823,15 @@ def mk_class(m, o_obj): while o_attr: ty = get_attribute_type(o_attr) - if ty and not one(o_attr).O_BATTR[106].O_DBATTR[107](): - attributes.append((o_attr.Name, ty)) - else: + if not derived_attributes and one(o_attr).O_BATTR[106].O_DBATTR[107](): + logger.warning('Omitting derived attribute %s.%s ' % + (o_obj.Key_Lett, o_attr.Name)) + elif not ty: logger.warning('Omitting unsupported attribute %s.%s ' % (o_obj.Key_Lett, o_attr.Name)) - + else: + attributes.append((o_attr.Name, ty)) + o_attr = one(o_attr).O_ATTR[103, 'succeeds']() Cls = m.define_class(o_obj.Key_Lett, list(attributes), o_obj.Descrip) @@ -3959,7 +3962,7 @@ def mk_association(m, r_rel): return fn(m, inst) -def mk_component(bp_model, c_c=None): +def mk_component(bp_model, c_c=None, derived_attributes=False): ''' Create a pyxtuml meta model from a BridgePoint model. Optionally, restrict to classes and associations contained in the @@ -3970,7 +3973,7 @@ def mk_component(bp_model, c_c=None): c_c_filt = lambda sel: c_c is None or is_contained_in(sel, c_c) for o_obj in bp_model.select_many('O_OBJ', c_c_filt): - mk_class(target, o_obj) + mk_class(target, o_obj, derived_attributes) for r_rel in bp_model.select_many('R_REL', c_c_filt): mk_association(target, r_rel) @@ -4004,15 +4007,15 @@ def filename_input(self, path_or_filename): else: xtuml.ModelLoader.filename_input(self, path_or_filename) - def build_component(self, name=None): + def build_component(self, name=None, derived_attributes=False): mm = self.build_metamodel() c_c = mm.select_any('C_C', where(Name=name)) if c_c: - return mk_component(mm, c_c) + return mk_component(mm, c_c, derived_attributes) elif name: raise Exception('Unable to find the component %s' % name) else: - return mk_component(mm, c_c) + return mk_component(mm, c_c, derived_attributes) # Backwards compatabillity with older versions of pyxtuml diff --git a/docs/cli.rst b/docs/cli.rst index 019e25a..cc9ef9c 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -54,6 +54,7 @@ Option Description --version show program's version number and exit --help, -h show this help message and exit --component=NAME, -c NAME export sql schema for the component named NAME +--derived-attributes, -d include derived attributes in the schema --output=PATH, -o PATH save sql schema to PATH (required) --verbosity, -v increase debug logging level ========================= ============================================== From b11373272816176f6f073f425f06e291be011027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 10 May 2016 20:44:05 +0000 Subject: [PATCH 002/216] include requirements.txt in sdists --- MANIFEST.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index 1155b0f..a581012 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,4 @@ include LICENSE include AUTHORS -include README.rst \ No newline at end of file +include README.rst +include requirements.txt \ No newline at end of file From 390a08a3ecf4e158cbc2363c15ead9d274cb6a4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 10 May 2016 20:46:26 +0000 Subject: [PATCH 003/216] set the url listed on pypi.python.org to point at the xtuml organisation repo --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3fc32c3..9008389 100755 --- a/setup.py +++ b/setup.py @@ -53,7 +53,7 @@ def run(self): description='Library for parsing, manipulating, and generating BridgePoint xtUML models', author='John Törnblom', author_email='john.tornblom@gmail.com', - url='https://github.com/john-tornblom/pyxtuml', + url='https://github.com/xtuml/pyxtuml', license='GPLv3', classifiers=[ 'Development Status :: 4 - Beta', From a074c8b5e5669da34f76b24ae45a656471196654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 10 May 2016 20:47:47 +0000 Subject: [PATCH 004/216] bump the python3 language compatability from 3.4 to 3.5 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9008389..59507e1 100755 --- a/setup.py +++ b/setup.py @@ -62,7 +62,7 @@ def run(self): 'Topic :: Software Development :: Compilers', 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.4'], + 'Programming Language :: Python :: 3.5'], keywords='xtuml bridgepoint', platforms=["Linux"], packages=['xtuml', 'bridgepoint'], From bc6fc81b128a0cf398e829ba76f0ca0c19a9db97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 28 May 2016 14:50:00 +0200 Subject: [PATCH 005/216] setup: remove platforms specification, pyxtuml is generic and works on most platforms that got python --- setup.py | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.py b/setup.py index 59507e1..18ecb77 100755 --- a/setup.py +++ b/setup.py @@ -64,7 +64,6 @@ def run(self): 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.5'], keywords='xtuml bridgepoint', - platforms=["Linux"], packages=['xtuml', 'bridgepoint'], requires=['ply'], cmdclass={'build_py': BuildCommand, From 46b59af9ca800ec1d178063f5e06f5ea51859fa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 28 May 2016 14:50:45 +0200 Subject: [PATCH 006/216] docs: change URLs pointing at github.com/john-tornblom to github.com/xtuml --- docs/contributing.rst | 2 +- docs/getting-started.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/contributing.rst b/docs/contributing.rst index 5b2508f..da6e47c 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -1,7 +1,7 @@ Contributing ============ If you encounter problems with pyxtuml, please `file a github issue -`__. If you plan on sending +`__. If you plan on sending pull request which affect more than a few lines of code, please file an issue before you start to work on you changes. This will allow us to discuss the solution properly before you commit time and effort. diff --git a/docs/getting-started.rst b/docs/getting-started.rst index 29f9377..1be3e54 100644 --- a/docs/getting-started.rst +++ b/docs/getting-started.rst @@ -26,7 +26,7 @@ You could also fetch the source code from github and install it manually: :: - $ git clone https://github.com/john-tornblom/pyxtuml.git + $ git clone https://github.com/xtuml/pyxtuml.git $ cd pyxtuml $ python setup.py install @@ -40,7 +40,7 @@ Usage example ------------- The `examples -folder `__ +folder `__ contains a few scripts which demonstrate how pyxtuml may be used. The following command will create an empty metamodel and populate it From a5141d4a70177b3a446c12ee70c47876fede5cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 10 May 2016 20:51:53 +0000 Subject: [PATCH 007/216] update url to reaththedocs --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 9f58634..73dc225 100644 --- a/README.rst +++ b/README.rst @@ -10,7 +10,7 @@ pyxtuml is a python library for parsing, manipulating, and generating Documentation ============= -Information on how to use pyxtuml is available at `Read the Docs `__. +Information on how to use pyxtuml is available at `Read the Docs `__. ============== Reporting bugs From e640ec66f229412b12504972784d6324bc4532ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 4 Jun 2016 13:33:04 +0000 Subject: [PATCH 008/216] cosmetics --- tests/test_xtuml/test_load.py | 137 ++++++++++++++++------------------ 1 file changed, 64 insertions(+), 73 deletions(-) diff --git a/tests/test_xtuml/test_load.py b/tests/test_xtuml/test_load.py index f0fce81..d0cfc9d 100644 --- a/tests/test_xtuml/test_load.py +++ b/tests/test_xtuml/test_load.py @@ -6,31 +6,27 @@ import xtuml -from tests.test_xtuml.utils import expect_exception - -def load(fn): +def load_docstring(fn): ''' Decorator for loading a meta model from a test case doc string ''' def load_wrapper(self, *args, **kwargs): - self.loader.input(fn.__doc__) - metamodel = self.loader.build_metamodel() - fn(self, metamodel) - + try: + loader = xtuml.ModelLoader() + loader.input(fn.__doc__) + metamodel = loader.build_metamodel() + fn(self, metamodel) + except Exception as ex: + fn(self, ex) + return load_wrapper class TestLoader(unittest.TestCase): ''' - Test suite for the class xtuml.ModelLoader + Test suite for loading serialized models ''' - - def setUp(self): - self.loader = xtuml.ModelLoader() - - def tearDown(self): - del self.loader def test_filename_input(self): resources = os.path.dirname(__file__) + os.sep + '..' + os.sep + 'resources' @@ -40,7 +36,7 @@ def test_filename_input(self): metamodel = xtuml.load_metamodel([globs, schema]) self.assertTrue(metamodel.select_any('S_DT', xtuml.where_eq(Name='integer')) is not None) - @load + @load_docstring def test_table_named_create(self, m): ''' CREATE TABLE CREATE (Id UNIQUE_ID); @@ -48,7 +44,7 @@ def test_table_named_create(self, m): ''' self.assertTrue(m.select_any('CREATE') is not None) - @load + @load_docstring def test_table_named_table(self, m): ''' CREATE TABLE TABLE (Id UNIQUE_ID); @@ -56,7 +52,7 @@ def test_table_named_table(self, m): ''' self.assertTrue(m.select_any('TABLE') is not None) - @load + @load_docstring def test_table_named_insert(self, m): ''' CREATE TABLE INSERT (Id UNIQUE_ID); @@ -64,7 +60,7 @@ def test_table_named_insert(self, m): ''' self.assertTrue(m.select_any('INSERT') is not None) - @load + @load_docstring def test_table_named_into(self, m): ''' CREATE TABLE INTO (Id UNIQUE_ID); @@ -72,7 +68,7 @@ def test_table_named_into(self, m): ''' self.assertTrue(m.select_any('INTO') is not None) - @load + @load_docstring def test_table_named_values(self, m): ''' CREATE TABLE VALUES (Id UNIQUE_ID); @@ -80,7 +76,7 @@ def test_table_named_values(self, m): ''' self.assertTrue(m.select_any('VALUES') is not None) - @load + @load_docstring def test_table_named_rop(self, m): ''' CREATE TABLE ROP (Id UNIQUE_ID); @@ -88,7 +84,7 @@ def test_table_named_rop(self, m): ''' self.assertTrue(m.select_any('ROP') is not None) - @load + @load_docstring def test_table_named_ref_id(self, m): ''' CREATE TABLE REF_ID (Id UNIQUE_ID); @@ -96,7 +92,7 @@ def test_table_named_ref_id(self, m): ''' self.assertTrue(m.select_any('REF_ID') is not None) - @load + @load_docstring def test_table_named_from(self, m): ''' CREATE TABLE FROM (Id UNIQUE_ID); @@ -104,7 +100,7 @@ def test_table_named_from(self, m): ''' self.assertTrue(m.select_any('FROM') is not None) - @load + @load_docstring def test_table_named_to(self, m): ''' CREATE TABLE TO (Id UNIQUE_ID); @@ -112,7 +108,7 @@ def test_table_named_to(self, m): ''' self.assertTrue(m.select_any('TO') is not None) - @load + @load_docstring def test_table_named_phrase(self, m): ''' CREATE TABLE PHRASE (Id UNIQUE_ID); @@ -120,7 +116,7 @@ def test_table_named_phrase(self, m): ''' self.assertTrue(m.select_any('PHRASE') is not None) - @load + @load_docstring def test_table_named_true(self, m): ''' CREATE TABLE TRUE (Id UNIQUE_ID); @@ -128,7 +124,7 @@ def test_table_named_true(self, m): ''' self.assertTrue(m.select_any('TRUE') is not None) - @load + @load_docstring def test_table_named_false(self, m): ''' CREATE TABLE FALSE (Id UNIQUE_ID); @@ -136,7 +132,7 @@ def test_table_named_false(self, m): ''' self.assertTrue(m.select_any('FALSE') is not None) - @load + @load_docstring def test_empty_attribute_sequence(self, m): ''' CREATE TABLE X (); @@ -144,7 +140,7 @@ def test_empty_attribute_sequence(self, m): ''' self.assertTrue(m.select_any('X') is not None) - @load + @load_docstring def test_insert_string(self, m): ''' CREATE TABLE X (Id STRING); @@ -154,7 +150,7 @@ def test_insert_string(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, 'TEST') - @load + @load_docstring def test_insert_escaped_string(self, m): ''' CREATE TABLE X (Id STRING); @@ -164,7 +160,7 @@ def test_insert_escaped_string(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, "TE'ST") - @load + @load_docstring def test_insert_null_uuid(self, m): ''' CREATE TABLE X (Id UNIQUE_ID); @@ -174,7 +170,7 @@ def test_insert_null_uuid(self, m): self.assertTrue(val is not None) self.assertEqual(0, val.Id) - @load + @load_docstring def test_insert_zero_uuid(self, m): ''' CREATE TABLE X (Id UNIQUE_ID); @@ -183,7 +179,7 @@ def test_insert_zero_uuid(self, m): val = m.select_any('X') self.assertEqual(0, val.Id) - @load + @load_docstring def test_insert_positive_real(self, m): ''' CREATE TABLE X (Id REAL); @@ -193,7 +189,7 @@ def test_insert_positive_real(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, 1.1) - @load + @load_docstring def test_insert_negative_real(self, m): ''' CREATE TABLE X (Id REAL); @@ -203,7 +199,7 @@ def test_insert_negative_real(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, -5.2) - @load + @load_docstring def test_insert_positive_integer(self, m): ''' CREATE TABLE X (Id INTEGER); @@ -213,7 +209,7 @@ def test_insert_positive_integer(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, 5) - @load + @load_docstring def test_insert_negative_integer(self, m): ''' CREATE TABLE X (Id INTEGER); @@ -223,7 +219,7 @@ def test_insert_negative_integer(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, -1000) - @load + @load_docstring def test_insert_true(self, m): ''' CREATE TABLE X (Id BOOLEAN); @@ -233,7 +229,7 @@ def test_insert_true(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, True) - @load + @load_docstring def test_insert_false(self, m): ''' CREATE TABLE X (Id BOOLEAN); @@ -243,7 +239,7 @@ def test_insert_false(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, False) - @load + @load_docstring def test_rop_named_as_cardinality(self, m): ''' CREATE TABLE M (Id INTEGER, MC_Id INTEGER); @@ -263,7 +259,7 @@ def test_rop_named_as_cardinality(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, 2) - @load + @load_docstring def test_rop_without_identifier_sequence(self, m): ''' CREATE TABLE X (); @@ -281,105 +277,100 @@ def test_rop_without_identifier_sequence(self, m): y = xtuml.navigate_one(x).Y[1]() self.assertTrue(y is not None) - @load + @load_docstring def test_empty_input(self, m): '''''' pass - @load + @load_docstring def test_empty_input_with_comment(self, m): '''-- Some comment''' pass - @expect_exception(xtuml.ParsingException) - @load + @load_docstring def test_illegal_character(self, m): ''' CREATE TABLE & (Id INTEGER); ''' - - @expect_exception(xtuml.ParsingException) - @load + self.assertIsInstance(m, xtuml.ParsingException) + + @load_docstring def test_missing_semicolon(self, m): ''' CREATE TABLE X (Id INTEGER) ''' + self.assertIsInstance(m, xtuml.ParsingException) - @expect_exception(xtuml.ParsingException) - @load + @load_docstring def test_invalid_token_sequence(self, m): ''' TABLE CREATE X (Id INTEGER); ''' - self.assertTrue(False) # Should not execute + self.assertIsInstance(m, xtuml.ParsingException) - @expect_exception(xtuml.ParsingException) - @load + @load_docstring def test_invalid_first_cardinality_number(self, m): ''' CREATE ROP REF_ID R1 FROM 2 X ( Id ) TO 1 Y ( Id ); ''' - self.assertTrue(False) # Should not execute + self.assertIsInstance(m, xtuml.ParsingException) - @expect_exception(xtuml.ParsingException) - @load + @load_docstring def test_invalid_second_cardinality_number(self, m): ''' CREATE ROP REF_ID R1 FROM 1 X ( Id ) TO 2 Y ( Id ); ''' - self.assertTrue(False) # Should not execute + self.assertIsInstance(m, xtuml.ParsingException) - @expect_exception(xtuml.ParsingException) - @load + @load_docstring def test_invalid_first_cardinality_letter(self, m): ''' CREATE ROP REF_ID R1 FROM 1 X ( Id ) TO X Y ( Id ); ''' - self.assertTrue(False) # Should not execute + self.assertIsInstance(m, xtuml.ParsingException) - @expect_exception(xtuml.ParsingException) - @load + @load_docstring def test_invalid_second_cardinality_letter(self, m): ''' CREATE ROP REF_ID R1 FROM Y X ( Id ) TO 1 Y ( Id ); ''' - self.assertTrue(False) # Should not execute + self.assertIsInstance(m, xtuml.ParsingException) - @expect_exception(xtuml.ParsingException) - @load + @load_docstring def test_invalid_boolean_literal(self, m): ''' CREATE TABLE X (B BOOLEAN); INSERT INTO X VALUES ('test'); ''' + self.assertIsInstance(m, xtuml.ParsingException) - @expect_exception(xtuml.ParsingException) - @load + @load_docstring def test_invalid_type(self, m): ''' CREATE TABLE X (VAR SOME_TYPE); INSERT INTO X VALUES ('test'); ''' + self.assertIsInstance(m, xtuml.ParsingException) - @load + @load_docstring def test_insert_with_undefined_table_and_argument(self, m): ''' INSERT INTO X VALUES ('test'); ''' self.assertTrue(m.select_any('X')) - @load + @load_docstring def test_insert_with_undefined_table(self, m): ''' INSERT INTO X VALUES (); ''' self.assertTrue(m.select_any('X')) - @load + @load_docstring def test_insert_with_undefined_argument(self, m): ''' CREATE TABLE X (VAR STRING); @@ -387,7 +378,7 @@ def test_insert_with_undefined_argument(self, m): ''' self.assertTrue(m.select_any('X')) - @load + @load_docstring def test_insert_with_missing_argument(self, m): ''' CREATE TABLE X (VAR STRING); @@ -395,7 +386,7 @@ def test_insert_with_missing_argument(self, m): ''' self.assertTrue(m.select_any('X')) - @load + @load_docstring def test_insert_named_values(self, m): ''' CREATE TABLE X (VAR1 STRING, VAR2 BOOLEAN, VAR3 INTEGER); @@ -407,7 +398,7 @@ def test_insert_named_values(self, m): self.assertEqual(x.VAR2, True) self.assertEqual(x.VAR3, 5) - @load + @load_docstring def test_insert_incomplete_named_values(self, m): ''' CREATE TABLE X (VAR1 STRING, VAR2 BOOLEAN, VAR3 INTEGER); @@ -419,7 +410,7 @@ def test_insert_incomplete_named_values(self, m): self.assertEqual(x.VAR2, True) self.assertTrue(x.VAR3 is None) - @load + @load_docstring def test_insert_value_named_self(self, m): ''' CREATE TABLE X (self STRING); @@ -429,7 +420,7 @@ def test_insert_value_named_self(self, m): self.assertTrue(x) self.assertEqual(x.self, 'test') - @load + @load_docstring def test_insert_unknown_named_values(self, m): ''' INSERT INTO X (VAR2, VAR1) VALUES (TRUE, 'test'); From a38a06cec084db6faa4f71d122ccd3b90d9e9d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 4 Jun 2016 14:44:31 +0000 Subject: [PATCH 009/216] model: improve the reflexive sorting algorithm upon recursion --- xtuml/model.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 72536fc..57302bd 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -793,27 +793,29 @@ def sort_reflexive(set_of_instances, rel_id, phrase): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id - + + # Figure out the phrase in the other direction kind = type(set_of_instances.first).__name__.upper() ass = next(iter(set_of_instances.first.__r__[rel_id])) if ass.source.phrase == phrase: other_phrase = ass.target.phrase else: other_phrase = ass.source.phrase - + first_filt = lambda sel: not navigate_one(sel).nav(kind, rel_id, phrase)() - set_of_instances.first.__r__[rel_id] + first_instances = list(filter(first_filt, set_of_instances)) + if not first_instances: + #the instance sequence is recursive, start anywhere + first_instances = [set_of_instances.first] + def sequence_generator(): - count = 0 - for inst in filter(first_filt, set_of_instances): + for first in first_instances: + inst = first while inst: - count += 1 yield inst inst = navigate_one(inst).nav(kind, rel_id, other_phrase)() - - if count > len(set_of_instances): - raise ModelException('Detected recursion in ' - 'reflexive navigation') + if inst is first: + break return QuerySet(sequence_generator()) From 088a183fcb3055ff9de7380e99027c46b846ff1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 4 Jun 2016 14:48:21 +0000 Subject: [PATCH 010/216] test: fix reflexive recusrion sorting test case, and clean up test cases that expect exceptions to be thrown --- tests/test_xtuml/test_metamodel.py | 83 ++++++++++++++---------------- tests/test_xtuml/utils.py | 12 ----- 2 files changed, 40 insertions(+), 55 deletions(-) delete mode 100644 tests/test_xtuml/utils.py diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 86cf5d8..2b81f3b 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -7,8 +7,6 @@ from bridgepoint import ooaofooa from xtuml import where_eq as where -from tests.test_xtuml.utils import expect_exception - class TestAssociation(unittest.TestCase): ''' @@ -67,9 +65,8 @@ def testNavigateNone(self): self.assertIsNone(xtuml.navigate_one(None)()) self.assertEqual(len(xtuml.navigate_many(None)()), 0) - @expect_exception(xtuml.ModelException) def testNavigateInvalidHandle(self): - self.assertIsNone(xtuml.navigate_one(50)()) + self.assertRaises(xtuml.ModelException, xtuml.navigate_one, 50) class TestModel(unittest.TestCase): @@ -194,27 +191,26 @@ def testCaseSensitivity(self): self.assertEqual(len(self.metamodel.select_many('Aa')), 4) self.assertEqual(len(self.metamodel.select_many('aa')), 4) - @expect_exception(xtuml.ModelException) def testUnknownType(self): self.metamodel.define_class('A', [('Id', '')]) - self.metamodel.new('A') + self.assertRaises(xtuml.ModelException, self.metamodel.new, 'A') - @expect_exception(xtuml.ModelException) def testUndefinedClass(self): - self.metamodel.new('MY_UNDEFINED_CLASS') + self.assertRaises(xtuml.ModelException, self.metamodel.new, + 'MY_UNDEFINED_CLASS') - @expect_exception(xtuml.ModelException) def testRedefinedClass1(self): self.metamodel.define_class('MY_CLASS', []) - self.metamodel.define_class('MY_CLASS', []) + self.assertRaises(xtuml.ModelException, self.metamodel.define_class, + 'MY_CLASS', []) - @expect_exception(xtuml.ModelException) def testSelectAnyUndefined(self): - self.metamodel.select_any('MY_CLASS') + self.assertRaises(xtuml.ModelException, self.metamodel.select_any, + 'MY_CLASS') - @expect_exception(xtuml.ModelException) def testSelectManyUndefined(self): - self.metamodel.select_many('MY_CLASS') + self.assertRaises(xtuml.ModelException, self.metamodel.select_many, + 'MY_CLASS') def testRelate(self): s_edt = self.metamodel.new('S_EDT') @@ -231,11 +227,10 @@ def testDelete(self): inst = self.metamodel.select_any('S_DT', where(Name='void')) self.assertFalse(inst) - @expect_exception(xtuml.ModelException) def testDeleteRwise(self): inst = self.metamodel.select_any('S_DT', where(Name='void')) xtuml.delete(inst) - xtuml.delete(inst) + self.assertRaises(xtuml.ModelException, xtuml.delete, inst) def testClone(self): s_ee = self.metamodel.new('S_EE', Name='Test', Descrip='test', Key_Lett='TEST') @@ -262,10 +257,9 @@ def testClone(self): self.assertEqual(pe_pe_clone.Package_ID, pe_pe.Package_ID) self.assertEqual(pe_pe_clone.Component_ID, pe_pe.Component_ID) self.assertEqual(pe_pe_clone.type, pe_pe.type) - - @expect_exception(xtuml.ModelException) + def testDeleteUnknownInstance(self): - xtuml.delete(self) + self.assertRaises(xtuml.ModelException, xtuml.delete, self) def testRelateReflexive1(self): inst1 = self.metamodel.new('ACT_SMT') @@ -304,18 +298,23 @@ def testSortReflexiveNone(self): inst_set = xtuml.sort_reflexive(None, None, None) self.assertEqual(len(inst_set), 0) - @expect_exception(xtuml.ModelException) def testSortReflexiveWithRecursion(self): - act_blk = self.metamodel.new('ACT_BLK') - first = self.metamodel.new('ACT_SMT') - act_smt = self.metamodel.new('ACT_SMT') - self.assertTrue(xtuml.relate(act_blk, first, 602)) - self.assertTrue(xtuml.relate(first, act_smt, 661, 'succeeds')) - self.assertTrue(xtuml.relate(act_smt, act_smt, 661, 'succeeds')) + p1 = self.metamodel.new('S_BPARM', Name='p1') + p2 = self.metamodel.new('S_BPARM', Name='p2') + p3 = self.metamodel.new('S_BPARM', Name='p3') + p4 = self.metamodel.new('S_BPARM', Name='p4') - inst_set = xtuml.navigate_many(act_blk).ACT_SMT[602]() - self.assertEqual(len(inst_set), 1) - xtuml.sort_reflexive(inst_set, 661, 'precedes') + self.assertTrue(xtuml.relate(p1, p2, 55, 'precedes')) + self.assertTrue(xtuml.relate(p2, p3, 55, 'precedes')) + self.assertTrue(xtuml.relate(p3, p4, 55, 'precedes')) + self.assertTrue(xtuml.relate(p4, p1, 55, 'precedes')) + + inst_set = self.metamodel.select_many('S_BPARM') + inst_set = xtuml.sort_reflexive(inst_set, 55, 'precedes') + + self.assertEqual(len(inst_set), 4) + for inst1, inst2 in zip(inst_set, [p1, p2, p3, p4]): + self.assertEqual(inst1, inst2) def testRelateReflexive2(self): inst1 = self.metamodel.new('ACT_SMT') @@ -328,12 +327,12 @@ def testRelateReflexive2(self): self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) - @expect_exception(xtuml.ModelException) def testRelateReflexiveWithoutPhrase(self): inst1 = self.metamodel.new('ACT_SMT') inst2 = self.metamodel.new('ACT_SMT') - xtuml.relate(inst1, inst2, 661, '') + self.assertRaises(xtuml.ModelException, xtuml.relate, + inst1, inst2, 661, '') def testRelateInvertedOrder(self): s_edt = self.metamodel.new('S_EDT') @@ -343,12 +342,10 @@ def testRelateInvertedOrder(self): self.assertTrue(xtuml.relate(s_edt, s_dt, 17)) self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) - @expect_exception(xtuml.ModelException) def testRelateInvalidRelId(self): s_edt = self.metamodel.new('S_EDT') s_dt = self.metamodel.new('S_DT') - xtuml.relate(s_edt, s_dt, 0) - self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) + self.assertRaises(xtuml.ModelException, xtuml.relate, s_edt, s_dt, 0) def testUnrelate(self): inst1 = self.metamodel.new('ACT_SMT') @@ -549,18 +546,19 @@ def testNonPersistingAttribute(self): self.assertEqual(getattr(inst, 'test3'), 3) self.assertEqual(inst.test3, 3) - @expect_exception(AttributeError) def testUndefinedAttribute1(self): inst = xtuml.BaseObject() - _ = getattr(inst, 'test') + self.assertRaises(AttributeError, getattr, inst, 'test') - - @expect_exception(AttributeError) def testUndefinedAttribute2(self): inst = xtuml.BaseObject() - _ = inst.test - - + try: + _ = inst.test + self.fail('AttributeError expected') + except AttributeError: + pass + + class TestQuerySet(unittest.TestCase): ''' Test suite for the class xtuml.QuerySet @@ -598,10 +596,9 @@ def testNotEqualOperator(self): q2 = xtuml.QuerySet([1, 3, 2]) self.assertNotEqual(q1, q2) - @expect_exception(KeyError) def testPopEmpty(self): q = xtuml.QuerySet() - q.pop() + self.assertRaises(KeyError, q.pop) def testPopLast(self): q1 = xtuml.QuerySet([1, 2]) diff --git a/tests/test_xtuml/utils.py b/tests/test_xtuml/utils.py deleted file mode 100644 index 54f7470..0000000 --- a/tests/test_xtuml/utils.py +++ /dev/null @@ -1,12 +0,0 @@ -# encoding: utf-8 -# Copyright (C) 2014-2015 John Törnblom - -def expect_exception(exception): - ''' - Decorator for expecting exceptions to be thrown from a test case - ''' - def test_decorator(fn): - def test_decorated(self, *args, **kwargs): - self.assertRaises(exception, fn, self, *args, **kwargs) - return test_decorated - return test_decorator From 4d2497932cdf8eca1ea21c51cb442317fa533cbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 4 Jun 2016 15:03:18 +0000 Subject: [PATCH 011/216] test: cosmetics --- tests/test_xtuml/test_metamodel.py | 131 ++++++++++++++--------------- 1 file changed, 65 insertions(+), 66 deletions(-) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 2b81f3b..6300095 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -13,7 +13,7 @@ class TestAssociation(unittest.TestCase): Test suite for the class xtuml.AssociationLink ''' - def testAssociationConstructor(self): + def test_association_constructor(self): l1 = xtuml.AssociationLink('CLASS1', '1C', [], 'next') l2 = xtuml.AssociationLink('CLASS1', '1C', [], 'prev') ass = xtuml.Association(1, l1, l2) @@ -26,7 +26,7 @@ def testAssociationConstructor(self): self.assertEqual(ass.id, 'R2') self.assertFalse(ass.is_reflexive) - def testAssociationLinkConstructor(self): + def test_association_link_constructor(self): l = xtuml.AssociationLink('CLASS', '1', [], 'test') self.assertFalse(l.is_many) self.assertFalse(l.is_conditional) @@ -61,11 +61,11 @@ class TestNavChain(unittest.TestCase): Test suite for the class xtuml.NavChain ''' - def testNavigateNone(self): + def test_navigate_none(self): self.assertIsNone(xtuml.navigate_one(None)()) self.assertEqual(len(xtuml.navigate_many(None)()), 0) - def testNavigateInvalidHandle(self): + def test_navigate_invalid_handle(self): self.assertRaises(xtuml.ModelException, xtuml.navigate_one, 50) @@ -84,15 +84,15 @@ def setUp(self): def tearDown(self): del self.metamodel - def testSelectAny(self): + def test_select_any(self): m = self.metamodel self.assertNotEqual(m.select_any('S_DT'), None) - def testSelectOne(self): + def test_select_one(self): m = self.metamodel self.assertNotEqual(m.select_one('S_DT'), None) - def testSelectMany(self): + def test_select_many(self): m = self.metamodel q = m.select_many('S_DT') self.assertIsInstance(q, xtuml.QuerySet) @@ -102,36 +102,36 @@ def testSelectMany(self): self.assertIsInstance(q, xtuml.QuerySet) self.assertTrue(len(q) == 0) - def testSelectAnyWhere(self): + def test_select_any_where(self): m = self.metamodel inst = m.select_any('S_DT', where(Name='void')) self.assertEqual(inst.Name, 'void') - def testNavOne(self): + def test_navigate_one(self): m = self.metamodel s_dt = m.select_any('S_DT', where(Name='void')) pe_pe = xtuml.navigate_one(s_dt).PE_PE[8001](lambda inst: True) self.assertEqual(s_dt.DT_ID, pe_pe.Element_ID) - def testNavMany(self): + def test_navigate_many(self): m = self.metamodel s_dt = m.select_many('S_DT') pe_pe = xtuml.navigate_many(s_dt).PE_PE[8001](lambda inst: True) self.assertEqual(len(s_dt), len(pe_pe)) - def testNavSubtype(self): + def test_navigate_suptype(self): m = self.metamodel s_dt = m.select_any('S_DT', where(Name='void')) s_cdt = xtuml.navigate_subtype(s_dt, 17) self.assertTrue(s_cdt) self.assertEqual(s_cdt.__class__.__name__, 'S_CDT') - def testEmpty(self): + def test_empty(self): m = self.metamodel self.assertTrue(len(m.select_many('S_DT', lambda inst: False)) == 0) self.assertFalse(len(m.select_many('S_DT')) == 0) - def testCardinality(self): + def test_cardinality(self): m = self.metamodel q = m.select_many('S_DT', lambda inst: False) @@ -146,7 +146,7 @@ def testCardinality(self): self.assertEqual(x, len(q)) - def testIsSet(self): + def test_is_set(self): m = self.metamodel q = m.select_many('S_DT', lambda inst: False) @@ -155,13 +155,13 @@ def testIsSet(self): q = m.select_many('S_DT') self.assertIsInstance(q, xtuml.QuerySet) - def testIsInstance(self): + def test_is_instance(self): m = self.metamodel q = m.select_any('S_DT') self.assertIsInstance(q, xtuml.BaseObject) - def testQueryOrder(self): + def test_query_order(self): m = self.metamodel q = m.select_many('S_DT') @@ -172,7 +172,7 @@ def testQueryOrder(self): self.assertEqual(index == length - 1, inst == q.last) self.assertEqual(index != length - 1, inst != q.last) - def testCaseSensitivity(self): + def test_case_sensitivity(self): self.metamodel.define_class('Aa', []) self.metamodel.new('AA') @@ -191,28 +191,28 @@ def testCaseSensitivity(self): self.assertEqual(len(self.metamodel.select_many('Aa')), 4) self.assertEqual(len(self.metamodel.select_many('aa')), 4) - def testUnknownType(self): + def test_unknown_type(self): self.metamodel.define_class('A', [('Id', '')]) self.assertRaises(xtuml.ModelException, self.metamodel.new, 'A') - def testUndefinedClass(self): + def test_undefined_class(self): self.assertRaises(xtuml.ModelException, self.metamodel.new, 'MY_UNDEFINED_CLASS') - def testRedefinedClass1(self): + def test_redefined_class(self): self.metamodel.define_class('MY_CLASS', []) self.assertRaises(xtuml.ModelException, self.metamodel.define_class, 'MY_CLASS', []) - def testSelectAnyUndefined(self): + def test_select_any_undefined(self): self.assertRaises(xtuml.ModelException, self.metamodel.select_any, 'MY_CLASS') - def testSelectManyUndefined(self): + def test_select_many_undefined(self): self.assertRaises(xtuml.ModelException, self.metamodel.select_many, 'MY_CLASS') - def testRelate(self): + def test_relate(self): s_edt = self.metamodel.new('S_EDT') s_dt = self.metamodel.new('S_DT') pe_pe = self.metamodel.new('PE_PE') @@ -220,19 +220,19 @@ def testRelate(self): self.assertTrue(xtuml.relate(s_dt, s_edt, 17)) self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) - def testDelete(self): + def test_delete(self): inst = self.metamodel.select_any('S_DT', where(Name='void')) xtuml.delete(inst) inst = self.metamodel.select_any('S_DT', where(Name='void')) self.assertFalse(inst) - def testDeleteRwise(self): + def test_delete_twise(self): inst = self.metamodel.select_any('S_DT', where(Name='void')) xtuml.delete(inst) self.assertRaises(xtuml.ModelException, xtuml.delete, inst) - def testClone(self): + def test_clone(self): s_ee = self.metamodel.new('S_EE', Name='Test', Descrip='test', Key_Lett='TEST') pe_pe = self.metamodel.new('PE_PE') self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) @@ -248,7 +248,6 @@ def testClone(self): self.assertEqual(s_ee_clone.Descrip, s_ee.Descrip) self.assertEqual(s_ee_clone.Key_Lett, s_ee.Key_Lett) - pe_pe_clone = xtuml.navigate_one(s_ee_clone).PE_PE[8001]() self.assertTrue(pe_pe_clone) self.assertNotEqual(pe_pe, pe_pe_clone) @@ -258,10 +257,10 @@ def testClone(self): self.assertEqual(pe_pe_clone.Component_ID, pe_pe.Component_ID) self.assertEqual(pe_pe_clone.type, pe_pe.type) - def testDeleteUnknownInstance(self): + def test_delete_unknown_instance(self): self.assertRaises(xtuml.ModelException, xtuml.delete, self) - def testRelateReflexive1(self): + def test_relate_reflexive_one_to_other(self): inst1 = self.metamodel.new('ACT_SMT') inst2 = self.metamodel.new('ACT_SMT') act_blk = self.metamodel.new('ACT_BLK') @@ -272,7 +271,18 @@ def testRelateReflexive1(self): self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) - def testSortReflexive(self): + def test_relate_reflexive_other_to_one(self): + inst1 = self.metamodel.new('ACT_SMT') + inst2 = self.metamodel.new('ACT_SMT') + act_blk = self.metamodel.new('ACT_BLK') + + self.assertTrue(xtuml.relate(inst1, act_blk, 602)) + self.assertTrue(xtuml.relate(inst2, act_blk, 602)) + self.assertTrue(xtuml.relate(inst2, inst1, 661, 'succeeds')) + self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) + self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) + + def test_sort_reflexive(self): act_blk = self.metamodel.new('ACT_BLK') prev = None @@ -294,11 +304,11 @@ def testSortReflexive(self): for idx, inst in enumerate(inst_set): self.assertEqual(inst.LineNumber, 9 - idx) - def testSortReflexiveNone(self): + def test_sort_reflexive_with_invalid_arguments(self): inst_set = xtuml.sort_reflexive(None, None, None) self.assertEqual(len(inst_set), 0) - def testSortReflexiveWithRecursion(self): + def test_sort_reflexive_with_recursion(self): p1 = self.metamodel.new('S_BPARM', Name='p1') p2 = self.metamodel.new('S_BPARM', Name='p2') p3 = self.metamodel.new('S_BPARM', Name='p3') @@ -315,26 +325,15 @@ def testSortReflexiveWithRecursion(self): self.assertEqual(len(inst_set), 4) for inst1, inst2 in zip(inst_set, [p1, p2, p3, p4]): self.assertEqual(inst1, inst2) - - def testRelateReflexive2(self): - inst1 = self.metamodel.new('ACT_SMT') - inst2 = self.metamodel.new('ACT_SMT') - act_blk = self.metamodel.new('ACT_BLK') - self.assertTrue(xtuml.relate(inst1, act_blk, 602)) - self.assertTrue(xtuml.relate(inst2, act_blk, 602)) - self.assertTrue(xtuml.relate(inst2, inst1, 661, 'succeeds')) - self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) - self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) - - def testRelateReflexiveWithoutPhrase(self): + def test_relate_reflexive_without_phrase(self): inst1 = self.metamodel.new('ACT_SMT') inst2 = self.metamodel.new('ACT_SMT') self.assertRaises(xtuml.ModelException, xtuml.relate, inst1, inst2, 661, '') - def testRelateInvertedOrder(self): + def test_relate_inverted_order(self): s_edt = self.metamodel.new('S_EDT') s_dt = self.metamodel.new('S_DT') pe_pe = self.metamodel.new('PE_PE') @@ -342,12 +341,12 @@ def testRelateInvertedOrder(self): self.assertTrue(xtuml.relate(s_edt, s_dt, 17)) self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) - def testRelateInvalidRelId(self): + def test_relate_invalid_relid(self): s_edt = self.metamodel.new('S_EDT') s_dt = self.metamodel.new('S_DT') self.assertRaises(xtuml.ModelException, xtuml.relate, s_edt, s_dt, 0) - def testUnrelate(self): + def test_unrelate(self): inst1 = self.metamodel.new('ACT_SMT') inst2 = self.metamodel.new('ACT_SMT') act_blk = self.metamodel.new('ACT_BLK') @@ -363,7 +362,7 @@ def testUnrelate(self): self.assertIsNone(xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) self.assertIsNone(xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) - def testRelateInWrongOrder(self): + def test_relate_in_wrong_order(self): s_ee = self.metamodel.new('S_EE') pe_pe = self.metamodel.new('PE_PE') EE_ID = s_ee.EE_ID @@ -372,7 +371,7 @@ def testRelateInWrongOrder(self): self.assertNotEqual(EE_ID, s_ee.EE_ID) self.assertEqual(Element_ID, pe_pe.Element_ID) - def testRelateTopDown(self): + def test_relate_top_down(self): m = self.metamodel s_dt = m.select_one('S_DT', where(Name='string')) s_bparm = m.new('S_BPARM', Name='My_Parameter') @@ -389,7 +388,7 @@ def testRelateTopDown(self): inst = xtuml.navigate_any(pe_pe).S_EE[8001].S_BRG[19].S_BPARM[21]() self.assertEqual(inst, s_bparm) - def testRelateBottomUp(self): + def test_relate_bottom_up(self): m = self.metamodel s_dt = m.select_one('S_DT', where(Name='string')) s_bparm = m.new('S_BPARM', Name='My_Parameter') @@ -406,10 +405,10 @@ def testRelateBottomUp(self): inst = xtuml.navigate_any(pe_pe).S_EE[8001].S_BRG[19].S_BPARM[21]() self.assertEqual(inst, s_bparm) - def testConcistencyOfEmptyModel(self): + def test_concistency_of_empty_model(self): self.assertTrue(self.metamodel.is_consistent()) - def testConsistencyOfNonEmptyModel(self): + def test_consistency_of_non_empty_model(self): m = self.metamodel s_dt = m.select_one('S_DT', where(Name='string')) s_bparm = m.new('S_BPARM', Name='My_Parameter') @@ -467,7 +466,7 @@ def setUp(self): def tearDown(self): del self.metamodel - def testReflexive(self): + def test_reflexive(self): self.metamodel.define_class('A', [('Id', 'unique_id'), ('Next_Id', 'unique_id'), ('Name', 'string')]) @@ -493,7 +492,7 @@ def testReflexive(self): inst = xtuml.navigate_one(second).A[1, 'next']() self.assertIsNone(inst) - def testOneToMany(self): + def test_one_to_many(self): self.metamodel.define_class('A', [('Id', 'unique_id')]) self.metamodel.define_class('B', [('Id', 'unique_id'), ('A_Id', 'unique_id')]) a_endpint = xtuml.SingleAssociationLink('A', ids=['Id']) @@ -513,7 +512,7 @@ class TestBaseObject(unittest.TestCase): Test suite for the class xtuml.BaseObject ''' - def testPlusOperator(self): + def test_plus_operator(self): inst1 = xtuml.BaseObject() inst2 = xtuml.BaseObject() @@ -522,7 +521,7 @@ def testPlusOperator(self): self.assertIn(inst1, q) self.assertIn(inst2, q) - def testMinusOperator(self): + def test_minus_operator(self): inst1 = xtuml.BaseObject() inst2 = xtuml.BaseObject() @@ -531,7 +530,7 @@ def testMinusOperator(self): self.assertIn(inst1, q) self.assertNotIn(inst2, q) - def testNonPersistingAttribute(self): + def test_non_persisting_attribute(self): inst = xtuml.BaseObject() setattr(inst, 'test1', 1) @@ -546,11 +545,11 @@ def testNonPersistingAttribute(self): self.assertEqual(getattr(inst, 'test3'), 3) self.assertEqual(inst.test3, 3) - def testUndefinedAttribute1(self): + def test_gettattr_with_undefined_attribute(self): inst = xtuml.BaseObject() self.assertRaises(AttributeError, getattr, inst, 'test') - def testUndefinedAttribute2(self): + def test_undefined_attribute_access(self): inst = xtuml.BaseObject() try: _ = inst.test @@ -564,7 +563,7 @@ class TestQuerySet(unittest.TestCase): Test suite for the class xtuml.QuerySet ''' - def testEqualOperator(self): + def test_equal_operator(self): q1 = xtuml.QuerySet() q2 = xtuml.QuerySet() @@ -581,7 +580,7 @@ def testEqualOperator(self): self.assertEqual(q1, q2) self.assertEqual(q1, [1, 2, 3]) - def testNotEqualOperator(self): + def test_not_equal_operator(self): q1 = xtuml.QuerySet() q2 = xtuml.QuerySet([1]) self.assertNotEqual(q1, q2) @@ -596,11 +595,11 @@ def testNotEqualOperator(self): q2 = xtuml.QuerySet([1, 3, 2]) self.assertNotEqual(q1, q2) - def testPopEmpty(self): + def test_pop_empty(self): q = xtuml.QuerySet() self.assertRaises(KeyError, q.pop) - def testPopLast(self): + def test_pop_last(self): q1 = xtuml.QuerySet([1, 2]) q2 = xtuml.QuerySet([1]) self.assertNotEqual(q1, q2) @@ -608,7 +607,7 @@ def testPopLast(self): q1.pop() self.assertEqual(q1, q2) - def testPopFirst(self): + def test_pop_first(self): q1 = xtuml.QuerySet([2, 1]) q2 = xtuml.QuerySet([1]) self.assertNotEqual(q1, q2) @@ -621,7 +620,7 @@ class TestIdGenerator(unittest.TestCase): Test suite for the IdGenerator classes ''' - def testIntegerGeneratorBasic(self): + def test_next_pattern(self): i = xtuml.IntegerGenerator() self.assertEqual(i.peek(), 1) self.assertEqual(i.next(), 1) @@ -629,7 +628,7 @@ def testIntegerGeneratorBasic(self): self.assertEqual(i.peek(), 3) self.assertEqual(i.peek(), 3) - def testIntegerGeneratorIterator(self): + def test_generator_pattern(self): i = xtuml.IntegerGenerator() count = 1 for v in i: From bdbb2bcca6b82bfe17e99135871d592a8729fd73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 12 Jun 2016 16:38:01 +0200 Subject: [PATCH 012/216] test: cosmetics --- tests/test_xtuml/test_load.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_xtuml/test_load.py b/tests/test_xtuml/test_load.py index d0cfc9d..b825661 100644 --- a/tests/test_xtuml/test_load.py +++ b/tests/test_xtuml/test_load.py @@ -15,10 +15,11 @@ def load_wrapper(self, *args, **kwargs): try: loader = xtuml.ModelLoader() loader.input(fn.__doc__) - metamodel = loader.build_metamodel() - fn(self, metamodel) + res = loader.build_metamodel() except Exception as ex: - fn(self, ex) + res = ex + + fn(self, res) return load_wrapper From b7cf97dc73fc50ab797a5151a3af21952596e1dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 21 Jun 2016 05:31:44 +0000 Subject: [PATCH 013/216] model: add the convenient method find_class() to the MetaModel class --- docs/api-reference.rst | 1 + tests/test_xtuml/test_metamodel.py | 6 +++--- xtuml/__init__.py | 1 + xtuml/model.py | 31 +++++++++++++++++++----------- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/docs/api-reference.rst b/docs/api-reference.rst index 2404d89..7c1e04b 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -64,6 +64,7 @@ Exceptions ^^^^^^^^^^ .. autoexception:: xtuml.ParsingException .. autoexception:: xtuml.ModelException +.. autoexception:: xtuml.UnknownClassException bridgepoint diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 6300095..6b96b39 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -196,7 +196,7 @@ def test_unknown_type(self): self.assertRaises(xtuml.ModelException, self.metamodel.new, 'A') def test_undefined_class(self): - self.assertRaises(xtuml.ModelException, self.metamodel.new, + self.assertRaises(xtuml.UnknownClassException, self.metamodel.new, 'MY_UNDEFINED_CLASS') def test_redefined_class(self): @@ -205,11 +205,11 @@ def test_redefined_class(self): 'MY_CLASS', []) def test_select_any_undefined(self): - self.assertRaises(xtuml.ModelException, self.metamodel.select_any, + self.assertRaises(xtuml.UnknownClassException, self.metamodel.select_any, 'MY_CLASS') def test_select_many_undefined(self): - self.assertRaises(xtuml.ModelException, self.metamodel.select_many, + self.assertRaises(xtuml.UnknownClassException, self.metamodel.select_many, 'MY_CLASS') def test_relate(self): diff --git a/xtuml/__init__.py b/xtuml/__init__.py index a15ca6c..2392961 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -35,6 +35,7 @@ from .model import BaseObject from .model import MetaModel from .model import ModelException +from .model import UnknownClassException from .model import navigate_any from .model import navigate_one diff --git a/xtuml/model.py b/xtuml/model.py index 57302bd..154e8a7 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -23,6 +23,10 @@ class ModelException(Exception): pass +class UnknownClassException(ModelException): + pass + + def navigation(handle, kind, relid, phrase): kind = kind.upper() if isinstance(relid, int): @@ -446,7 +450,7 @@ def define_class(self, kind, attributes, doc=''): Define and return a new class in the metamodel. ''' ukind = kind.upper() - if ukind in self.classes.keys() or ukind in self.instances.keys(): + if ukind in self.classes or ukind in self.instances: raise ModelException('A class with the name %s is already defined' % kind) Cls = type(kind, (BaseObject,), dict(__r__=dict(), __q__=dict(), @@ -459,6 +463,16 @@ def define_class(self, kind, attributes, doc=''): return Cls + def find_class(self, kind): + ''' + Find a class of some *kind* in the metamodel. + ''' + ukind = kind.upper() + if ukind in self.classes: + return self.classes[ukind] + else: + raise UnknownClassException(kind) + def new(self, kind, *args, **kwargs): ''' Create and return a new instance in the metamodel of some *kind*. @@ -467,11 +481,7 @@ def new(self, kind, *args, **kwargs): by passing them as positional or keyword arguments. Positional arguments are assigned in the order in which they appear in the metamodel schema. ''' - ukind = kind.upper() - if ukind not in self.classes: - raise ModelException("Unknown class %s" % kind) - - Cls = self.classes[ukind] + Cls = self.find_class(kind) inst = Cls() # set all attributes with an initial default value @@ -491,7 +501,7 @@ def new(self, kind, *args, **kwargs): for name, value in kwargs.items(): setattr(inst, name, value) - self.instances[ukind].append(inst) + self.instances[kind.upper()].append(inst) return inst @@ -565,11 +575,10 @@ def define_unique_identifier(self, kind, name, *named_attributes): if not named_attributes: return - kind = kind.upper() if isinstance(name, int): name = 'I%d' % name - Cls = self.classes[kind] + Cls = self.find_class(kind) Cls.__u__[name] = set(named_attributes) def select_many(self, kind, where_clause=None): @@ -584,7 +593,7 @@ def select_many(self, kind, where_clause=None): ''' ukind = kind.upper() if ukind not in self.instances: - raise ModelException("Unknown class %s" % kind) + raise UnknownClassException(kind) return QuerySet(filter(where_clause, self.instances[ukind])) @@ -606,7 +615,7 @@ def select_one(self, kind, where_clause=None): ''' ukind = kind.upper() if ukind not in self.instances: - raise ModelException("Unknown class %s" % kind) + raise UnknownClassException(kind) s = filter(where_clause, self.instances[ukind]) return next(s, None) From 3c556bc01528512d4dacf1f09c388f7b25dfc869 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 22 Jun 2016 16:25:32 +0000 Subject: [PATCH 014/216] consistency_check: let the user decide whether to add builtin global data types automatically (default to False) --- bridgepoint/consistency_check.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bridgepoint/consistency_check.py b/bridgepoint/consistency_check.py index 4f4e92c..3ebf64e 100644 --- a/bridgepoint/consistency_check.py +++ b/bridgepoint/consistency_check.py @@ -30,6 +30,10 @@ def main(): help="limit check for uniqueness constraint violations to one or more classes", action="append", default=[]) + parser.add_option("-g", "--globals", dest="globals", + help="add builtin global data types automatically, e.g. boolean, integer and real", + action="store_true", default=False) + parser.add_option("-v", "--verbosity", dest='verbosity', action="count", help="increase debug logging level", default=1) @@ -46,7 +50,7 @@ def main(): } logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG)) - loader = ooaofooa.Loader() + loader = ooaofooa.Loader(load_globals=opts.globals) for filename in args: loader.filename_input(filename) @@ -64,6 +68,7 @@ def main(): if not opts.kinds: error |= xtuml.check_uniqueness_constraint(m) + sys.exit(error) From 512c137a2abbfc6755268cd512032fdff5783da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 7 Jul 2016 20:45:03 +0200 Subject: [PATCH 015/216] bump version --- xtuml/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/version.py b/xtuml/version.py index 2a4ee45..0201a17 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -2,8 +2,8 @@ # Copyright (C) 2015 John Törnblom name = 'pyxtuml' -date = '2016-04-09' +date = '2016-07-07' version = '0.8' -release = '0.8.2' +release = '0.8.3' complete_string = '%s v%s (%s)' % (name, release, date) From 698b96306a065e3545d704a7e21d8277de6df0c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 10 Jul 2016 07:17:33 +0000 Subject: [PATCH 016/216] expose MetaModel.find_class() to api --- docs/api-reference.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-reference.rst b/docs/api-reference.rst index 7c1e04b..b1a10bf 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -20,7 +20,7 @@ Loading Metamodels Metamodel Operations ^^^^^^^^^^^^^^^^^^^^ .. autoclass:: xtuml.MetaModel - :members: clone, new, select_one, select_many + :members: clone, new, find_class, select_one, select_many .. autofunction:: xtuml.delete .. autofunction:: xtuml.navigate_one From 5ec97ce735a0f451840ee4745caf5df9e1399efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 10 Jul 2016 07:18:21 +0000 Subject: [PATCH 017/216] use MetaModel.find_class() to locate classes --- tests/test_xtuml/test_persist.py | 2 +- xtuml/load.py | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index e35c64c..91468fc 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -344,7 +344,7 @@ def test_implicit_serialize(self): loader.input(schema) m = loader.build_metamodel() - X = m.classes['X'] + X = m.find_class('X') s1 = xtuml.serialize(X) s2 = xtuml.serialize_class(X) self.assertTrue(s1) diff --git a/xtuml/load.py b/xtuml/load.py index 6e451da..d013475 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -261,14 +261,12 @@ def _populate_instance_with_positional_arguments(metamodel, stmt): Populate a *metamodel* with an instance previously encountered from input that was defined using positional arguments. ''' - ukind = stmt.kind.upper() - - if ukind not in metamodel.classes: + if stmt.kind.upper() not in metamodel.classes: names = ['_%s' % idx for idx in range(len(stmt.values))] ModelLoader._populate_matching_class(metamodel, stmt.kind, names, stmt.values) - Cls = metamodel.classes[ukind] + Cls = metamodel.find_class(stmt.kind) args = list() if len(Cls.__a__) != len(stmt.values): @@ -288,13 +286,11 @@ def _populate_instance_with_named_arguments(metamodel, stmt): Populate a *metamodel* with an instance previously encountered from input that was defined using named arguments. ''' - ukind = stmt.kind.upper() - - if ukind not in metamodel.classes: + if stmt.kind.upper() not in metamodel.classes: ModelLoader._populate_matching_class(metamodel, stmt.kind, stmt.names, stmt.values) - Cls = metamodel.classes[ukind] + Cls = metamodel.find_class(stmt.kind) schema_unames = [name.upper() for name, _ in Cls.__a__] inst_unames = [name.upper() for name in stmt.names] From 92799f967783f5661eecfd96f8e59c93c0f6f450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 11 Jul 2016 19:57:14 +0000 Subject: [PATCH 018/216] apply initial api changes for v0.9 --- bridgepoint/prebuild.py | 4 +- tests/test_xtuml/test_metamodel.py | 9 +- tests/test_xtuml/test_persist.py | 18 +-- xtuml/__init__.py | 1 + xtuml/consistency_check.py | 33 ++-- xtuml/load.py | 16 +- xtuml/model.py | 239 ++++++++++++++++++----------- xtuml/persist.py | 51 +++--- 8 files changed, 218 insertions(+), 153 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index e6a5466..31bdfc5 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1800,8 +1800,8 @@ def prebuild_action(instance): 'SPR_PO': ProvidedOperationPrebuilder, 'SPR_PS': ProvidedSignalPrebuilder } - kind = instance.__class__.__name__ - walker = walker_map[kind](instance.__m__, instance) + metaclass = instance.__metaclass__ + walker = walker_map[metaclass.kind](metaclass.metamodel, instance) logger.info('processing action %s' % walker.label) # walker.visitors.append(xtuml.tools.NodePrintVisitor()) root = oal.parse(instance.Action_Semantics_internal) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 6b96b39..e384ff8 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -531,7 +531,8 @@ def test_minus_operator(self): self.assertNotIn(inst2, q) def test_non_persisting_attribute(self): - inst = xtuml.BaseObject() + metaclass = xtuml.MetaClass('kind') + inst = metaclass.new() setattr(inst, 'test1', 1) self.assertEqual(getattr(inst, 'test1'), 1) @@ -546,11 +547,13 @@ def test_non_persisting_attribute(self): self.assertEqual(inst.test3, 3) def test_gettattr_with_undefined_attribute(self): - inst = xtuml.BaseObject() + metaclass = xtuml.MetaClass('kind') + inst = metaclass.new() self.assertRaises(AttributeError, getattr, inst, 'test') def test_undefined_attribute_access(self): - inst = xtuml.BaseObject() + metaclass = xtuml.MetaClass('kind') + inst = metaclass.new() try: _ = inst.test self.fail('AttributeError expected') diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index 91468fc..c5219f7 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -379,26 +379,26 @@ def compare_metamodel_classes(m1, m2): Helper function for detecting differences in class definitions in two metamodels. ''' - if len(m1.classes.keys()) != len(m2.classes.keys()): + if len(m1.metaclasses.keys()) != len(m2.metaclasses.keys()): return False - for kind in m1.classes.keys(): - Cls1 = m1.classes[kind] - Cls2 = m2.classes[kind] + for kind in m1.metaclasses.keys(): + metaclass1 = m1.metaclasses[kind] + metaclass2 = m2.metaclasses[kind] - if Cls1.__name__ != Cls2.__name__: + if metaclass1.kind != metaclass2.kind: return False - if Cls1.__a__ != Cls2.__a__: + if metaclass1.attributes != metaclass2.attributes: return False - if Cls1.__i__ != Cls2.__i__: + if metaclass1.identifying_attributes != metaclass2.identifying_attributes: return False - if Cls1.__d__ != Cls2.__d__: + if metaclass1.referential_attributes != metaclass2.referential_attributes: return False - if Cls1.__u__ != Cls2.__u__: + if metaclass1.indices != metaclass2.indices: return False return True diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 2392961..85559d9 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -33,6 +33,7 @@ from .model import QuerySet from .model import BaseObject +from .model import MetaClass from .model import MetaModel from .model import ModelException from .model import UnknownClassException diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index b1a12c0..a9a6f8d 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -19,8 +19,9 @@ def pretty_to_link(inst, from_link, to_link): ''' values = '' prefix = '' - - for name, ty in inst.__a__: + metaclass = inst.__metaclass__ + + for name, ty in metaclass.attributes: if name in from_link.ids: value = getattr(inst, name) value = xtuml.serialize_value(value, ty) @@ -38,9 +39,10 @@ def pretty_from_link(inst, from_link, to_link): ''' values = '' prefix = '' - - for name, ty in inst.__a__: - if name in inst.__i__: + metaclass = inst.__metaclass__ + + for name, ty in metaclass.attributes: + if name in metaclass.identifying_attributes: value = getattr(inst, name) value = xtuml.serialize_value(value, ty) values += '%s%s=%s' % (prefix, name, value) @@ -55,9 +57,10 @@ def pretty_unique_identifier(inst, identifier): ''' values = '' prefix = '' + metaclass = inst.__metaclass__ - for name, ty in inst.__a__: - if name in inst.__u__[identifier]: + for name, ty in metaclass.attributes: + if name in metaclass.identifying_attributes: value = getattr(inst, name) value = xtuml.serialize_value(value, ty) values += '%s%s=%s' % (prefix, name, value) @@ -70,25 +73,25 @@ def check_uniqueness_constraint(m, kind=None): Check the model for uniqueness constraint violations. ''' if kind is None: - classes = m.classes.values() + metaclasses = m.metaclasses.values() else: - classes = [m.classes[kind.upper()]] + metaclasses = [m.find_metaclass(kind)] res = True - for Cls in classes: - for inst in m.select_many(Cls.__name__): - for identifier in Cls.__u__.keys(): + for metaclass in metaclasses: + for inst in metaclass.select_many(): + for identifier in metaclass.indices: kwargs = dict() - for name in Cls.__u__[identifier]: + for name in metaclass.indices[identifier]: kwargs[name] = getattr(inst, name) where_clause = xtuml.where_eq(**kwargs) - s = m.select_many(Cls.__name__, where_clause) + s = metaclass.select_many(where_clause) if len(s) != 1: res = False id_string = pretty_unique_identifier(inst, identifier) logger.warning('uniqueness constraint violation in %s, %s' - % (Cls.__name__, id_string)) + % (metaclass.kind, id_string)) return res diff --git a/xtuml/load.py b/xtuml/load.py index d013475..a467a4c 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -261,19 +261,19 @@ def _populate_instance_with_positional_arguments(metamodel, stmt): Populate a *metamodel* with an instance previously encountered from input that was defined using positional arguments. ''' - if stmt.kind.upper() not in metamodel.classes: + if stmt.kind.upper() not in metamodel.metaclasses: names = ['_%s' % idx for idx in range(len(stmt.values))] ModelLoader._populate_matching_class(metamodel, stmt.kind, names, stmt.values) - Cls = metamodel.find_class(stmt.kind) + metaclass = metamodel.find_metaclass(stmt.kind) args = list() - if len(Cls.__a__) != len(stmt.values): + if len(metaclass.attributes) != len(stmt.values): logger.warn('schema mismatch while loading an instance of %s', stmt.kind) - for attr, value in zip(Cls.__a__, stmt.values): + for attr, value in zip(metaclass.attributes, stmt.values): _, ty = attr value = deserialize_value(ty, value) args.append(value) @@ -286,13 +286,13 @@ def _populate_instance_with_named_arguments(metamodel, stmt): Populate a *metamodel* with an instance previously encountered from input that was defined using named arguments. ''' - if stmt.kind.upper() not in metamodel.classes: + if stmt.kind.upper() not in metamodel.metaclasses: ModelLoader._populate_matching_class(metamodel, stmt.kind, stmt.names, stmt.values) - Cls = metamodel.find_class(stmt.kind) + metaclass = metamodel.find_metaclass(stmt.kind) - schema_unames = [name.upper() for name, _ in Cls.__a__] + schema_unames = [name.upper() for name in metaclass.attribute_names] inst_unames = [name.upper() for name in stmt.names] if set(inst_unames) - set(schema_unames): @@ -300,7 +300,7 @@ def _populate_instance_with_named_arguments(metamodel, stmt): stmt.kind) args = list() - for name, ty in Cls.__a__: + for name, ty in metaclass.attributes: uname = name.upper() if uname in inst_unames: idx = inst_unames.index(uname) diff --git a/xtuml/model.py b/xtuml/model.py index 154e8a7..8487133 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -283,9 +283,7 @@ class BaseObject(object): ''' __r__ = None # store relations __q__ = None # store predefined queries - __m__ = None # store a handle to the metamodel which created the instance __c__ = dict() # store a cached results from queries - __a__ = list() # store a list of attributes (name, type) __i__ = set() # set of identifying attributes __d__ = set() # set of derived attributes __u__ = dict() # store unique identifiers @@ -304,7 +302,7 @@ def __sub__(self, other): def __getattr__(self, name): uname = name.upper() - for attr, _ in self.__a__: + for attr, _ in self.__metaclass__.attributes: if attr.upper() == uname: return self.__dict__[attr] @@ -312,7 +310,7 @@ def __getattr__(self, name): def __setattr__(self, name, value): uname = name.upper() - for attr, _ in self.__a__: + for attr, _ in self.__metaclass__.attributes: if attr.upper() == uname: self.__dict__[attr] = value self.__c__.clear() @@ -322,8 +320,108 @@ def __setattr__(self, name, value): def __str__(self): return str(self.__dict__) + + +class MetaClass(object): + metamodel = None + kind = None + attributes = None + clazz = None + instances = None + + def __init__(self, kind, metamodel=None): + self.metamodel = metamodel + self.kind = kind + self.attributes = list() + self.instances = list() + self.clazz = type(kind, (BaseObject,), dict(__r__=dict(), __q__=dict(), + __c__=dict(), + __i__=set(), __d__=set(), + __u__=dict(), + __metaclass__=self)) + + + @property + def attribute_names(self): + return [name for name, _ in self.attributes] + @property + def referential_attributes(self): + return self.clazz.__d__ + @property + def identifying_attributes(self): + return self.clazz.__i__ + + @property + def indices(self): + return self.clazz.__u__ + + def add_attribute(self, name, ty): + attr = (name, ty) + self.attributes.append(attr) + setattr(self.clazz, name, None) + + def default_value(self, type_name): + uname = type_name.upper() + if uname == 'BOOLEAN': + return False + + elif uname == 'INTEGER': + return 0 + + elif uname == 'REAL': + return 0.0 + + elif uname == 'STRING': + return '' + + elif uname == 'UNIQUE_ID': + return next(self.metamodel.id_generator) + + else: + raise ModelException("Unknown type named '%s'" % type_name) + + def new(self, *args, **kwargs): + inst = self.clazz() + + # set all attributes with an initial default value + for name, ty in self.attributes: + if name in inst.__d__: + value = None + else: + value = self.default_value(ty) + setattr(inst, name, value) + + # set all positional arguments + for attr, value in zip(self.attributes, args): + name, ty = attr + setattr(inst, name, value) + + # set all named arguments + for name, value in kwargs.items(): + setattr(inst, name, value) + + self.instances.append(inst) + + return inst + + def delete(self, inst): + if inst in self.instances: + self.instances.remove(inst) + self.clazz.__c__.clear() + else: + raise ModelException("Instance not found in its model") + + def select_one(self, where_clause=None): + query = filter(where_clause, self.instances) + return next(query, None) + + def select_many(self, where_clause=None): + query = filter(where_clause, self.instances) + return QuerySet(query) + + class IdGenerator(object): ''' Base class for generating unique identifiers in a metamodel. @@ -400,7 +498,7 @@ def _is_null(inst, name): return True name = name.upper() - for attr_name, attr_ty in inst.__a__: + for attr_name, attr_ty in inst.__metaclass__.attributes: if attr_name.upper() != name: continue @@ -426,9 +524,7 @@ class MetaModel(object): **Note:** All identifiers, e.g. attributes, association ids, key letters (the kind or name of a class), are case **insensitive**. ''' - - classes = None - instances = None + metaclasses = None associations = None id_generator = None @@ -439,37 +535,51 @@ def __init__(self, id_generator=None): ''' if id_generator is None: id_generator = UUIDGenerator() - - self.classes = dict() - self.instances = dict() + + self.metaclasses = dict() self.associations = list() self.id_generator = id_generator - + + @property + def instances(self): + for metaclass in self.metaclasses.values(): + for inst in metaclass.instances: + yield inst + + @property + def classes(self): + for metaclass in self.metaclasses.values(): + yield metaclass.clazz + def define_class(self, kind, attributes, doc=''): ''' Define and return a new class in the metamodel. ''' ukind = kind.upper() - if ukind in self.classes or ukind in self.instances: + if ukind in self.metaclasses: raise ModelException('A class with the name %s is already defined' % kind) - - Cls = type(kind, (BaseObject,), dict(__r__=dict(), __q__=dict(), - __c__=dict(), __m__=self, - __i__=set(), __d__=set(), - __u__=dict(), __doc__=doc, - __a__=attributes)) - self.classes[ukind] = Cls - self.instances[ukind] = list() + + metaclass = MetaClass(kind, self) + for name, ty in attributes: + metaclass.add_attribute(name, ty) + + self.metaclasses[ukind] = metaclass - return Cls + return metaclass def find_class(self, kind): ''' Find a class of some *kind* in the metamodel. ''' + return self.find_metaclass(kind).clazz + + def find_metaclass(self, kind): + ''' + Find a metaclass of some *kind* in the metamodel. + ''' ukind = kind.upper() - if ukind in self.classes: - return self.classes[ukind] + if ukind in self.metaclasses: + return self.metaclasses[ukind] else: raise UnknownClassException(kind) @@ -481,30 +591,9 @@ def new(self, kind, *args, **kwargs): by passing them as positional or keyword arguments. Positional arguments are assigned in the order in which they appear in the metamodel schema. ''' - Cls = self.find_class(kind) - inst = Cls() - - # set all attributes with an initial default value - for name, ty in inst.__a__: - if name in inst.__d__: - value = None - else: - value = self._default_value(ty) - setattr(inst, name, value) - - # set all positional arguments - for attr, value in zip(inst.__a__, args): - name, ty = attr - setattr(inst, name, value) - - # set all named arguments - for name, value in kwargs.items(): - setattr(inst, name, value) - - self.instances[kind.upper()].append(inst) + metaclass = self.find_metaclass(kind) + return metaclass.new(*args, **kwargs) - return inst - def clone(self, instance): ''' Create a shallow clone of an *instance*. @@ -512,8 +601,8 @@ def clone(self, instance): **Note:** the clone and the original instance **does not** have to be part of the same metamodel. ''' - clone = self.new(instance.__class__.__name__) - for name, _ in instance.__a__: + clone = self.new(instance.__metaclass__.kind) + for name, _ in instance.__metaclass__.attributes: value = getattr(instance, name) setattr(clone, name, value) @@ -536,8 +625,8 @@ def define_association(self, rel_id, source, target): source_kind = source.kind.upper() target_kind = target.kind.upper() - Source = self.classes[source_kind] - Target = self.classes[target_kind] + Source = self.find_class(source_kind) + Target = self.find_class(target_kind) Source.__d__ |= set(ass.source.ids) Target.__i__ |= set(ass.target.ids) @@ -591,15 +680,12 @@ def select_many(self, kind, where_clause=None): >>> m = xtuml.load_metamodel('db.sql') >>> inst_set = m.select_many('My_Class', lambda sel: sel.number > 5) ''' - ukind = kind.upper() - if ukind not in self.instances: - raise UnknownClassException(kind) - - return QuerySet(filter(where_clause, self.instances[ukind])) + metaclass = self.find_metaclass(kind) + return metaclass.select_many(where_clause) def select_any(self, kind, where_clause=None): ''' - This method is deprecated. Use *select_any* instead. + This method is deprecated. Use *select_one* instead. ''' return self.select_one(kind, where_clause) @@ -613,12 +699,8 @@ def select_one(self, kind, where_clause=None): >>> m = xtuml.load_metamodel('db.sql') >>> inst = m.select_one('My_Class', lambda sel: sel.name == 'Test') ''' - ukind = kind.upper() - if ukind not in self.instances: - raise UnknownClassException(kind) - - s = filter(where_clause, self.instances[ukind]) - return next(s, None) + metaclass = self.find_metaclass(kind) + return metaclass.select_one(where_clause) def is_consistent(self): ''' @@ -629,32 +711,17 @@ def is_consistent(self): return xtuml.check_uniqueness_constraint(self) - def _default_value(self, ty_name): - ''' - Obtain the default value for a named metamodel type. - ''' - uname = ty_name.upper() - if uname == 'BOOLEAN': return False - elif uname == 'INTEGER': return 0 - elif uname == 'REAL': return 0.0 - elif uname == 'STRING': return '' - elif uname == 'UNIQUE_ID': return next(self.id_generator) - else: raise ModelException("Unknown type named '%s'" % ty_name) - def _select_endpoint(self, inst, source, target, kwargs): - target_kind = target.kind.upper() - if not target_kind in self.instances: - return frozenset() - + metaclass = self.find_metaclass(target.kind) keys = chain(target.ids, kwargs.keys()) values = chain([getattr(inst, name) for name in source.ids], kwargs.values()) kwargs = dict(zip(keys, values)) cache_key = frozenset(list(kwargs.items())) - cache = self.classes[target_kind].__c__ + cache = metaclass.clazz.__c__ if cache_key not in cache: - cache[cache_key] = Query(self.instances[target_kind], kwargs) + cache[cache_key] = Query(metaclass.instances, kwargs) return cache[cache_key].execute() @@ -917,15 +984,7 @@ def delete(instance): if not isinstance(instance, BaseObject): raise ModelException("not an xtuml instance") - kind = instance.__class__.__name__.upper() - if kind not in instance.__m__.classes: - raise ModelException("Unknown class %s" % instance.__class__.__name__) - - if instance in instance.__m__.instances[kind]: - instance.__m__.instances[kind].remove(instance) - instance.__class__.__c__.clear() - else: - raise ModelException("Instance not found in its model") + metaclass = instance.__metaclass__.delete(instance) def where_eq(**kwargs): diff --git a/xtuml/persist.py b/xtuml/persist.py index 073caec..35a218b 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -47,17 +47,16 @@ def serialize_instance(instance): Serialize an *instance* from a metamodel. ''' attr_count = 0 - - table = instance.__class__.__name__ - s = 'INSERT INTO %s VALUES (' % table - for name, ty in instance.__a__: + metaclass = instance.__metaclass__ + s = 'INSERT INTO %s VALUES (' % metaclass.kind + for name, ty in metaclass.attributes: value = getattr(instance, name) s += '\n ' s += serialize_value(value, ty) attr_count += 1 - if attr_count < len(instance.__a__): + if attr_count < len(metaclass.attributes): s += ', -- %s : %s' % (name, ty) else: s += ' -- %s : %s' % (name, ty) @@ -72,9 +71,8 @@ def serialize_instances(metamodel): Serialize all instances in a *metamodel*. ''' s = '' - for lst in metamodel.instances.values(): - for inst in lst: - s += serialize_instance(inst) + for inst in metamodel.instances: + s += serialize_instance(inst) return s @@ -108,8 +106,11 @@ def serialize_class(Cls): ''' Serialize an xtUML metamodel class. ''' - s = 'CREATE TABLE %s (\n ' % Cls.__name__ - s += ',\n '.join(['%s %s' % (name, ty.upper()) for name, ty in Cls.__a__]) + metaclass = Cls.__metaclass__ + attributes = ['%s %s' % (name, ty.upper()) for name, ty in metaclass.attributes] + + s = 'CREATE TABLE %s (\n ' % metaclass.kind + s += ',\n '.join(attributes) s += '\n);\n' return s @@ -117,7 +118,7 @@ def serialize_class(Cls): def serialize_unique_identifiers(metamodel): s = '' - for Cls in sorted(metamodel.classes.values()): + for Cls in metamodel.classes: for name, attributes in Cls.__u__.items(): attributes = ', '.join(attributes) s += 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (name, @@ -131,8 +132,8 @@ def serialize_schema(metamodel): Serialize all class and association definitions in a *metamodel*. ''' s = '' - for kind in sorted(metamodel.classes.keys()): - s += serialize_class(metamodel.classes[kind]) + for kind in sorted(metamodel.metaclasses.keys()): + s += serialize_class(metamodel.metaclasses[kind].clazz) for ass in sorted(metamodel.associations, key=lambda x: x.id): s += serialize_association(ass) @@ -178,10 +179,9 @@ def persist_instances(metamodel, path): *path* on disk. ''' with open(path, 'w') as f: - for lst in metamodel.instances.values(): - for inst in lst: - s = serialize_instance(inst) - f.write(s) + for inst in metamodel.instances: + s = serialize_instance(inst) + f.write(s) def persist_schema(metamodel, path): @@ -190,8 +190,8 @@ def persist_schema(metamodel, path): serializing them and saving to a *path* on disk. ''' with open(path, 'w') as f: - for kind in sorted(metamodel.classes.keys()): - s = serialize_class(metamodel.classes[kind]) + for kind in sorted(metamodel.metaclasses.keys()): + s = serialize_class(metamodel.metaclasses[kind].clazz) f.write(s) for ass in sorted(metamodel.associations, key=lambda x: x.id): @@ -205,7 +205,7 @@ def persist_unique_identifiers(metamodel, path): saving to a *path* on disk. ''' with open(path, 'w') as f: - for Cls in sorted(metamodel.classes.values()): + for Cls in metamodel.classes: for name, attributes in Cls.__u__.items(): attributes = ', '.join(attributes) s = 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (name, @@ -220,8 +220,8 @@ def persist_database(metamodel, path): *metamodel* by serializing them and saving to a *path* on disk. ''' with open(path, 'w') as f: - for kind in sorted(metamodel.classes.keys()): - Cls = metamodel.classes[kind] + for kind in sorted(metamodel.metaclasses.keys()): + Cls = metamodel.metaclasses[kind].clazz s = serialize_class(Cls) f.write(s) @@ -236,7 +236,6 @@ def persist_database(metamodel, path): s = serialize_association(ass) f.write(s) - for lst in metamodel.instances.values(): - for inst in lst: - s = serialize_instance(inst) - f.write(s) + for inst in metamodel.instances: + s = serialize_instance(inst) + f.write(s) From 406b352d7c8182078e28b019c62725e6064443f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 11 Jul 2016 20:05:37 +0000 Subject: [PATCH 019/216] metaclass: added the __call__ method to create new instances --- tests/test_xtuml/test_metamodel.py | 22 ++++++++++------------ xtuml/model.py | 3 ++- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index e384ff8..7be1bc9 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -507,14 +507,15 @@ def test_one_to_many(self): self.assertEqual(a, xtuml.navigate_one(b).A[1]()) -class TestBaseObject(unittest.TestCase): +class TestMetaClass(unittest.TestCase): ''' Test suite for the class xtuml.BaseObject ''' - + My_Class = xtuml.MetaClass('My_Class') + def test_plus_operator(self): - inst1 = xtuml.BaseObject() - inst2 = xtuml.BaseObject() + inst1 = self.My_Class() + inst2 = self.My_Class() q = inst1 + inst2 self.assertEqual(2, len(q)) @@ -522,8 +523,8 @@ def test_plus_operator(self): self.assertIn(inst2, q) def test_minus_operator(self): - inst1 = xtuml.BaseObject() - inst2 = xtuml.BaseObject() + inst1 = self.My_Class() + inst2 = self.My_Class() q = inst1 - inst2 self.assertEqual(1, len(q)) @@ -531,8 +532,7 @@ def test_minus_operator(self): self.assertNotIn(inst2, q) def test_non_persisting_attribute(self): - metaclass = xtuml.MetaClass('kind') - inst = metaclass.new() + inst = self.My_Class() setattr(inst, 'test1', 1) self.assertEqual(getattr(inst, 'test1'), 1) @@ -547,13 +547,11 @@ def test_non_persisting_attribute(self): self.assertEqual(inst.test3, 3) def test_gettattr_with_undefined_attribute(self): - metaclass = xtuml.MetaClass('kind') - inst = metaclass.new() + inst = self.My_Class() self.assertRaises(AttributeError, getattr, inst, 'test') def test_undefined_attribute_access(self): - metaclass = xtuml.MetaClass('kind') - inst = metaclass.new() + inst = self.My_Class() try: _ = inst.test self.fail('AttributeError expected') diff --git a/xtuml/model.py b/xtuml/model.py index 8487133..03524b3 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -339,7 +339,8 @@ def __init__(self, kind, metamodel=None): __i__=set(), __d__=set(), __u__=dict(), __metaclass__=self)) - + def __call__(self, *args, **kwargs): + return self.new(*args, **kwargs) @property def attribute_names(self): From 216a8782a42b364cf3523ee2125d0a9d9eaef2a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 11 Jul 2016 20:10:45 +0000 Subject: [PATCH 020/216] metaclass: move instance caches from BaseObject MetaClass --- xtuml/model.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 03524b3..730ec61 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -283,13 +283,12 @@ class BaseObject(object): ''' __r__ = None # store relations __q__ = None # store predefined queries - __c__ = dict() # store a cached results from queries __i__ = set() # set of identifying attributes __d__ = set() # set of derived attributes __u__ = dict() # store unique identifiers def __init__(self): - self.__c__.clear() + self.__metaclass__.cache.clear() def __add__(self, other): assert isinstance(other, BaseObject) @@ -313,7 +312,7 @@ def __setattr__(self, name, value): for attr, _ in self.__metaclass__.attributes: if attr.upper() == uname: self.__dict__[attr] = value - self.__c__.clear() + self.__metaclass__.cache.clear() return self.__dict__[name] = value @@ -328,14 +327,15 @@ class MetaClass(object): attributes = None clazz = None instances = None + cache = None def __init__(self, kind, metamodel=None): self.metamodel = metamodel self.kind = kind self.attributes = list() self.instances = list() + self.cache = dict() self.clazz = type(kind, (BaseObject,), dict(__r__=dict(), __q__=dict(), - __c__=dict(), __i__=set(), __d__=set(), __u__=dict(), __metaclass__=self)) @@ -410,7 +410,7 @@ def new(self, *args, **kwargs): def delete(self, inst): if inst in self.instances: self.instances.remove(inst) - self.clazz.__c__.clear() + self.cache.clear() else: raise ModelException("Instance not found in its model") @@ -720,11 +720,10 @@ def _select_endpoint(self, inst, source, target, kwargs): kwargs = dict(zip(keys, values)) cache_key = frozenset(list(kwargs.items())) - cache = metaclass.clazz.__c__ - if cache_key not in cache: - cache[cache_key] = Query(metaclass.instances, kwargs) + if cache_key not in metaclass.cache: + metaclass.cache[cache_key] = Query(metaclass.instances, kwargs) - return cache[cache_key].execute() + return metaclass.cache[cache_key].execute() def _formalized_query(self, source, target): return lambda inst, **kwargs: self._select_endpoint(inst, source, From 32d6a3b76085d0c9b2b393004d13607e5e019951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 12 Jul 2016 17:48:37 +0000 Subject: [PATCH 021/216] metaclass: move unique indices from BaseObject MetaClass --- xtuml/model.py | 12 ++++-------- xtuml/persist.py | 39 +++++++++++++++++++-------------------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 730ec61..c059eb6 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -285,7 +285,6 @@ class BaseObject(object): __q__ = None # store predefined queries __i__ = set() # set of identifying attributes __d__ = set() # set of derived attributes - __u__ = dict() # store unique identifiers def __init__(self): self.__metaclass__.cache.clear() @@ -325,6 +324,7 @@ class MetaClass(object): metamodel = None kind = None attributes = None + indices = None clazz = None instances = None cache = None @@ -333,11 +333,11 @@ def __init__(self, kind, metamodel=None): self.metamodel = metamodel self.kind = kind self.attributes = list() + self.indices = dict() self.instances = list() self.cache = dict() self.clazz = type(kind, (BaseObject,), dict(__r__=dict(), __q__=dict(), __i__=set(), __d__=set(), - __u__=dict(), __metaclass__=self)) def __call__(self, *args, **kwargs): return self.new(*args, **kwargs) @@ -354,10 +354,6 @@ def referential_attributes(self): def identifying_attributes(self): return self.clazz.__i__ - @property - def indices(self): - return self.clazz.__u__ - def add_attribute(self, name, ty): attr = (name, ty) self.attributes.append(attr) @@ -668,8 +664,8 @@ def define_unique_identifier(self, kind, name, *named_attributes): if isinstance(name, int): name = 'I%d' % name - Cls = self.find_class(kind) - Cls.__u__[name] = set(named_attributes) + metaclass = self.find_metaclass(kind) + metaclass.indices[name] = set(named_attributes) def select_many(self, kind, where_clause=None): ''' diff --git a/xtuml/persist.py b/xtuml/persist.py index 35a218b..6a203fa 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -118,13 +118,12 @@ def serialize_class(Cls): def serialize_unique_identifiers(metamodel): s = '' - for Cls in metamodel.classes: - for name, attributes in Cls.__u__.items(): - attributes = ', '.join(attributes) - s += 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (name, - Cls.__name__, - attributes) - + for metaclass in metamodel.metaclasses.values(): + for index_name, attribute_names in metaclass.indices.items(): + attribute_names = ', '.join(attribute_names) + s += 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (index_name, + metaclass.kind, + attribute_names) return s def serialize_schema(metamodel): @@ -205,12 +204,12 @@ def persist_unique_identifiers(metamodel, path): saving to a *path* on disk. ''' with open(path, 'w') as f: - for Cls in metamodel.classes: - for name, attributes in Cls.__u__.items(): - attributes = ', '.join(attributes) - s = 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (name, - Cls.__name__, - attributes) + for metaclass in metamodel.metaclasses.values(): + for index_name, attribute_names in metaclass.indices.items(): + attribute_names = ', '.join(attribute_names) + s = 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (index_name, + metaclass.kind, + attribute_names) f.write(s) @@ -221,15 +220,15 @@ def persist_database(metamodel, path): ''' with open(path, 'w') as f: for kind in sorted(metamodel.metaclasses.keys()): - Cls = metamodel.metaclasses[kind].clazz - s = serialize_class(Cls) + metaclass = metamodel.metaclasses[kind] + s = serialize_class(metaclass.clazz) f.write(s) - for name, attributes in Cls.__u__.items(): - attributes = ', '.join(attributes) - s = 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (name, - Cls.__name__, - attributes) + for index_name, attribute_names in metaclass.indices.items(): + attribute_names = ', '.join(attribute_names) + s = 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (index_name, + metaclass.kind, + attribute_names) f.write(s) for ass in sorted(metamodel.associations, key=lambda x: x.id): From 56d1247ab85a8d3548833114bf6634b6a4c8083c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 12 Jul 2016 18:10:36 +0000 Subject: [PATCH 022/216] metaclass: allow removing of attributes --- tests/test_xtuml/test_metamodel.py | 37 +++++++++++++++++++++++++++++- xtuml/model.py | 13 +++++++++-- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 7be1bc9..cd330e1 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -507,7 +507,7 @@ def test_one_to_many(self): self.assertEqual(a, xtuml.navigate_one(b).A[1]()) -class TestMetaClass(unittest.TestCase): +class TestBaseObject(unittest.TestCase): ''' Test suite for the class xtuml.BaseObject ''' @@ -559,6 +559,41 @@ def test_undefined_attribute_access(self): pass +class TestMetaClass(unittest.TestCase): + ''' + Test suite for xtuml.MetaClass + ''' + + def setUp(self): + self.metaclass = xtuml.MetaClass('Test') + + def test_default_value(self): + self.assertEqual(self.metaclass.default_value('integer'), 0) + self.assertEqual(self.metaclass.default_value('Integer'), 0) + self.assertEqual(self.metaclass.default_value('real'), 0.0) + self.assertEqual(self.metaclass.default_value('STRING'), '') + self.assertEqual(self.metaclass.default_value('unique_id'), None) + self.assertEqual(self.metaclass.default_value('boolean'), False) + + def test_modifying_attributes(self): + self.metaclass.add_attribute('number', 'integer') + self.metaclass.add_attribute('name', 'string') + + inst1 = self.metaclass.new(number=2, name='test') + self.assertEqual(inst1.number, 2) + self.assertEqual(inst1.name, 'test') + + self.assertIn('number', self.metaclass.attribute_names) + self.assertIn('name', self.metaclass.attribute_names) + + self.metaclass.remove_attribute('name') + self.assertNotIn('name', self.metaclass.attribute_names) + + self.assertEqual(inst1.number, 2) + self.assertEqual(inst1.name, 'test') + + + class TestQuerySet(unittest.TestCase): ''' Test suite for the class xtuml.QuerySet diff --git a/xtuml/model.py b/xtuml/model.py index c059eb6..3d7cb85 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -359,6 +359,13 @@ def add_attribute(self, name, ty): self.attributes.append(attr) setattr(self.clazz, name, None) + def remove_attribute(self, name): + for idx, attr in enumerate(self.attributes): + attr_name, _ = attr + if attr_name == name: + del self.attributes[idx] + return + def default_value(self, type_name): uname = type_name.upper() if uname == 'BOOLEAN': @@ -374,8 +381,10 @@ def default_value(self, type_name): return '' elif uname == 'UNIQUE_ID': - return next(self.metamodel.id_generator) - + if self.metamodel: + return next(self.metamodel.id_generator) + else: + return None else: raise ModelException("Unknown type named '%s'" % type_name) From be928680572aac8e69fe3060644b3ad3cad4f0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 13 Jul 2016 06:12:10 +0000 Subject: [PATCH 023/216] metaclass: improve api for modifying attribute list --- tests/test_xtuml/test_metamodel.py | 16 +++++++++------- xtuml/model.py | 13 +++++++++---- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index cd330e1..cc1d4ce 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -576,24 +576,26 @@ def test_default_value(self): self.assertEqual(self.metaclass.default_value('boolean'), False) def test_modifying_attributes(self): - self.metaclass.add_attribute('number', 'integer') - self.metaclass.add_attribute('name', 'string') + self.metaclass.append_attribute('number', 'integer') + self.metaclass.append_attribute('name', 'string') + self.metaclass.insert_attribute(1, 'email', 'string') - inst1 = self.metaclass.new(number=2, name='test') + inst1 = self.metaclass(number=2, name='test', email='test@test.com') self.assertEqual(inst1.number, 2) self.assertEqual(inst1.name, 'test') + self.assertEqual(inst1.email, 'test@test.com') - self.assertIn('number', self.metaclass.attribute_names) - self.assertIn('name', self.metaclass.attribute_names) + for expected_name, name in zip(['number', 'email', 'name'], + self.metaclass.attribute_names): + self.assertEqual(expected_name, name) - self.metaclass.remove_attribute('name') + self.metaclass.delete_attribute('name') self.assertNotIn('name', self.metaclass.attribute_names) self.assertEqual(inst1.number, 2) self.assertEqual(inst1.name, 'test') - class TestQuerySet(unittest.TestCase): ''' Test suite for the class xtuml.QuerySet diff --git a/xtuml/model.py b/xtuml/model.py index 3d7cb85..5845a36 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -354,12 +354,17 @@ def referential_attributes(self): def identifying_attributes(self): return self.clazz.__i__ - def add_attribute(self, name, ty): + def append_attribute(self, name, ty): attr = (name, ty) self.attributes.append(attr) setattr(self.clazz, name, None) - def remove_attribute(self, name): + def insert_attribute(self, index, name, ty): + attr = (name, ty) + self.attributes.insert(index, attr) + setattr(self.clazz, name, None) + + def delete_attribute(self, name): for idx, attr in enumerate(self.attributes): attr_name, _ = attr if attr_name == name: @@ -559,7 +564,7 @@ def classes(self): def define_class(self, kind, attributes, doc=''): ''' - Define and return a new class in the metamodel. + Define a new class in the metamodel, and return its metaclass. ''' ukind = kind.upper() if ukind in self.metaclasses: @@ -567,7 +572,7 @@ def define_class(self, kind, attributes, doc=''): metaclass = MetaClass(kind, self) for name, ty in attributes: - metaclass.add_attribute(name, ty) + metaclass.append_attribute(name, ty) self.metaclasses[ukind] = metaclass From 947700840e749228aa0373fc95ae73011d3e21da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 13 Jul 2016 06:21:53 +0000 Subject: [PATCH 024/216] cosmetics --- xtuml/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/model.py b/xtuml/model.py index 5845a36..bc6f4ba 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -398,7 +398,7 @@ def new(self, *args, **kwargs): # set all attributes with an initial default value for name, ty in self.attributes: - if name in inst.__d__: + if name in self.referential_attributes: value = None else: value = self.default_value(ty) From 7c46446d26dec14fa39f1390fe79bb45f5565c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 13 Jul 2016 07:06:05 +0000 Subject: [PATCH 025/216] metaclass: added navigate() and query() methods --- xtuml/model.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index bc6f4ba..50be500 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -27,15 +27,14 @@ class UnknownClassException(ModelException): pass -def navigation(handle, kind, relid, phrase): +def navigation(handle, kind, rel_id, phrase): kind = kind.upper() - if isinstance(relid, int): - relid = 'R%d' % relid + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id - for start_inst in iter(handle): - query = start_inst.__q__[kind][relid][phrase] - for inst in query(start_inst): - yield inst + for inst in iter(handle): + for result in inst.__metaclass__.navigate(inst, kind, rel_id, phrase): + yield result class NavChain(object): @@ -432,6 +431,16 @@ def select_many(self, where_clause=None): query = filter(where_clause, self.instances) return QuerySet(query) + def navigate(self, inst, kind, rel_id, phrase=''): + return inst.__q__[kind][rel_id][phrase](inst) + + def query(self, kwargs): + index = frozenset(list(kwargs.items())) + if index not in self.cache: + self.cache[index] = Query(self.instances, kwargs) + + return self.cache[index].execute() + class IdGenerator(object): ''' @@ -729,11 +738,7 @@ def _select_endpoint(self, inst, source, target, kwargs): kwargs.values()) kwargs = dict(zip(keys, values)) - cache_key = frozenset(list(kwargs.items())) - if cache_key not in metaclass.cache: - metaclass.cache[cache_key] = Query(metaclass.instances, kwargs) - - return metaclass.cache[cache_key].execute() + return metaclass.query(kwargs) def _formalized_query(self, source, target): return lambda inst, **kwargs: self._select_endpoint(inst, source, From 5a6bed90c89615bed595c4e2646d80d363eaa468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 13 Jul 2016 19:00:52 +0000 Subject: [PATCH 026/216] consistency: check for identifiers that are null --- xtuml/consistency_check.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index a9a6f8d..98d1250 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -80,6 +80,20 @@ def check_uniqueness_constraint(m, kind=None): res = True for metaclass in metaclasses: for inst in metaclass.select_many(): + + for name, ty in metaclass.attributes: + if name not in metaclass.identifying_attributes: + continue + + value = getattr(inst, name) + isnull = value is None + isnull |= (ty == 'UNIQUE_ID' and not value) + if isnull: + res = False + logger.warning('%s.%s is part of an identifier and is null' + % (metaclass.kind, name)) + + for identifier in metaclass.indices: kwargs = dict() for name in metaclass.indices[identifier]: From 222445db4cb618f7b78efda94074ade57883d9d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 13 Jul 2016 19:22:10 +0000 Subject: [PATCH 027/216] test: ensure that SM_EVT.SMspd_ID is not null. NOTE: this is a bug in ooaofooa (formalisation on a conditional association), and has been fixed in ooaofooa v5.4 --- tests/test_bridgepoint/test_generate.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_bridgepoint/test_generate.py b/tests/test_bridgepoint/test_generate.py index 87e40fb..fca11aa 100644 --- a/tests/test_bridgepoint/test_generate.py +++ b/tests/test_bridgepoint/test_generate.py @@ -20,6 +20,7 @@ def setUp(self): self.metamodel.new('SM_EVT', SM_ID=sm_sm.SM_ID, + SMspd_ID=self.metamodel.id_generator.next(), Numb=2, Drv_Lbl='A2', Mning='my_event') @@ -37,6 +38,7 @@ def setUp(self): self.metamodel.new('SM_EVT', SM_ID=sm_sm.SM_ID, + SMspd_ID=self.metamodel.id_generator.next(), Numb=2, Drv_Lbl='B2', Mning='my_second_event') @@ -52,6 +54,7 @@ def setUp(self): relate(pe_pe, o_obj, 8001) sm_evt = self.metamodel.new('SM_EVT', SM_ID=sm_sm.SM_ID, + SMspd_ID=self.metamodel.id_generator.next(), Numb=1, Drv_Lbl='C1', Mning='my_third_event') From 7b8e1e51a875eff7058886a2b570bffa203ba6c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 13 Jul 2016 19:24:52 +0000 Subject: [PATCH 028/216] model: use cache to lookup select queryies with a where_eq clause --- xtuml/model.py | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 50be500..4eb1a92 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -424,12 +424,20 @@ def delete(self, inst): raise ModelException("Instance not found in its model") def select_one(self, where_clause=None): - query = filter(where_clause, self.instances) - return next(query, None) + if isinstance(where_clause, dict): + s = self.query(where_clause) + else: + s = iter(filter(where_clause, self.instances)) + + return next(s, None) def select_many(self, where_clause=None): - query = filter(where_clause, self.instances) - return QuerySet(query) + if isinstance(where_clause, dict): + s = self.query(where_clause) + else: + s = filter(where_clause, self.instances) + + return QuerySet(s) def navigate(self, inst, kind, rel_id, phrase=''): return inst.__q__[kind][rel_id][phrase](inst) @@ -1002,6 +1010,16 @@ def delete(instance): metaclass = instance.__metaclass__.delete(instance) +class WhereEqual(dict): + + def __call__(self, selected): + for name in self: + if getattr(selected, name) != self.get(name): + return False + + return True + + def where_eq(**kwargs): ''' Return a where-clause function which filters out instances based on named @@ -1013,13 +1031,5 @@ def where_eq(**kwargs): >>> m = xtuml.load_metamodel('db.sql') >>> inst = m.select_any('My_Modeled_Class', where(My_Number=5)) ''' - items = list(kwargs.items()) - def query_filter(selected): - for name, value in items: - if getattr(selected, name) != value: - return False - - return True - - return query_filter + return WhereEqual(kwargs) From 35c18ff293b7eba5b77dfff89b9cade623459d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 13 Jul 2016 20:13:36 +0000 Subject: [PATCH 029/216] examples: demonstrate how to modify attribute lists based on hacky keyword parsing in model element descriptions --- examples/gen_ooaofooa_schema.py | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 examples/gen_ooaofooa_schema.py diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py new file mode 100644 index 0000000..0af7212 --- /dev/null +++ b/examples/gen_ooaofooa_schema.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# encoding: utf-8 +# Copyright (C) 2016 John Törnblom + +import sys +import logging +import re + +from xtuml import navigate_one as one +from xtuml import navigate_many as many +from bridgepoint import ooaofooa + + +logger = logging.getLogger('schemagen') + + +def parse_keyword(expr, keyword): + regexp = re.compile(keyword + ":([^\n]*)") + result = regexp.search(expr) + + if result: + return result.groups()[0].strip().lower() + else: + return '' + + +def remove_attr(o_attr): + description = o_attr.Descrip.lower() + keymap = dict(persistent='false', + translate_for_external_use='false') + + for key, value in keymap.items(): + if parse_keyword(description, key) == value: + return True + + +logging.basicConfig(level=logging.INFO) + + +if len(sys.argv) < 2: + print('') + print(' usage: %s ' % sys.argv[0]) + print('') + sys.exit(1) + + +loader = ooaofooa.Loader() +for filename in sys.argv[1:]: + loader.filename_input(filename) + +m = loader.build_metamodel() +c = loader.build_component() + +for o_obj in m.select_many('O_OBJ'): + for o_attr in many(o_obj).O_ATTR[102](remove_attr): + logger.info('Filtering %s.%s' % (o_obj.Key_Lett, o_attr.Name)) + metaclass = c.find_metaclass(o_obj.Key_Lett) + metaclass.delete_attribute(o_attr.Name) + + +#xtuml.persist_database(c, '/dev/stdout') From 9bf66f161d305dc737dd7f723340629c2dda2448 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 13 Jul 2016 20:21:54 +0000 Subject: [PATCH 030/216] examples: cosmetics --- examples/gen_ooaofooa_schema.py | 43 ++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index 0af7212..f6a6e35 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -5,6 +5,7 @@ import sys import logging import re +import xtuml from xtuml import navigate_one as one from xtuml import navigate_many as many @@ -34,28 +35,32 @@ def remove_attr(o_attr): return True -logging.basicConfig(level=logging.INFO) - +def main(): + if len(sys.argv) < 2: + logger.info('usage: %s ' % sys.argv[0]) + sys.exit(1) + + loader = ooaofooa.Loader() + for filename in sys.argv[1:]: + loader.filename_input(filename) + + m = loader.build_metamodel() + c = loader.build_component() + + for o_obj in m.select_many('O_OBJ'): + for o_attr in many(o_obj).O_ATTR[102](remove_attr): + logger.info('Filtering %s.%s' % (o_obj.Key_Lett, o_attr.Name)) + metaclass = c.find_metaclass(o_obj.Key_Lett) + metaclass.delete_attribute(o_attr.Name) + + xtuml.persist_schema(c, '/dev/stdout') -if len(sys.argv) < 2: - print('') - print(' usage: %s ' % sys.argv[0]) - print('') - sys.exit(1) +if __name__ == '__main__': + logging.basicConfig(level=logging.INFO) + main() + -loader = ooaofooa.Loader() -for filename in sys.argv[1:]: - loader.filename_input(filename) -m = loader.build_metamodel() -c = loader.build_component() -for o_obj in m.select_many('O_OBJ'): - for o_attr in many(o_obj).O_ATTR[102](remove_attr): - logger.info('Filtering %s.%s' % (o_obj.Key_Lett, o_attr.Name)) - metaclass = c.find_metaclass(o_obj.Key_Lett) - metaclass.delete_attribute(o_attr.Name) - -#xtuml.persist_database(c, '/dev/stdout') From fbc917ccb568d23bbe8bbc2fd2632b8776423d3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 14 Jul 2016 17:30:47 +0000 Subject: [PATCH 031/216] cosmetics --- examples/gen_ooaofooa_schema.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index f6a6e35..25240b1 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -12,7 +12,7 @@ from bridgepoint import ooaofooa -logger = logging.getLogger('schemagen') +logger = logging.getLogger('schema_gen') def parse_keyword(expr, keyword): @@ -25,7 +25,7 @@ def parse_keyword(expr, keyword): return '' -def remove_attr(o_attr): +def o_attr_filter(o_attr): description = o_attr.Descrip.lower() keymap = dict(persistent='false', translate_for_external_use='false') @@ -48,7 +48,7 @@ def main(): c = loader.build_component() for o_obj in m.select_many('O_OBJ'): - for o_attr in many(o_obj).O_ATTR[102](remove_attr): + for o_attr in many(o_obj).O_ATTR[102](o_attr_filter): logger.info('Filtering %s.%s' % (o_obj.Key_Lett, o_attr.Name)) metaclass = c.find_metaclass(o_obj.Key_Lett) metaclass.delete_attribute(o_attr.Name) From c4dfc699b4ee519384ccba972a825710b281a0d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 25 Jul 2016 23:41:14 +0200 Subject: [PATCH 032/216] model: store links and queries on metaclasses instead of on classes --- xtuml/model.py | 253 ++++++++++++++++++++++++++++++------------------- 1 file changed, 157 insertions(+), 96 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 4eb1a92..5c86dfa 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -27,6 +27,17 @@ class UnknownClassException(ModelException): pass +class UnknownAssociationException(ModelException): + + def __init__(self, from_kind, to_kind, rel_id, phrase): + if phrase: + msg = "%s->%s[%s, %s]" % (from_kind, to_kind, repr(rel_id), repr(phrase)) + else: + msg = "%s->%s[%s]" % (from_kind, to_kind, repr(rel_id)) + + ModelException.__init__(self, msg) + + def navigation(handle, kind, rel_id, phrase): kind = kind.upper() if isinstance(rel_id, int): @@ -98,6 +109,45 @@ def __call__(self, where_clause=None): return QuerySet(filter(where_clause, handle)) +class Link(object): + + def __init__(self, from_metaclass, rel_id, to_metaclass, phrase, key_map): + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + self.rel_id = rel_id + self.from_metaclass = from_metaclass + self.to_metaclass = to_metaclass + self.phrase = phrase + self.key_map = key_map + + @property + def kind(self): + return self.to_metaclass.kind + + def navigate(self, inst): + kwargs = dict() + for key, mapped_key in self.key_map: + kwargs[mapped_key] = getattr(inst, key) + + return self.to_metaclass.query(kwargs) + + def __repr__(self): + if self.phrase: + return "%s->%s[%s, %s]" % (self.kind, self.to_metaclass.kind, + repr(self.rel_id), repr(self.phrase)) + else: + return "%s->%s[%s]" % (self.kind, self.to_metaclass.kind, + repr(self.rel_id)) + + +class ReversedLink(Link): + + def __init__(self, from_metaclass, rel_id, to_metaclass, phrase, key_map): + key_map = [(key2, key1) for key1, key2 in key_map] + Link.__init__(self, from_metaclass, rel_id, to_metaclass, phrase, key_map) + + class Association(object): ''' An association connects two classes to each other via two association links. @@ -281,7 +331,6 @@ class BaseObject(object): to attributes, e.g. getattr/setattr, on these objects are case insensitive. ''' __r__ = None # store relations - __q__ = None # store predefined queries __i__ = set() # set of identifying attributes __d__ = set() # set of derived attributes @@ -323,6 +372,7 @@ class MetaClass(object): metamodel = None kind = None attributes = None + links = None indices = None clazz = None instances = None @@ -333,9 +383,10 @@ def __init__(self, kind, metamodel=None): self.kind = kind self.attributes = list() self.indices = dict() + self.links = dict() self.instances = list() self.cache = dict() - self.clazz = type(kind, (BaseObject,), dict(__r__=dict(), __q__=dict(), + self.clazz = type(kind, (BaseObject,), dict(__r__=dict(), __i__=set(), __d__=set(), __metaclass__=self)) def __call__(self, *args, **kwargs): @@ -353,6 +404,25 @@ def referential_attributes(self): def identifying_attributes(self): return self.clazz.__i__ + def add_link(self, metaclass, rel_id, phrase, key_map, reverse=False): + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + if reverse: + link = ReversedLink(self, rel_id, metaclass, phrase, key_map) + else: + link = Link(self, rel_id, metaclass, phrase, key_map) + + key = (metaclass.kind, rel_id, phrase) + self.links[key] = link + + def find_link(self, kind, rel_id, phrase): + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + key = (kind, rel_id, phrase) + return self.links.get(key, None) + def append_attribute(self, name, ty): attr = (name, ty) self.attributes.append(attr) @@ -440,8 +510,13 @@ def select_many(self, where_clause=None): return QuerySet(s) def navigate(self, inst, kind, rel_id, phrase=''): - return inst.__q__[kind][rel_id][phrase](inst) - + key = (kind, rel_id, phrase) + if key in self.links: + link = self.links[key] + return link.navigate(inst) + else: + raise UnknownAssociationException(self.kind, kind, rel_id, phrase) + def query(self, kwargs): index = frozenset(list(kwargs.items())) if index not in self.cache: @@ -647,6 +722,13 @@ def define_association(self, rel_id, source, target): Define and return an association between *source* to *target* named *rel_id*. ''' + source_metaclass = self.find_metaclass(source.kind) + target_metaclass = self.find_metaclass(target.kind) + + key_map = list(zip(source.ids, target.ids)) + source_metaclass.add_link(target_metaclass, rel_id, target.phrase, key_map) + target_metaclass.add_link(source_metaclass, rel_id, source.phrase, key_map, reverse=True) + ass = Association(rel_id, source, target) self.associations.append(ass) @@ -668,21 +750,6 @@ def define_association(self, rel_id, source, target): Source.__r__[ass.id].add(ass) Target.__r__[ass.id].add(ass) - if target_kind not in Source.__q__: - Source.__q__[target_kind] = dict() - - if source_kind not in Target.__q__: - Target.__q__[source_kind] = dict() - - if ass.id not in Source.__q__[target_kind]: - Source.__q__[target_kind][ass.id] = dict() - - if ass.id not in Target.__q__[source_kind]: - Target.__q__[source_kind][ass.id] = dict() - - Source.__q__[target_kind][ass.id][target.phrase] = self._formalized_query(source, target) - Target.__q__[source_kind][ass.id][source.phrase] = self._formalized_query(target, source) - return ass def define_unique_identifier(self, kind, name, *named_attributes): @@ -753,63 +820,6 @@ def _formalized_query(self, source, target): target, kwargs) -def _find_association_links(inst1, inst2, rel_id, phrase): - ''' - Find association links which correspond to the given arguments. - ''' - if isinstance(rel_id, int): - rel_id = 'R%d' % rel_id - - kind1 = inst1.__class__.__name__.upper() - kind2 = inst2.__class__.__name__.upper() - - if (rel_id not in inst1.__r__ or - rel_id not in inst2.__r__): - raise ModelException('Unknown association %s---(%s)---%s' % (kind1, - rel_id, - kind2)) - for ass in chain(inst1.__r__[rel_id], inst2.__r__[rel_id]): - source_kind = ass.source.kind.upper() - target_kind = ass.target.kind.upper() - - if (kind1 == source_kind and - kind2 == target_kind and - ass.source.phrase == phrase): - return inst1, inst2, ass - - elif (kind1 == target_kind and - kind2 == source_kind and - ass.target.phrase == phrase): - return inst2, inst1, ass - - raise ModelException("Unknown association %s---(%s.'%s')---%s" % (inst1.__class__.__name__, - rel_id, - phrase, - inst2.__class__.__name__)) - - -def _deferred_association_operation(inst, end, op): - ''' - Generate list of deferred operations which needs to be invoked after an - update to identifying attributes on the association end point is made. - ''' - kind = inst.__class__.__name__.upper() - l = list() - for ass in chain(*inst.__r__.values()): - if kind != ass.target.kind.upper(): - continue - if not set(end.ids) & inst.__d__ - inst.__i__ & set(ass.target.ids): - # TODO: what about attributes which are both identifying, and referential? - continue - - nav = navigate_many(inst).nav(ass.source.kind, ass.id, ass.source.phrase) - for from_inst in nav(): - fn = partial(op, from_inst, inst, ass.id, ass.target.phrase) - l.append(fn) - - return l - - def navigate_one(instance): ''' Initialize a navigation from one *instance* to another across a one-to-one @@ -871,8 +881,8 @@ def navigate_subtype(supertype, rel_id): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id - for kind, query in supertype.__q__.items(): - if rel_id not in query: + for kind, rel_id_candidate, _ in supertype.__metaclass__.links: + if rel_id != rel_id_candidate: continue subtype = navigate_one(supertype).nav(kind, rel_id)() @@ -919,6 +929,65 @@ def sequence_generator(): return QuerySet(sequence_generator()) +def _find_link(inst1, inst2, rel_id, phrase): + metaclass1 = inst1.__metaclass__ + metaclass2 = inst2.__metaclass__ + + link = metaclass2.find_link(metaclass1.kind, rel_id, phrase) + if link and not isinstance(link, ReversedLink): + return inst2, inst1, link + + link = metaclass1.find_link(metaclass2.kind, rel_id, phrase) + if link and not isinstance(link, ReversedLink): + return inst1, inst2, link + + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + for other_link in metaclass1.links.values(): + if other_link == link: + continue + + if other_link.to_metaclass != metaclass1: + continue + + if other_link.rel_id != rel_id: + continue + + if other_link.phrase == phrase: + continue + + return inst1, inst2, other_link + + raise UnknownAssociationException(metaclass1.kind, metaclass2.kind, + rel_id, phrase) + + +def _deferred_link_operation(inst, link, op): + ''' + Generate list of deferred operations which needs to be invoked after an + update to identifying attributes on the association end point is made. + ''' + l = list() + + metaclass = inst.__metaclass__ + keys = set([key for key, _ in link.key_map]) + for link in metaclass.links.values(): + if not isinstance(link, ReversedLink): + continue + + derived_keys = set([key for key, _ in link.key_map]) + if not (keys & derived_keys): + continue + + nav = navigate_many(inst).nav(link.to_metaclass.kind, link.rel_id, link.phrase) + for from_inst in nav(): + fn = partial(op, from_inst, inst, link.rel_id, link.phrase) + l.append(fn) + + return l + + def relate(from_instance, to_instance, rel_id, phrase=''): ''' Relate *from_instance* to *to_instance* across *rel_id*. For refelxive @@ -931,17 +1000,14 @@ def relate(from_instance, to_instance, rel_id, phrase=''): ''' if None in [from_instance, to_instance]: return False - - from_instance, to_instance, ass = _find_association_links(from_instance, - to_instance, - rel_id, - phrase) + + from_instance, to_instance, link = _find_link(from_instance, to_instance, + rel_id, phrase) - post_process = _deferred_association_operation(from_instance, ass.source, - relate) - + post_process = _deferred_link_operation(from_instance, link, relate) updated = False - for from_name, to_name in zip(ass.source.ids, ass.target.ids): + + for from_name, to_name in link.key_map: if _is_null(to_instance, to_name): raise ModelException('undefined referential attribute %s' % to_name) @@ -976,17 +1042,12 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): if None in [from_instance, to_instance]: return False - from_instance, to_instance, ass = _find_association_links(from_instance, - to_instance, - rel_id, - phrase) - - post_process = _deferred_association_operation(from_instance, ass.source, - unrelate) + from_instance, to_instance, link = _find_link(from_instance, to_instance, + rel_id, phrase) + post_process = _deferred_link_operation(from_instance, link, unrelate) updated = False - from_names = set(ass.source.ids) & from_instance.__d__ - from_instance.__i__ - for from_name in from_names: + for from_name, _ in link.key_map: if _is_null(from_instance, from_name): raise ModelException('instances not related') From 668599ea06a3f31f4d6e59e2f1d81fcf4fd8e2bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 25 Jul 2016 23:41:26 +0200 Subject: [PATCH 033/216] cosmetics --- xtuml/model.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 5c86dfa..698dfb0 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -1,5 +1,5 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2016 John Törnblom from itertools import chain from functools import partial @@ -1068,7 +1068,7 @@ def delete(instance): if not isinstance(instance, BaseObject): raise ModelException("not an xtuml instance") - metaclass = instance.__metaclass__.delete(instance) + instance.__metaclass__.delete(instance) class WhereEqual(dict): @@ -1083,7 +1083,7 @@ def __call__(self, selected): def where_eq(**kwargs): ''' - Return a where-clause function which filters out instances based on named + Return a where-clause which filters out instances based on named keywords. Usage example: From 1076131711ef9ee30bd4c69ac50c1ed80856fccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 25 Jul 2016 23:49:54 +0200 Subject: [PATCH 034/216] model: remove __r__ from instances --- xtuml/model.py | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 698dfb0..4368c97 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -330,7 +330,6 @@ class BaseObject(object): A common base object for all instances created in a metamodel. Accesses to attributes, e.g. getattr/setattr, on these objects are case insensitive. ''' - __r__ = None # store relations __i__ = set() # set of identifying attributes __d__ = set() # set of derived attributes @@ -386,8 +385,7 @@ def __init__(self, kind, metamodel=None): self.links = dict() self.instances = list() self.cache = dict() - self.clazz = type(kind, (BaseObject,), dict(__r__=dict(), - __i__=set(), __d__=set(), + self.clazz = type(kind, (BaseObject,), dict(__i__=set(), __d__=set(), __metaclass__=self)) def __call__(self, *args, **kwargs): return self.new(*args, **kwargs) @@ -741,15 +739,6 @@ def define_association(self, rel_id, source, target): Source.__d__ |= set(ass.source.ids) Target.__i__ |= set(ass.target.ids) - if ass.id not in Source.__r__: - Source.__r__[ass.id] = set() - - if ass.id not in Target.__r__: - Target.__r__[ass.id] = set() - - Source.__r__[ass.id].add(ass) - Target.__r__[ass.id].add(ass) - return ass def define_unique_identifier(self, kind, name, *named_attributes): @@ -904,14 +893,24 @@ def sort_reflexive(set_of_instances, rel_id, phrase): rel_id = 'R%d' % rel_id # Figure out the phrase in the other direction - kind = type(set_of_instances.first).__name__.upper() - ass = next(iter(set_of_instances.first.__r__[rel_id])) - if ass.source.phrase == phrase: - other_phrase = ass.target.phrase + metaclass = set_of_instances.first.__metaclass__ + for link in metaclass.links.values(): + if link.to_metaclass != metaclass: + continue + + if link.rel_id != rel_id: + continue + + if link.phrase == phrase: + continue + + other_phrase = link.phrase + break else: - other_phrase = ass.source.phrase + raise UnknownAssociationException(metaclass.kind, rel_id, phrase) - first_filt = lambda sel: not navigate_one(sel).nav(kind, rel_id, phrase)() + + first_filt = lambda sel: not navigate_one(sel).nav(metaclass.kind, rel_id, phrase)() first_instances = list(filter(first_filt, set_of_instances)) if not first_instances: #the instance sequence is recursive, start anywhere @@ -922,7 +921,7 @@ def sequence_generator(): inst = first while inst: yield inst - inst = navigate_one(inst).nav(kind, rel_id, other_phrase)() + inst = navigate_one(inst).nav(metaclass.kind, rel_id, other_phrase)() if inst is first: break From ea8dbe37bde9e05729fc763581ceb241bbe91918 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 25 Jul 2016 23:55:47 +0200 Subject: [PATCH 035/216] cosmetics --- xtuml/model.py | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 4368c97..d502867 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -330,9 +330,6 @@ class BaseObject(object): A common base object for all instances created in a metamodel. Accesses to attributes, e.g. getattr/setattr, on these objects are case insensitive. ''' - __i__ = set() # set of identifying attributes - __d__ = set() # set of derived attributes - def __init__(self): self.__metaclass__.cache.clear() @@ -371,6 +368,8 @@ class MetaClass(object): metamodel = None kind = None attributes = None + referential_attributes = None + identifying_attributes = None links = None indices = None clazz = None @@ -381,12 +380,14 @@ def __init__(self, kind, metamodel=None): self.metamodel = metamodel self.kind = kind self.attributes = list() + self.referential_attributes = set() + self.identifying_attributes = set() self.indices = dict() self.links = dict() self.instances = list() self.cache = dict() - self.clazz = type(kind, (BaseObject,), dict(__i__=set(), __d__=set(), - __metaclass__=self)) + self.clazz = type(kind, (BaseObject,), dict(__metaclass__=self)) + def __call__(self, *args, **kwargs): return self.new(*args, **kwargs) @@ -394,14 +395,6 @@ def __call__(self, *args, **kwargs): def attribute_names(self): return [name for name, _ in self.attributes] - @property - def referential_attributes(self): - return self.clazz.__d__ - - @property - def identifying_attributes(self): - return self.clazz.__i__ - def add_link(self, metaclass, rel_id, phrase, key_map, reverse=False): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id @@ -727,18 +720,12 @@ def define_association(self, rel_id, source, target): source_metaclass.add_link(target_metaclass, rel_id, target.phrase, key_map) target_metaclass.add_link(source_metaclass, rel_id, source.phrase, key_map, reverse=True) + source_metaclass.referential_attributes |= set(source.ids) + target_metaclass.identifying_attributes |= set(target.ids) + ass = Association(rel_id, source, target) self.associations.append(ass) - source_kind = source.kind.upper() - target_kind = target.kind.upper() - - Source = self.find_class(source_kind) - Target = self.find_class(target_kind) - - Source.__d__ |= set(ass.source.ids) - Target.__i__ |= set(ass.target.ids) - return ass def define_unique_identifier(self, kind, name, *named_attributes): From 9b7129b24b9db7c304e6ca111c29d75f978acee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 08:27:53 +0200 Subject: [PATCH 036/216] cosmetics --- xtuml/__init__.py | 8 +++--- xtuml/model.py | 70 +---------------------------------------------- xtuml/tools.py | 68 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 72 insertions(+), 74 deletions(-) diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 85559d9..6293c23 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -27,10 +27,6 @@ from .model import SingleAssociationLink from .model import ManyAssociationLink -from .model import IdGenerator -from .model import UUIDGenerator -from .model import IntegerGenerator - from .model import QuerySet from .model import BaseObject from .model import MetaClass @@ -51,6 +47,10 @@ from .consistency_check import check_association_integrity from .consistency_check import check_uniqueness_constraint +from .tools import IdGenerator +from .tools import UUIDGenerator +from .tools import IntegerGenerator + from .tools import Walker from .tools import Visitor from .tools import NodePrintVisitor diff --git a/xtuml/model.py b/xtuml/model.py index d502867..00e1456 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -5,7 +5,6 @@ from functools import partial import logging -import uuid import collections try: @@ -516,73 +515,6 @@ def query(self, kwargs): return self.cache[index].execute() -class IdGenerator(object): - ''' - Base class for generating unique identifiers in a metamodel. - ''' - - readfunc = None - - def __init__(self): - ''' - Initialize an id generator with a start value. - ''' - self._current = self.readfunc() - - def peek(self): - ''' - Peek at the current value without progressing to the next one. - ''' - return self._current - - def next(self): - ''' - Progress to the next identifier, and return the current one. - ''' - val = self._current - self._current = self.readfunc() - return val - - def __iter__(self): - return self - - def __next__(self): - return self.next() - - -class UUIDGenerator(IdGenerator): - ''' - A uuid-based id generator for metamodels. 128-bit unique identifiers - are generated randomly when requested by a metamodel. - - **Note:** This is the default id generator. - ''' - def readfunc(self): - return uuid.uuid4().int - - -class IntegerGenerator(IdGenerator): - ''' - An integer-based id generator for metamodels. integers are generated - sequentially, starting from the number one. - - Generally, the uuid-based id generator shall be used. In some cases such as - testing however, having deterministic unique ids in a metamodel may be - benifitial. - - Usage example: - - >>> l = xtuml.ModelLoader() - >>> l.filename_input("schema.sql") - >>> l.filename_input("data.sql") - >>> m = l.build_metamodel(xtuml.IntegerGenerator()) - ''' - - _current = 0 - def readfunc(self): - return self._current + 1 - - def _is_null(inst, name): value = getattr(inst, name) if value: @@ -628,7 +560,7 @@ def __init__(self, id_generator=None): Optionally, specify an id generator used to obtain unique identifiers. ''' if id_generator is None: - id_generator = UUIDGenerator() + id_generator = xtuml.UUIDGenerator() self.metaclasses = dict() self.associations = list() diff --git a/xtuml/tools.py b/xtuml/tools.py index e774399..6414c1c 100644 --- a/xtuml/tools.py +++ b/xtuml/tools.py @@ -1,5 +1,71 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2016 John Törnblom +import uuid + + +class IdGenerator(object): + ''' + Base class for generating unique identifiers. + ''' + + readfunc = None + + def __init__(self): + ''' + Initialize an id generator with a start value. + ''' + self._current = self.readfunc() + + def peek(self): + ''' + Peek at the current value without progressing to the next one. + ''' + return self._current + + def next(self): + ''' + Progress to the next identifier, and return the current one. + ''' + val = self._current + self._current = self.readfunc() + return val + + def __iter__(self): + return self + + def __next__(self): + return self.next() + + +class UUIDGenerator(IdGenerator): + ''' + A uuid-based id generator. 128-bit unique numbers are generated + randomly each time a new id is requested. + ''' + def readfunc(self): + return uuid.uuid4().int + + +class IntegerGenerator(IdGenerator): + ''' + An integer-based id generator. Integers are generated sequentially, + starting from the number one. + + Generally, the uuid-based id generator shall be used. In some cases such as + testing however, having deterministic unique ids may be benifitial. + + Usage example: + + >>> l = xtuml.ModelLoader() + >>> l.filename_input("schema.sql") + >>> l.filename_input("data.sql") + >>> m = l.build_metamodel(xtuml.IntegerGenerator()) + ''' + + _current = 0 + def readfunc(self): + return self._current + 1 + class Visitor(object): ''' From 668a13f9edb9d4d42c50193c7967aae4be16432f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 08:40:44 +0200 Subject: [PATCH 037/216] cosmetics --- xtuml/model.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 00e1456..d9fe4d7 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -19,7 +19,9 @@ class ModelException(Exception): - pass + ''' + Base class for all pyxtuml-specific exceptions + ''' class UnknownClassException(ModelException): @@ -37,16 +39,6 @@ def __init__(self, from_kind, to_kind, rel_id, phrase): ModelException.__init__(self, msg) -def navigation(handle, kind, rel_id, phrase): - kind = kind.upper() - if isinstance(rel_id, int): - rel_id = 'R%d' % rel_id - - for inst in iter(handle): - for result in inst.__metaclass__.navigate(inst, kind, rel_id, phrase): - yield result - - class NavChain(object): ''' A navigation chain initializes a query from one or more instances. @@ -73,9 +65,19 @@ def __init__(self, handle): self._kind = None def nav(self, kind, relid, phrase=''): - self.handle = navigation(self.handle, kind, relid, phrase) + self.handle = NavChain._nav(self.handle, kind, relid, phrase) return self + @staticmethod + def _nav(handle, kind, rel_id, phrase): + kind = kind.upper() + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + for inst in iter(handle): + for result in inst.__metaclass__.navigate(inst, kind, rel_id, phrase): + yield result + def __getattr__(self, name): self._kind = name return self @@ -92,9 +94,9 @@ def __getitem__(self, args): class NavOneChain(NavChain): def __call__(self, where_clause=None): - handle = self.handle or list() + handle = self.handle or iter([]) if not where_clause: - where_clause = lambda sel: True + return next(handle, None) for inst in handle: if where_clause(inst): From e7afba599645a67a64b3698b1325913e414d1e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 08:42:37 +0200 Subject: [PATCH 038/216] cosmetics --- xtuml/__init__.py | 21 +++++++------ xtuml/model.py | 76 +---------------------------------------------- xtuml/tools.py | 74 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 84 deletions(-) diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 6293c23..d6dc4d5 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -1,8 +1,19 @@ # encoding: utf-8 # Copyright (C) 2015 John Törnblom ''' -pyxtuml is a python library for parsing, manipulating, and generating BridgePoint xtUML models. +pyxtuml is a python library for parsing, manipulating, and generating +BridgePoint xtUML models. ''' +from . import version + +from .tools import IdGenerator +from .tools import UUIDGenerator +from .tools import IntegerGenerator +from .tools import OrderedSet + +from .tools import Walker +from .tools import Visitor +from .tools import NodePrintVisitor from .load import load_metamodel from .load import ParsingException @@ -47,12 +58,4 @@ from .consistency_check import check_association_integrity from .consistency_check import check_uniqueness_constraint -from .tools import IdGenerator -from .tools import UUIDGenerator -from .tools import IntegerGenerator - -from .tools import Walker -from .tools import Visitor -from .tools import NodePrintVisitor -from . import version diff --git a/xtuml/model.py b/xtuml/model.py index d9fe4d7..39e9ba7 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -208,84 +208,10 @@ def __init__(self, kind, conditional=False, ids=[], phrase=''): AssociationLink.__init__(self, kind, cardinality, ids, phrase) -class OrderedSet(collections.MutableSet): - ''' - Set that remembers original insertion order. - ''' - # Originally posted on http://code.activestate.com/recipes/576694 - # by Raymond Hettinger. - - def __init__(self, iterable=None): - self.end = end = [] - end += [None, end, end] # sentinel node for doubly linked list - self.map = {} # key --> [key, prev, next] - if iterable is not None: - self |= iterable - - def add(self, key): - if key not in self.map: - end = self.end - curr = end[1] - curr[2] = end[1] = self.map[key] = [key, curr, end] - - def discard(self, key): - if key in self.map: - key, prev, next_ = self.map.pop(key) - prev[2] = next_ - next_[1] = prev - - def pop(self, last=True): - if not self: - raise KeyError('set is empty') - - if last: - key = self.end[1][0] - else: - key = self.end[2][0] - - self.discard(key) - return key - - def __len__(self): - return len(self.map) - - def __contains__(self, key): - return key in self.map - - def __iter__(self): - end = self.end - curr = end[2] - while curr is not end: - yield curr[0] - curr = curr[2] - - def __reversed__(self): - end = self.end - curr = end[1] - while curr is not end: - yield curr[0] - curr = curr[1] - - def __repr__(self): - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, list(self)) - - def __eq__(self, other): - if not isinstance(other, OrderedSet): - return self == OrderedSet(iter(other)) - - if not len(self) == len(other): - return False - - return list(self) == list(other) - - -class QuerySet(OrderedSet): +class QuerySet(xtuml.OrderedSet): ''' An ordered set which holds instances that match queries from a metamodel. ''' - @property def first(self): if len(self): diff --git a/xtuml/tools.py b/xtuml/tools.py index 6414c1c..9b6b9ab 100644 --- a/xtuml/tools.py +++ b/xtuml/tools.py @@ -1,5 +1,6 @@ # encoding: utf-8 # Copyright (C) 2016 John Törnblom +import collections import uuid @@ -105,6 +106,79 @@ def default_leave(self, node): pass +class OrderedSet(collections.MutableSet): + ''' + Set that remembers original insertion order. + ''' + # Originally posted on http://code.activestate.com/recipes/576694 + # by Raymond Hettinger. + + def __init__(self, iterable=None): + self.end = end = [] + end += [None, end, end] # sentinel node for doubly linked list + self.map = {} # key --> [key, prev, next] + if iterable is not None: + self |= iterable + + def add(self, key): + if key not in self.map: + end = self.end + curr = end[1] + curr[2] = end[1] = self.map[key] = [key, curr, end] + + def discard(self, key): + if key in self.map: + key, prev, next_ = self.map.pop(key) + prev[2] = next_ + next_[1] = prev + + def pop(self, last=True): + if not self: + raise KeyError('set is empty') + + if last: + key = self.end[1][0] + else: + key = self.end[2][0] + + self.discard(key) + return key + + def __len__(self): + return len(self.map) + + def __contains__(self, key): + return key in self.map + + def __iter__(self): + end = self.end + curr = end[2] + while curr is not end: + yield curr[0] + curr = curr[2] + + def __reversed__(self): + end = self.end + curr = end[1] + while curr is not end: + yield curr[0] + curr = curr[1] + + def __repr__(self): + if not self: + return '%s()' % (self.__class__.__name__,) + return '%s(%r)' % (self.__class__.__name__, list(self)) + + def __eq__(self, other): + if not isinstance(other, OrderedSet): + return self == OrderedSet(iter(other)) + + if not len(self) == len(other): + return False + + return list(self) == list(other) + + class Walker(object): ''' A walker may be used to walk a tree. From a8d5e4db0b5a29c4ad3b94cb4563a9488e3a654f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 08:42:45 +0200 Subject: [PATCH 039/216] cosmetics --- xtuml/model.py | 54 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 39e9ba7..7d60620 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -442,33 +442,6 @@ def query(self, kwargs): return self.cache[index].execute() - -def _is_null(inst, name): - value = getattr(inst, name) - if value: - return False - - elif value is None: - return True - - name = name.upper() - for attr_name, attr_ty in inst.__metaclass__.attributes: - if attr_name.upper() != name: - continue - - attr_ty = attr_ty.upper() - if attr_ty == 'UNIQUE_ID': - # UUID(int=0) is reserved for null - return value == 0 - - elif attr_ty == 'STRING': - # empty string is reserved for null - return len(value) == 0 - - else: - #null-values for integer, boolean and real are not supported - return False - class MetaModel(object): ''' @@ -833,7 +806,34 @@ def _deferred_link_operation(inst, link, op): return l + +def _is_null(inst, name): + value = getattr(inst, name) + if value: + return False + elif value is None: + return True + + name = name.upper() + for attr_name, attr_ty in inst.__metaclass__.attributes: + if attr_name.upper() != name: + continue + + attr_ty = attr_ty.upper() + if attr_ty == 'UNIQUE_ID': + # UUID(int=0) is reserved for null + return value == 0 + + elif attr_ty == 'STRING': + # empty string is reserved for null + return len(value) == 0 + + else: + #null-values for integer, boolean and real are not supported + return False + + def relate(from_instance, to_instance, rel_id, phrase=''): ''' Relate *from_instance* to *to_instance* across *rel_id*. For refelxive From a2ba9f2702aac536271380873660fb7972486868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 08:48:18 +0200 Subject: [PATCH 040/216] cosmetics --- xtuml/model.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 7d60620..b0e63b0 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -749,6 +749,9 @@ def sequence_generator(): def _find_link(inst1, inst2, rel_id, phrase): + ''' + Find links which correspond to the given arguments. + ''' metaclass1 = inst1.__metaclass__ metaclass2 = inst2.__metaclass__ @@ -807,8 +810,12 @@ def _deferred_link_operation(inst, link, op): return l -def _is_null(inst, name): - value = getattr(inst, name) +def _is_null(instance, name): + ''' + Determine if an attribute of an *instance* with a specific *name* + is null. + ''' + value = getattr(instance, name) if value: return False @@ -816,7 +823,7 @@ def _is_null(inst, name): return True name = name.upper() - for attr_name, attr_ty in inst.__metaclass__.attributes: + for attr_name, attr_ty in instance.__metaclass__.attributes: if attr_name.upper() != name: continue From 88c706fab21e81f4126ae7efd9bf378dd3938078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 08:49:10 +0200 Subject: [PATCH 041/216] cosmetics --- xtuml/model.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/xtuml/model.py b/xtuml/model.py index b0e63b0..ecfe9c6 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -111,13 +111,18 @@ def __call__(self, where_clause=None): class Link(object): + from_metaclass = None + rel_id = None + to_metaclass = None + phrase = None + key_map = None def __init__(self, from_metaclass, rel_id, to_metaclass, phrase, key_map): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id - self.rel_id = rel_id self.from_metaclass = from_metaclass + self.rel_id = rel_id self.to_metaclass = to_metaclass self.phrase = phrase self.key_map = key_map From 62ec7c11ea03f536ade1280b064b0c822da16a15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 17:35:03 +0200 Subject: [PATCH 042/216] cosmetics --- xtuml/model.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index ecfe9c6..1d06d13 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -339,6 +339,8 @@ def add_link(self, metaclass, rel_id, phrase, key_map, reverse=False): key = (metaclass.kind, rel_id, phrase) self.links[key] = link + return link + def find_link(self, kind, rel_id, phrase): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id @@ -618,21 +620,9 @@ def is_consistent(self): if not xtuml.check_association_integrity(self): return False + return xtuml.check_uniqueness_constraint(self) - def _select_endpoint(self, inst, source, target, kwargs): - metaclass = self.find_metaclass(target.kind) - keys = chain(target.ids, kwargs.keys()) - values = chain([getattr(inst, name) for name in source.ids], - kwargs.values()) - kwargs = dict(zip(keys, values)) - - return metaclass.query(kwargs) - - def _formalized_query(self, source, target): - return lambda inst, **kwargs: self._select_endpoint(inst, source, - target, kwargs) - def navigate_one(instance): ''' From 5fe7071ed4a6c4987af4e474148f6cae0acfce73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 17:55:11 +0200 Subject: [PATCH 043/216] cosmetics --- bridgepoint/ooaofooa.py | 20 ++-- tests/test_xtuml/test_consistency.py | 63 +++++++++++++ tests/test_xtuml/test_metamodel.py | 133 +++------------------------ tests/test_xtuml/test_tools.py | 81 ++++++++++++++++ xtuml/model.py | 1 - 5 files changed, 165 insertions(+), 133 deletions(-) create mode 100644 tests/test_xtuml/test_consistency.py diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index b2cf608..da9f6e1 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -4018,24 +4018,14 @@ def build_component(self, name=None, derived_attributes=False): return mk_component(mm, c_c, derived_attributes) -# Backwards compatabillity with older versions of pyxtuml -Loader = ModelLoader - - -def empty_model(): - ''' - Load and return an empty metamodel expressed in ooaofooa. - ''' - loader = Loader() - return loader.build_metamodel() - - -def load_metamodel(resource): +def load_metamodel(resource=None): ''' Load and return a metamodel expressed in ooaofooa from a *resource*. The resource may be either a filename, a path, or a list of filenames and/or paths. ''' + resource = resource or list() + if isinstance(resource, str): resource = [resource] @@ -4046,3 +4036,7 @@ def load_metamodel(resource): return loader.build_metamodel() +# Backwards compatabillity with older versions of pyxtuml +Loader = ModelLoader +empty_model = load_metamodel + diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py new file mode 100644 index 0000000..954c8a9 --- /dev/null +++ b/tests/test_xtuml/test_consistency.py @@ -0,0 +1,63 @@ +import unittest +import xtuml +import bridgepoint + +class TestConcistency(unittest.TestCase): + ''' + Test suite for the module xtuml.consistency_check + ''' + + def setUp(self): + self.metamodel = bridgepoint.load_metamodel() + + def tearDown(self): + del self.metamodel + + def test_empty_model(self): + self.assertTrue(self.metamodel.is_consistent()) + + def test_association_integrity(self): + m = self.metamodel + s_dt = m.select_one('S_DT', xtuml.where_eq(Name='string')) + s_bparm = m.new('S_BPARM', Name='My_Parameter') + s_ee = m.new('S_EE', Name='My_External_Entity', Key_Lett='My_External_Entity') + pe_pe = m.new('PE_PE', Visibility=True, type=5) + s_brg = m.new('S_BRG', Name='My_Bridge_Operation') + + + self.assertFalse(xtuml.check_association_integrity(m, 22)) + self.assertTrue(xtuml.relate(s_bparm, s_dt, 22)) + self.assertTrue(xtuml.check_association_integrity(m, 22)) + + self.assertFalse(xtuml.check_association_integrity(m, 21)) + self.assertTrue(xtuml.relate(s_bparm, s_brg, 21)) + self.assertTrue(xtuml.check_association_integrity(m, 21)) + + self.assertFalse(xtuml.check_association_integrity(m, 20)) + self.assertTrue(xtuml.relate(s_brg, s_dt, 20)) + self.assertTrue(xtuml.check_association_integrity(m, 20)) + + self.assertFalse(xtuml.check_association_integrity(m, 8001)) + self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) + self.assertTrue(xtuml.check_association_integrity(m, 8001)) + + self.assertFalse(xtuml.check_association_integrity(m, 19)) + self.assertTrue(xtuml.relate(s_brg, s_ee, 19)) + self.assertTrue(xtuml.check_association_integrity(m, 19)) + + # the old, unused association R8 is still present in ooaofooa, and thus + # consistency check fails on S_EE. + #self.assertTrue(m.is_consistent()) + + def test_uniqueness_constraint(self): + m = self.metamodel + self.assertTrue(m.is_consistent()) + + s_dt = m.select_one('S_DT', xtuml.where_eq(Name='string')) + m.clone(s_dt) + + self.assertFalse(m.is_consistent()) + self.assertTrue(xtuml.check_uniqueness_constraint(m, 'PE_PE')) + + xtuml.delete(s_dt) + self.assertTrue(m.is_consistent()) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index cc1d4ce..34e0dfe 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -404,55 +404,6 @@ def test_relate_bottom_up(self): inst = xtuml.navigate_any(pe_pe).S_EE[8001].S_BRG[19].S_BPARM[21]() self.assertEqual(inst, s_bparm) - - def test_concistency_of_empty_model(self): - self.assertTrue(self.metamodel.is_consistent()) - - def test_consistency_of_non_empty_model(self): - m = self.metamodel - s_dt = m.select_one('S_DT', where(Name='string')) - s_bparm = m.new('S_BPARM', Name='My_Parameter') - s_ee = m.new('S_EE', Name='My_External_Entity', Key_Lett='My_External_Entity') - pe_pe = m.new('PE_PE', Visibility=True, type=5) - s_brg = m.new('S_BRG', Name='My_Bridge_Operation') - - - self.assertFalse(xtuml.check_association_integrity(m, 22)) - self.assertTrue(xtuml.relate(s_bparm, s_dt, 22)) - self.assertTrue(xtuml.check_association_integrity(m, 22)) - - self.assertFalse(xtuml.check_association_integrity(m, 21)) - self.assertTrue(xtuml.relate(s_bparm, s_brg, 21)) - self.assertTrue(xtuml.check_association_integrity(m, 21)) - - self.assertFalse(xtuml.check_association_integrity(m, 20)) - self.assertTrue(xtuml.relate(s_brg, s_dt, 20)) - self.assertTrue(xtuml.check_association_integrity(m, 20)) - - self.assertFalse(xtuml.check_association_integrity(m, 8001)) - self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) - self.assertTrue(xtuml.check_association_integrity(m, 8001)) - - self.assertFalse(xtuml.check_association_integrity(m, 19)) - self.assertTrue(xtuml.relate(s_brg, s_ee, 19)) - self.assertTrue(xtuml.check_association_integrity(m, 19)) - - # the old, unused association R8 is still present in ooaofooa, and thus - # consistency check fails on S_EE. - #self.assertTrue(m.is_consistent()) - - def test_uniqueness_constraint(self): - m = self.metamodel - self.assertTrue(m.is_consistent()) - - s_dt = m.select_one('S_DT', where(Name='string')) - m.clone(s_dt) - - self.assertFalse(m.is_consistent()) - self.assertTrue(xtuml.check_uniqueness_constraint(m, 'PE_PE')) - - xtuml.delete(s_dt) - self.assertTrue(m.is_consistent()) class TestDefineAssociations(unittest.TestCase): @@ -600,82 +551,26 @@ class TestQuerySet(unittest.TestCase): ''' Test suite for the class xtuml.QuerySet ''' - - def test_equal_operator(self): - q1 = xtuml.QuerySet() - q2 = xtuml.QuerySet() - - self.assertEqual(q1, q2) + def test_first(self): + q = xtuml.QuerySet([1, 2, 3]) + self.assertEqual(q.first, 1) - q1 = xtuml.QuerySet([1]) - q2 = xtuml.QuerySet([1]) - - self.assertEqual(q1, q2) - - q1 = xtuml.QuerySet([1, 2, 3]) - q2 = xtuml.QuerySet([1, 2, 3]) - - self.assertEqual(q1, q2) - self.assertEqual(q1, [1, 2, 3]) + q = xtuml.QuerySet() + self.assertIsNone(q.first) - def test_not_equal_operator(self): - q1 = xtuml.QuerySet() - q2 = xtuml.QuerySet([1]) - self.assertNotEqual(q1, q2) - self.assertNotEqual(q2, q1) + def test_last(self): + q = xtuml.QuerySet([1, 2, 3]) + self.assertEqual(q.last, 3) - q1 = xtuml.QuerySet([1, 2, 3]) - q2 = xtuml.QuerySet([1, 3]) - self.assertNotEqual(q1, q2) - self.assertNotEqual(q2, q1) + q = xtuml.QuerySet() + self.assertIsNone(q.last) - q1 = xtuml.QuerySet([1, 2, 3]) - q2 = xtuml.QuerySet([1, 3, 2]) - self.assertNotEqual(q1, q2) + def test_one_item(self): + q = xtuml.QuerySet([2]) + self.assertEqual(q.first, 2) + self.assertEqual(q.last, 2) - def test_pop_empty(self): - q = xtuml.QuerySet() - self.assertRaises(KeyError, q.pop) - - def test_pop_last(self): - q1 = xtuml.QuerySet([1, 2]) - q2 = xtuml.QuerySet([1]) - self.assertNotEqual(q1, q2) - - q1.pop() - self.assertEqual(q1, q2) - def test_pop_first(self): - q1 = xtuml.QuerySet([2, 1]) - q2 = xtuml.QuerySet([1]) - self.assertNotEqual(q1, q2) - - q1.pop(last=False) - self.assertEqual(q1, q2) - -class TestIdGenerator(unittest.TestCase): - ''' - Test suite for the IdGenerator classes - ''' - - def test_next_pattern(self): - i = xtuml.IntegerGenerator() - self.assertEqual(i.peek(), 1) - self.assertEqual(i.next(), 1) - self.assertEqual(i.next(), 2) - self.assertEqual(i.peek(), 3) - self.assertEqual(i.peek(), 3) - - def test_generator_pattern(self): - i = xtuml.IntegerGenerator() - count = 1 - for v in i: - self.assertEqual(v, count) - count += 1 - if count == 10: - break - - if __name__ == "__main__": unittest.main() diff --git a/tests/test_xtuml/test_tools.py b/tests/test_xtuml/test_tools.py index 832745f..4f28c81 100644 --- a/tests/test_xtuml/test_tools.py +++ b/tests/test_xtuml/test_tools.py @@ -56,6 +56,87 @@ def test_none(self): self.assertEqual(s, '') +class TestIdGenerator(unittest.TestCase): + ''' + Test suite for the IdGenerator classes + ''' + + def test_next_pattern(self): + i = xtuml.IntegerGenerator() + self.assertEqual(i.peek(), 1) + self.assertEqual(i.next(), 1) + self.assertEqual(i.next(), 2) + self.assertEqual(i.peek(), 3) + self.assertEqual(i.peek(), 3) + + def test_generator_pattern(self): + i = xtuml.IntegerGenerator() + count = 1 + for v in i: + self.assertEqual(v, count) + count += 1 + if count == 10: + break + + +class TestOrderedSet(unittest.TestCase): + ''' + Test suite for the class xtuml.OrderedSet + ''' + + def test_equal_operator(self): + s1 = xtuml.OrderedSet() + s2 = xtuml.OrderedSet() + + self.assertEqual(s1, s2) + + s1 = xtuml.OrderedSet([1]) + s2 = xtuml.OrderedSet([1]) + + self.assertEqual(s1, s2) + + s1 = xtuml.OrderedSet([1, 2, 3]) + s2 = xtuml.OrderedSet([1, 2, 3]) + + self.assertEqual(s1, s2) + self.assertEqual(s1, [1, 2, 3]) + + def test_not_equal_operator(self): + s1 = xtuml.OrderedSet() + s2 = xtuml.OrderedSet([1]) + self.assertNotEqual(s1, s2) + self.assertNotEqual(s2, s1) + + s1 = xtuml.OrderedSet([1, 2, 3]) + s2 = xtuml.OrderedSet([1, 3]) + self.assertNotEqual(s1, s2) + self.assertNotEqual(s2, s1) + + s1 = xtuml.OrderedSet([1, 2, 3]) + s2 = xtuml.OrderedSet([1, 3, 2]) + self.assertNotEqual(s1, s2) + + def test_pop_empty(self): + q = xtuml.OrderedSet() + self.assertRaises(KeyError, q.pop) + + def test_pop_last(self): + s1 = xtuml.OrderedSet([1, 2]) + s2 = xtuml.OrderedSet([1]) + self.assertNotEqual(s1, s2) + + s1.pop() + self.assertEqual(s1, s2) + + def test_pop_first(self): + s1 = xtuml.OrderedSet([2, 1]) + s2 = xtuml.OrderedSet([1]) + self.assertNotEqual(s1, s2) + + s1.pop(last=False) + self.assertEqual(s1, s2) + + if __name__ == "__main__": unittest.main() diff --git a/xtuml/model.py b/xtuml/model.py index 1d06d13..2686ce7 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -1,7 +1,6 @@ # encoding: utf-8 # Copyright (C) 2016 John Törnblom -from itertools import chain from functools import partial import logging From 8e0c1e3a217bbab5370477a64d334f2da9811c84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 18:07:19 +0200 Subject: [PATCH 044/216] cosmetics --- tests/test_xtuml/test_metamodel.py | 109 ------------------------ tests/test_xtuml/test_relate.py | 129 +++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 109 deletions(-) create mode 100644 tests/test_xtuml/test_relate.py diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 34e0dfe..9586f69 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -212,14 +212,6 @@ def test_select_many_undefined(self): self.assertRaises(xtuml.UnknownClassException, self.metamodel.select_many, 'MY_CLASS') - def test_relate(self): - s_edt = self.metamodel.new('S_EDT') - s_dt = self.metamodel.new('S_DT') - pe_pe = self.metamodel.new('PE_PE') - self.assertTrue(xtuml.relate(s_dt, pe_pe, 8001)) - self.assertTrue(xtuml.relate(s_dt, s_edt, 17)) - self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) - def test_delete(self): inst = self.metamodel.select_any('S_DT', where(Name='void')) xtuml.delete(inst) @@ -260,28 +252,6 @@ def test_clone(self): def test_delete_unknown_instance(self): self.assertRaises(xtuml.ModelException, xtuml.delete, self) - def test_relate_reflexive_one_to_other(self): - inst1 = self.metamodel.new('ACT_SMT') - inst2 = self.metamodel.new('ACT_SMT') - act_blk = self.metamodel.new('ACT_BLK') - - self.assertTrue(xtuml.relate(inst1, act_blk, 602)) - self.assertTrue(xtuml.relate(inst2, act_blk, 602)) - self.assertTrue(xtuml.relate(inst1, inst2, 661, 'precedes')) - self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) - self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) - - def test_relate_reflexive_other_to_one(self): - inst1 = self.metamodel.new('ACT_SMT') - inst2 = self.metamodel.new('ACT_SMT') - act_blk = self.metamodel.new('ACT_BLK') - - self.assertTrue(xtuml.relate(inst1, act_blk, 602)) - self.assertTrue(xtuml.relate(inst2, act_blk, 602)) - self.assertTrue(xtuml.relate(inst2, inst1, 661, 'succeeds')) - self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) - self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) - def test_sort_reflexive(self): act_blk = self.metamodel.new('ACT_BLK') @@ -326,85 +296,6 @@ def test_sort_reflexive_with_recursion(self): for inst1, inst2 in zip(inst_set, [p1, p2, p3, p4]): self.assertEqual(inst1, inst2) - def test_relate_reflexive_without_phrase(self): - inst1 = self.metamodel.new('ACT_SMT') - inst2 = self.metamodel.new('ACT_SMT') - - self.assertRaises(xtuml.ModelException, xtuml.relate, - inst1, inst2, 661, '') - - def test_relate_inverted_order(self): - s_edt = self.metamodel.new('S_EDT') - s_dt = self.metamodel.new('S_DT') - pe_pe = self.metamodel.new('PE_PE') - self.assertTrue(xtuml.relate(pe_pe, s_dt, 8001)) - self.assertTrue(xtuml.relate(s_edt, s_dt, 17)) - self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) - - def test_relate_invalid_relid(self): - s_edt = self.metamodel.new('S_EDT') - s_dt = self.metamodel.new('S_DT') - self.assertRaises(xtuml.ModelException, xtuml.relate, s_edt, s_dt, 0) - - def test_unrelate(self): - inst1 = self.metamodel.new('ACT_SMT') - inst2 = self.metamodel.new('ACT_SMT') - act_blk = self.metamodel.new('ACT_BLK') - - self.assertTrue(xtuml.relate(inst1, act_blk, 602)) - self.assertTrue(xtuml.relate(inst2, act_blk, 602)) - - self.assertTrue(xtuml.relate(inst1, inst2, 661, 'precedes')) - self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) - self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) - - self.assertTrue(xtuml.unrelate(inst1, inst2, 661, 'precedes')) - self.assertIsNone(xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) - self.assertIsNone(xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) - - def test_relate_in_wrong_order(self): - s_ee = self.metamodel.new('S_EE') - pe_pe = self.metamodel.new('PE_PE') - EE_ID = s_ee.EE_ID - Element_ID = pe_pe.Element_ID - self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) - self.assertNotEqual(EE_ID, s_ee.EE_ID) - self.assertEqual(Element_ID, pe_pe.Element_ID) - - def test_relate_top_down(self): - m = self.metamodel - s_dt = m.select_one('S_DT', where(Name='string')) - s_bparm = m.new('S_BPARM', Name='My_Parameter') - s_ee = m.new('S_EE', Name='My_External_Entity', Key_Lett='My_External_Entity') - pe_pe = m.new('PE_PE', Visibility=True, type=5) - s_brg = m.new('S_BRG', Name='My_Bridge_Operation') - - self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) - self.assertTrue(xtuml.relate(s_brg, s_ee, 19)) - self.assertTrue(xtuml.relate(s_brg, s_dt, 20)) - self.assertTrue(xtuml.relate(s_bparm, s_brg, 21)) - self.assertTrue(xtuml.relate(s_bparm, s_dt, 22)) - - inst = xtuml.navigate_any(pe_pe).S_EE[8001].S_BRG[19].S_BPARM[21]() - self.assertEqual(inst, s_bparm) - - def test_relate_bottom_up(self): - m = self.metamodel - s_dt = m.select_one('S_DT', where(Name='string')) - s_bparm = m.new('S_BPARM', Name='My_Parameter') - s_ee = m.new('S_EE', Name='My_External_Entity', Key_Lett='My_External_Entity') - pe_pe = m.new('PE_PE', Visibility=True, type=5) - s_brg = m.new('S_BRG', Name='My_Bridge_Operation') - - self.assertTrue(xtuml.relate(s_bparm, s_dt, 22)) - self.assertTrue(xtuml.relate(s_bparm, s_brg, 21)) - self.assertTrue(xtuml.relate(s_brg, s_dt, 20)) - self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) - self.assertTrue(xtuml.relate(s_brg, s_ee, 19)) - - inst = xtuml.navigate_any(pe_pe).S_EE[8001].S_BRG[19].S_BPARM[21]() - self.assertEqual(inst, s_bparm) - class TestDefineAssociations(unittest.TestCase): ''' diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py new file mode 100644 index 0000000..172c1ae --- /dev/null +++ b/tests/test_xtuml/test_relate.py @@ -0,0 +1,129 @@ +# encoding: utf-8 +# Copyright (C) 2016 John Törnblom + +import unittest +import xtuml +import bridgepoint + +class TestRelateUnrelate(unittest.TestCase): + ''' + Test suite for xtuml relate/unrelate operations + ''' + def setUp(self): + self.m = bridgepoint.load_metamodel() + + def tearDown(self): + del self.m + + def test_relate(self): + s_edt = self.m.new('S_EDT') + s_dt = self.m.new('S_DT') + pe_pe = self.m.new('PE_PE') + self.assertTrue(xtuml.relate(s_dt, pe_pe, 8001)) + self.assertTrue(xtuml.relate(s_dt, s_edt, 17)) + self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) + + def test_relate_reflexive_one_to_other(self): + inst1 = self.m.new('ACT_SMT') + inst2 = self.m.new('ACT_SMT') + act_blk = self.m.new('ACT_BLK') + + self.assertTrue(xtuml.relate(inst1, act_blk, 602)) + self.assertTrue(xtuml.relate(inst2, act_blk, 602)) + self.assertTrue(xtuml.relate(inst1, inst2, 661, 'precedes')) + self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) + self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) + + def test_relate_reflexive_other_to_one(self): + inst1 = self.m.new('ACT_SMT') + inst2 = self.m.new('ACT_SMT') + act_blk = self.m.new('ACT_BLK') + + self.assertTrue(xtuml.relate(inst1, act_blk, 602)) + self.assertTrue(xtuml.relate(inst2, act_blk, 602)) + self.assertTrue(xtuml.relate(inst2, inst1, 661, 'succeeds')) + self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) + self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) + + def test_relate_reflexive_without_phrase(self): + inst1 = self.m.new('ACT_SMT') + inst2 = self.m.new('ACT_SMT') + + self.assertRaises(xtuml.ModelException, xtuml.relate, + inst1, inst2, 661, '') + + def test_relate_inverted_order(self): + s_edt = self.m.new('S_EDT') + s_dt = self.m.new('S_DT') + pe_pe = self.m.new('PE_PE') + self.assertTrue(xtuml.relate(pe_pe, s_dt, 8001)) + self.assertTrue(xtuml.relate(s_edt, s_dt, 17)) + self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) + + def test_relate_invalid_relid(self): + s_edt = self.m.new('S_EDT') + s_dt = self.m.new('S_DT') + self.assertRaises(xtuml.ModelException, xtuml.relate, s_edt, s_dt, 0) + + def test_unrelate(self): + inst1 = self.m.new('ACT_SMT') + inst2 = self.m.new('ACT_SMT') + act_blk = self.m.new('ACT_BLK') + + self.assertTrue(xtuml.relate(inst1, act_blk, 602)) + self.assertTrue(xtuml.relate(inst2, act_blk, 602)) + + self.assertTrue(xtuml.relate(inst1, inst2, 661, 'precedes')) + self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) + self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) + + self.assertTrue(xtuml.unrelate(inst1, inst2, 661, 'precedes')) + self.assertIsNone(xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) + self.assertIsNone(xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) + + def test_relate_in_wrong_order(self): + s_ee = self.m.new('S_EE') + pe_pe = self.m.new('PE_PE') + EE_ID = s_ee.EE_ID + Element_ID = pe_pe.Element_ID + self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) + self.assertNotEqual(EE_ID, s_ee.EE_ID) + self.assertEqual(Element_ID, pe_pe.Element_ID) + + def test_relate_top_down(self): + s_dt = self.m.select_one('S_DT', xtuml.where_eq(Name='string')) + s_bparm = self.m.new('S_BPARM', Name='My_Parameter') + s_ee = self.m.new('S_EE', Name='My_External_Entity', Key_Lett='My_External_Entity') + pe_pe = self.m.new('PE_PE', Visibility=True, type=5) + s_brg = self.m.new('S_BRG', Name='My_Bridge_Operation') + + self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) + self.assertTrue(xtuml.relate(s_brg, s_ee, 19)) + self.assertTrue(xtuml.relate(s_brg, s_dt, 20)) + self.assertTrue(xtuml.relate(s_bparm, s_brg, 21)) + self.assertTrue(xtuml.relate(s_bparm, s_dt, 22)) + + inst = xtuml.navigate_any(pe_pe).S_EE[8001].S_BRG[19].S_BPARM[21]() + self.assertEqual(inst, s_bparm) + + def test_relate_bottom_up(self): + s_dt = self.m.select_one('S_DT', xtuml.where_eq(Name='string')) + s_bparm = self.m.new('S_BPARM', Name='My_Parameter') + s_ee = self.m.new('S_EE', Name='My_External_Entity', Key_Lett='My_External_Entity') + pe_pe = self.m.new('PE_PE', Visibility=True, type=5) + s_brg = self.m.new('S_BRG', Name='My_Bridge_Operation') + + self.assertTrue(xtuml.relate(s_bparm, s_dt, 22)) + self.assertTrue(xtuml.relate(s_bparm, s_brg, 21)) + self.assertTrue(xtuml.relate(s_brg, s_dt, 20)) + self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) + self.assertTrue(xtuml.relate(s_brg, s_ee, 19)) + + inst = xtuml.navigate_any(pe_pe).S_EE[8001].S_BRG[19].S_BPARM[21]() + self.assertEqual(inst, s_bparm) + + + +if __name__ == "__main__": + unittest.main() + From 70998c74047904f72daa4e0b3c802fe080688d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 18:14:07 +0200 Subject: [PATCH 045/216] cosmetics --- tests/test_xtuml/test_metamodel.py | 34 +--------------------- tests/test_xtuml/test_navigation.py | 45 +++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 33 deletions(-) create mode 100644 tests/test_xtuml/test_navigation.py diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 9586f69..de3deb9 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -55,20 +55,7 @@ def test_association_link_constructor(self): self.assertTrue(l.is_many) self.assertTrue(l.is_conditional) - -class TestNavChain(unittest.TestCase): - ''' - Test suite for the class xtuml.NavChain - ''' - - def test_navigate_none(self): - self.assertIsNone(xtuml.navigate_one(None)()) - self.assertEqual(len(xtuml.navigate_many(None)()), 0) - - def test_navigate_invalid_handle(self): - self.assertRaises(xtuml.ModelException, xtuml.navigate_one, 50) - - + class TestModel(unittest.TestCase): ''' Test suite for the class xtuml.MetaModel @@ -107,25 +94,6 @@ def test_select_any_where(self): inst = m.select_any('S_DT', where(Name='void')) self.assertEqual(inst.Name, 'void') - def test_navigate_one(self): - m = self.metamodel - s_dt = m.select_any('S_DT', where(Name='void')) - pe_pe = xtuml.navigate_one(s_dt).PE_PE[8001](lambda inst: True) - self.assertEqual(s_dt.DT_ID, pe_pe.Element_ID) - - def test_navigate_many(self): - m = self.metamodel - s_dt = m.select_many('S_DT') - pe_pe = xtuml.navigate_many(s_dt).PE_PE[8001](lambda inst: True) - self.assertEqual(len(s_dt), len(pe_pe)) - - def test_navigate_suptype(self): - m = self.metamodel - s_dt = m.select_any('S_DT', where(Name='void')) - s_cdt = xtuml.navigate_subtype(s_dt, 17) - self.assertTrue(s_cdt) - self.assertEqual(s_cdt.__class__.__name__, 'S_CDT') - def test_empty(self): m = self.metamodel self.assertTrue(len(m.select_many('S_DT', lambda inst: False)) == 0) diff --git a/tests/test_xtuml/test_navigation.py b/tests/test_xtuml/test_navigation.py new file mode 100644 index 0000000..b2cc8ca --- /dev/null +++ b/tests/test_xtuml/test_navigation.py @@ -0,0 +1,45 @@ +# encoding: utf-8 +# Copyright (C) 2016 John Törnblom + +import unittest +import xtuml +import bridgepoint + + +class TestNavigation(unittest.TestCase): + ''' + Test suite for xtuml navigate operations + ''' + def setUp(self): + self.m = bridgepoint.load_metamodel() + + def tearDown(self): + del self.m + + def test_navigate_one(self): + s_dt = self.m.select_any('S_DT', xtuml.where_eq(Name='void')) + pe_pe = xtuml.navigate_one(s_dt).PE_PE[8001](lambda inst: True) + self.assertEqual(s_dt.DT_ID, pe_pe.Element_ID) + + def test_navigate_many(self): + s_dt = self.m.select_many('S_DT') + pe_pe = xtuml.navigate_many(s_dt).PE_PE[8001](lambda inst: True) + self.assertEqual(len(s_dt), len(pe_pe)) + + def test_navigate_suptype(self): + s_dt = self.m.select_any('S_DT', xtuml.where_eq(Name='void')) + s_cdt = xtuml.navigate_subtype(s_dt, 17) + self.assertTrue(s_cdt) + self.assertIsInstance(s_cdt, self.m.find_class('S_CDT')) + + def test_navigate_none(self): + self.assertIsNone(xtuml.navigate_one(None)()) + self.assertEqual(len(xtuml.navigate_many(None)()), 0) + + def test_navigate_invalid_handle(self): + self.assertRaises(xtuml.ModelException, xtuml.navigate_one, 50) + + +if __name__ == "__main__": + unittest.main() + From 3097aa54f3c59dd831bd336dd9b087305aa0a948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 18:16:26 +0200 Subject: [PATCH 046/216] cosmetics --- tests/test_xtuml/{test_navigation.py => test_navigate.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/test_xtuml/{test_navigation.py => test_navigate.py} (100%) diff --git a/tests/test_xtuml/test_navigation.py b/tests/test_xtuml/test_navigate.py similarity index 100% rename from tests/test_xtuml/test_navigation.py rename to tests/test_xtuml/test_navigate.py From c9777846c0bfbe6ca510b5e9725a68fd6ec37e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 18:30:45 +0200 Subject: [PATCH 047/216] expose UnknownAssociationException to public api --- xtuml/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xtuml/__init__.py b/xtuml/__init__.py index d6dc4d5..9a61ac9 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -44,6 +44,7 @@ from .model import MetaModel from .model import ModelException from .model import UnknownClassException +from .model import UnknownAssociationException from .model import navigate_any from .model import navigate_one From 00fc29f77b82615364eade69e17afd2d51297beb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 18:31:00 +0200 Subject: [PATCH 048/216] cosmetics --- tests/test_xtuml/test_metamodel.py | 44 ----------------- tests/test_xtuml/test_sort.py | 79 ++++++++++++++++++++++++++++++ xtuml/model.py | 6 ++- 3 files changed, 83 insertions(+), 46 deletions(-) create mode 100644 tests/test_xtuml/test_sort.py diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index de3deb9..6a2bb5e 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -219,50 +219,6 @@ def test_clone(self): def test_delete_unknown_instance(self): self.assertRaises(xtuml.ModelException, xtuml.delete, self) - - def test_sort_reflexive(self): - act_blk = self.metamodel.new('ACT_BLK') - - prev = None - for idx in range(10): - inst = self.metamodel.new('ACT_SMT', LineNumber=idx) - self.assertTrue(xtuml.relate(inst, act_blk, 602)) - xtuml.relate(prev, inst, 661, 'precedes') - prev = inst - - inst_set = xtuml.navigate_many(act_blk).ACT_SMT[602]() - inst_set = xtuml.sort_reflexive(inst_set, 661, 'precedes') - self.assertEqual(len(inst_set), 10) - for idx, inst in enumerate(inst_set): - self.assertEqual(inst.LineNumber, idx) - - inst_set = xtuml.navigate_many(act_blk).ACT_SMT[602]() - inst_set = xtuml.sort_reflexive(inst_set, 661, 'succeeds') - self.assertEqual(len(inst_set), 10) - for idx, inst in enumerate(inst_set): - self.assertEqual(inst.LineNumber, 9 - idx) - - def test_sort_reflexive_with_invalid_arguments(self): - inst_set = xtuml.sort_reflexive(None, None, None) - self.assertEqual(len(inst_set), 0) - - def test_sort_reflexive_with_recursion(self): - p1 = self.metamodel.new('S_BPARM', Name='p1') - p2 = self.metamodel.new('S_BPARM', Name='p2') - p3 = self.metamodel.new('S_BPARM', Name='p3') - p4 = self.metamodel.new('S_BPARM', Name='p4') - - self.assertTrue(xtuml.relate(p1, p2, 55, 'precedes')) - self.assertTrue(xtuml.relate(p2, p3, 55, 'precedes')) - self.assertTrue(xtuml.relate(p3, p4, 55, 'precedes')) - self.assertTrue(xtuml.relate(p4, p1, 55, 'precedes')) - - inst_set = self.metamodel.select_many('S_BPARM') - inst_set = xtuml.sort_reflexive(inst_set, 55, 'precedes') - - self.assertEqual(len(inst_set), 4) - for inst1, inst2 in zip(inst_set, [p1, p2, p3, p4]): - self.assertEqual(inst1, inst2) class TestDefineAssociations(unittest.TestCase): diff --git a/tests/test_xtuml/test_sort.py b/tests/test_xtuml/test_sort.py new file mode 100644 index 0000000..7aa1ecc --- /dev/null +++ b/tests/test_xtuml/test_sort.py @@ -0,0 +1,79 @@ +# encoding: utf-8 +# Copyright (C) 2016 John Törnblom + +import unittest +import xtuml +import bridgepoint + +class TestSortReflexive(unittest.TestCase): + ''' + Test suite for xtuml relate/unrelate operations + ''' + def setUp(self): + self.m = bridgepoint.load_metamodel() + + def tearDown(self): + del self.m + + def test_sort(self): + act_blk = self.m.new('ACT_BLK') + + prev = None + for idx in range(10): + inst = self.m.new('ACT_SMT', LineNumber=idx) + self.assertTrue(xtuml.relate(inst, act_blk, 602)) + xtuml.relate(prev, inst, 661, 'precedes') + prev = inst + + inst_set = xtuml.navigate_many(act_blk).ACT_SMT[602]() + inst_set = xtuml.sort_reflexive(inst_set, 661, 'precedes') + self.assertEqual(len(inst_set), 10) + for idx, inst in enumerate(inst_set): + self.assertEqual(inst.LineNumber, idx) + + inst_set = xtuml.navigate_many(act_blk).ACT_SMT[602]() + inst_set = xtuml.sort_reflexive(inst_set, 661, 'succeeds') + self.assertEqual(len(inst_set), 10) + for idx, inst in enumerate(inst_set): + self.assertEqual(inst.LineNumber, 9 - idx) + + def test_invalid_arguments(self): + self.assertRaises(xtuml.ModelException, xtuml.sort_reflexive, [], 1, '') + + def test_empty_set(self): + inst_set = self.m.select_many('S_BPARM') + inst_set = xtuml.sort_reflexive(inst_set, 55, 'precedes') + self.assertFalse(inst_set) + + def test_unknown_phrase(self): + for _ in range(5): + self.m.new('S_BPARM') + + inst_set = self.m.select_many('S_BPARM') + self.assertRaises(xtuml.UnknownAssociationException, + xtuml.sort_reflexive, + inst_set, 55, '') + + def test_recursion(self): + p1 = self.m.new('S_BPARM', Name='p1') + p2 = self.m.new('S_BPARM', Name='p2') + p3 = self.m.new('S_BPARM', Name='p3') + p4 = self.m.new('S_BPARM', Name='p4') + + self.assertTrue(xtuml.relate(p1, p2, 55, 'precedes')) + self.assertTrue(xtuml.relate(p2, p3, 55, 'precedes')) + self.assertTrue(xtuml.relate(p3, p4, 55, 'precedes')) + self.assertTrue(xtuml.relate(p4, p1, 55, 'precedes')) + + inst_set = self.m.select_many('S_BPARM') + inst_set = xtuml.sort_reflexive(inst_set, 55, 'precedes') + + self.assertEqual(len(inst_set), 4) + for inst1, inst2 in zip(inst_set, [p1, p2, p3, p4]): + self.assertEqual(inst1, inst2) + + + +if __name__ == "__main__": + unittest.main() + diff --git a/xtuml/model.py b/xtuml/model.py index 2686ce7..26c4891 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -699,8 +699,10 @@ def sort_reflexive(set_of_instances, rel_id, phrase): reflexive association. The first instance in the resulting ordered set is **not** associated to an instance across the given *phrase*. ''' - if (not isinstance(set_of_instances, QuerySet) or - not set_of_instances.first): + if not isinstance(set_of_instances, QuerySet): + raise ModelException('The collection to sort must be a QuerySet') + + if not set_of_instances.first: return QuerySet() if isinstance(rel_id, int): From b3f1c9a462a2690632834bbdb9adf501334ef72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 18:37:54 +0200 Subject: [PATCH 049/216] docs: add xtuml.UnknownAssociationException --- docs/api-reference.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api-reference.rst b/docs/api-reference.rst index b1a10bf..78a071f 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -65,6 +65,7 @@ Exceptions .. autoexception:: xtuml.ParsingException .. autoexception:: xtuml.ModelException .. autoexception:: xtuml.UnknownClassException +.. autoexception:: xtuml.UnknownAssociationException bridgepoint From d103695a54c8bb7a0845c9cdd0d50f43bac5c0de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 26 Jul 2016 20:16:40 +0200 Subject: [PATCH 050/216] cosmetics --- xtuml/model.py | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/xtuml/model.py b/xtuml/model.py index 26c4891..8e96096 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -115,16 +115,21 @@ class Link(object): to_metaclass = None phrase = None key_map = None + conditional = None + many = None - def __init__(self, from_metaclass, rel_id, to_metaclass, phrase, key_map): + def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', + conditional=False, many=False): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id self.from_metaclass = from_metaclass self.rel_id = rel_id self.to_metaclass = to_metaclass - self.phrase = phrase self.key_map = key_map + self.phrase = phrase + self.conditional = conditional + self.many = many @property def kind(self): @@ -132,7 +137,7 @@ def kind(self): def navigate(self, inst): kwargs = dict() - for key, mapped_key in self.key_map: + for key, mapped_key in self.key_map.items(): kwargs[mapped_key] = getattr(inst, key) return self.to_metaclass.query(kwargs) @@ -148,9 +153,11 @@ def __repr__(self): class ReversedLink(Link): - def __init__(self, from_metaclass, rel_id, to_metaclass, phrase, key_map): - key_map = [(key2, key1) for key1, key2 in key_map] - Link.__init__(self, from_metaclass, rel_id, to_metaclass, phrase, key_map) + def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', + conditional=False, many=False): + Link.__init__(self, from_metaclass, rel_id, to_metaclass, + dict(zip(key_map.values(), key_map.keys())), + phrase, conditional, many) class Association(object): @@ -326,18 +333,21 @@ def __call__(self, *args, **kwargs): def attribute_names(self): return [name for name, _ in self.attributes] - def add_link(self, metaclass, rel_id, phrase, key_map, reverse=False): + def add_link(self, metaclass, rel_id, key_map, phrase, conditional=False, + many=False, reverse=False): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id if reverse: - link = ReversedLink(self, rel_id, metaclass, phrase, key_map) + link = ReversedLink(self, rel_id, metaclass, key_map, phrase, conditional, many) + self.identifying_attributes |= set(link.key_map.keys()) else: - link = Link(self, rel_id, metaclass, phrase, key_map) + link = Link(self, rel_id, metaclass, key_map, phrase, conditional, many) + self.referential_attributes |= set(link.key_map.keys()) key = (metaclass.kind, rel_id, phrase) self.links[key] = link - + return link def find_link(self, kind, rel_id, phrase): @@ -555,12 +565,9 @@ def define_association(self, rel_id, source, target): source_metaclass = self.find_metaclass(source.kind) target_metaclass = self.find_metaclass(target.kind) - key_map = list(zip(source.ids, target.ids)) - source_metaclass.add_link(target_metaclass, rel_id, target.phrase, key_map) - target_metaclass.add_link(source_metaclass, rel_id, source.phrase, key_map, reverse=True) - - source_metaclass.referential_attributes |= set(source.ids) - target_metaclass.identifying_attributes |= set(target.ids) + key_map = dict(zip(source.ids, target.ids)) + source_metaclass.add_link(target_metaclass, rel_id, key_map, target.phrase) + target_metaclass.add_link(source_metaclass, rel_id, key_map, source.phrase, reverse=True) ass = Association(rel_id, source, target) self.associations.append(ass) @@ -789,12 +796,12 @@ def _deferred_link_operation(inst, link, op): l = list() metaclass = inst.__metaclass__ - keys = set([key for key, _ in link.key_map]) + keys = set(link.key_map.keys()) for link in metaclass.links.values(): if not isinstance(link, ReversedLink): continue - derived_keys = set([key for key, _ in link.key_map]) + derived_keys = set(link.key_map.values()) if not (keys & derived_keys): continue @@ -856,7 +863,7 @@ def relate(from_instance, to_instance, rel_id, phrase=''): post_process = _deferred_link_operation(from_instance, link, relate) updated = False - for from_name, to_name in link.key_map: + for from_name, to_name in link.key_map.items(): if _is_null(to_instance, to_name): raise ModelException('undefined referential attribute %s' % to_name) @@ -896,7 +903,7 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): post_process = _deferred_link_operation(from_instance, link, unrelate) updated = False - for from_name, _ in link.key_map: + for from_name in link.key_map: if _is_null(from_instance, from_name): raise ModelException('instances not related') From c474df11b7ea09e8d1168cea108921ec9d091039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 27 Jul 2016 00:07:34 +0200 Subject: [PATCH 051/216] model: change api for creating new associations by using builtin python types only (i.e. no AssociationLink) --- bridgepoint/ooaofooa.py | 99 +- .../test_bridgepoint/test_build_component.py | 1437 +++++++++++++++++ tests/test_xtuml/test_metamodel.py | 77 +- tests/test_xtuml/test_persist.py | 4 +- xtuml/__init__.py | 5 +- xtuml/consistency_check.py | 40 +- xtuml/load.py | 41 +- xtuml/model.py | 114 +- xtuml/persist.py | 32 +- 9 files changed, 1623 insertions(+), 226 deletions(-) create mode 100644 tests/test_bridgepoint/test_build_component.py diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index da9f6e1..2e5d6de 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3752,20 +3752,6 @@ def is_global(pe_pe): return is_global(pe_pe) -def mult_cond(mult, cond): - ''' - Create the cardinality string used on xtuml associations. - ''' - if mult: - s = 'M' - else: - s = '1' - if cond: - s += 'C' - - return s - - def get_data_type_name(s_dt): ''' Convert a BridgePoint data type to a pyxtuml meta model type. @@ -3862,22 +3848,25 @@ def mk_simple_association(m, inst): source_o_obj = one(r_rgo).R_OIR[203].O_OBJ[201]() target_o_obj = one(r_rto).R_OIR[203].O_OBJ[201]() - - source_cardinality = mult_cond(r_form.Mult, r_form.Cond) - target_cardinality = mult_cond(r_part.Mult, r_part.Cond) - source_ids, target_ids = get_related_attributes(r_rgo, r_rto) - - source = xtuml.AssociationLink(source_o_obj.Key_Lett, source_cardinality, - source_ids, r_part.Txt_Phrs) - target = xtuml.AssociationLink(target_o_obj.Key_Lett, target_cardinality, - target_ids, r_form.Txt_Phrs) - - if target.kind != source.kind: - target.phrase = source.phrase = '' - - m.define_association(r_rel.Numb, source, target) + if source_o_obj.Obj_ID != target_o_obj.Obj_ID: + source_phrase = target_phrase = '' + else: + source_phrase = r_part.Txt_Phrs + target_phrase = r_form.Txt_Phrs + + m.define_association(rel_id=r_rel.Numb, + source_kind=source_o_obj.Key_Lett, + target_kind=target_o_obj.Key_Lett, + source_keys=source_ids, + target_keys=target_ids, + source_conditional=r_form.Cond, + target_conditional=r_part.Cond, + source_phrase=source_phrase, + target_phrase=target_phrase, + source_many=r_form.Mult, + target_many=r_part.Mult,) def mk_linked_association(m, inst): @@ -3888,22 +3877,28 @@ def mk_linked_association(m, inst): r_rgo = one(inst).R_ASSR[211].R_RGO[205]() source_o_obj = one(r_rgo).R_OIR[203].O_OBJ[201]() - def _mk_link(side1, side2): + def _mk_assoc(side1, side2): r_rto = one(side1).R_RTO[204]() target_o_obj = one(r_rto).R_OIR[203].O_OBJ[201]() - cardinality = mult_cond(side2.Mult, side2.Cond) source_ids, target_ids = get_related_attributes(r_rgo, r_rto) - - source = xtuml.AssociationLink(source_o_obj.Key_Lett, cardinality, - source_ids, side1.Txt_Phrs) - target = xtuml.AssociationLink(target_o_obj.Key_Lett, '1', target_ids, - side2.Txt_Phrs) - if side1.Obj_ID != side2.Obj_ID: - target.phrase = source.phrase = '' - - m.define_association(r_rel.Numb, source, target) + source_phrase = target_phrase = '' + else: + source_phrase = side1.Txt_Phrs + target_phrase = side2.Txt_Phrs + + m.define_association(rel_id=r_rel.Numb, + source_kind=source_o_obj.Key_Lett, + target_kind=target_o_obj.Key_Lett, + source_keys=source_ids, + target_keys=target_ids, + source_conditional=side2.Cond, + target_conditional=False, + source_phrase=source_phrase, + target_phrase=target_phrase, + source_many=side2.Mult, + target_many=False) r_aone = one(inst).R_AONE[209]() r_aoth = one(inst).R_AOTH[210]() @@ -3912,8 +3907,8 @@ def _mk_link(side1, side2): logger.info('Omitting unformalized association R%s' % (r_rel.Numb)) return - _mk_link(r_aone, r_aoth) - _mk_link(r_aoth, r_aone) + _mk_assoc(r_aone, r_aoth) + _mk_assoc(r_aoth, r_aone) def mk_subsuper_association(m, inst): @@ -3933,12 +3928,18 @@ def mk_subsuper_association(m, inst): source_o_obj = one(r_rgo).R_OIR[203].O_OBJ[201]() source_ids, target_ids = get_related_attributes(r_rgo, r_rto) - - source = xtuml.AssociationLink(source_o_obj.Key_Lett, '1C', source_ids) - target = xtuml.AssociationLink(target_o_obj.Key_Lett, '1', target_ids) - - m.define_association(r_rel.Numb, source, target) - + m.define_association(rel_id=r_rel.Numb, + source_kind=source_o_obj.Key_Lett, + target_kind=target_o_obj.Key_Lett, + source_keys=source_ids, + target_keys=target_ids, + source_conditional=True, + target_conditional=False, + source_phrase='', + target_phrase='', + source_many=False, + target_many=False) + def mk_derived_association(m, inst): ''' @@ -4018,7 +4019,7 @@ def build_component(self, name=None, derived_attributes=False): return mk_component(mm, c_c, derived_attributes) -def load_metamodel(resource=None): +def load_metamodel(resource=None, load_globals=True): ''' Load and return a metamodel expressed in ooaofooa from a *resource*. The resource may be either a filename, a path, or a list of filenames @@ -4029,7 +4030,7 @@ def load_metamodel(resource=None): if isinstance(resource, str): resource = [resource] - loader = Loader() + loader = Loader(load_globals) for filename in resource: loader.filename_input(filename) diff --git a/tests/test_bridgepoint/test_build_component.py b/tests/test_bridgepoint/test_build_component.py new file mode 100644 index 0000000..84f94c4 --- /dev/null +++ b/tests/test_bridgepoint/test_build_component.py @@ -0,0 +1,1437 @@ +# encoding: utf-8 +# Copyright (C) 2016 John Törnblom +import unittest +import bridgepoint +import xtuml + + +class TestSchemaGen(unittest.TestCase): + """ + -- root-types-contained: ModelClass_c,Association_c,ClassAsSubtype_c,ClassAsLink_c + -- generics + -- BP 7.1 content: StreamData syschar: 3 persistence-version: 7.1.6 + + INSERT INTO O_OBJ + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 'Class', + 1, + 'Class', + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO O_NBATTR + VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); + INSERT INTO O_BATTR + VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); + INSERT INTO O_ATTR + VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "00000000-0000-0000-0000-000000000000", + 'Id', + '', + '', + 'Id', + 0, + "ba5eda7a-def5-0000-0000-000000000005", + '', + ''); + INSERT INTO O_REF + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "7ef7999e-5513-4984-8744-9c1a5cf46412", + 0, + "990c9f1b-71a8-4246-af0e-de20a069e784", + "3ae58522-7f90-48b3-85b4-35df51c6192a", + "b3f14c88-fd1b-4aa8-a5ae-15d202bee5d6", + "9d8b6602-75c8-44b6-ac4f-9da04573b957", + "6fdefe7f-3f99-4c57-8009-8825066fa637", + "9197e43d-966a-4435-8393-0ff6514947f6", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Supertype', + 'Id', + 'R3'); + INSERT INTO O_RATTR + VALUES ("6fdefe7f-3f99-4c57-8009-8825066fa637", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "ee277c43-a11a-4ac9-bc82-2bb8a82fd437", + "419dc876-6997-44cb-a671-41acc466044a", + 1, + 'Id'); + INSERT INTO O_ATTR + VALUES ("6fdefe7f-3f99-4c57-8009-8825066fa637", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "f94afef8-ed1a-4b9b-bb29-36149617b861", + 'Other_Id', + '', + 'Other_', + 'Id', + 1, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); + INSERT INTO O_ID + VALUES (0, + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); + INSERT INTO O_OIDA + VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 0, + 'Id'); + INSERT INTO O_ID + VALUES (1, + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); + INSERT INTO O_ID + VALUES (2, + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); + INSERT INTO PE_PE + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 4); + INSERT INTO GD_GE + VALUES ("210a115a-1c94-41b9-b811-2f86d59a6d31", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 21, + 0, + 'Test_Schema_Gen::Package::Class'); + INSERT INTO GD_SHP + VALUES ("210a115a-1c94-41b9-b811-2f86d59a6d31"); + INSERT INTO GD_NCS + VALUES ("210a115a-1c94-41b9-b811-2f86d59a6d31"); + INSERT INTO DIM_ND + VALUES (204.000000, + 156.000000, + "210a115a-1c94-41b9-b811-2f86d59a6d31"); + INSERT INTO DIM_GE + VALUES (4248.000000, + 3108.000000, + "210a115a-1c94-41b9-b811-2f86d59a6d31", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("210a115a-1c94-41b9-b811-2f86d59a6d31", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_CON + VALUES ("695fd096-c898-4f1e-9505-a036da9cf287", + 4344.000000, + 3264.000000, + "210a115a-1c94-41b9-b811-2f86d59a6d31"); + INSERT INTO DIM_CON + VALUES ("9e246129-772e-4e7e-9b8b-8dd68e80b065", + 4452.000000, + 3204.000000, + "210a115a-1c94-41b9-b811-2f86d59a6d31"); + INSERT INTO O_OBJ + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + 'Reflexive_Class', + 2, + 'Reflexive_Class', + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO O_REF + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 0, + "f94afef8-ed1a-4b9b-bb29-36149617b861", + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + "fb42f65b-cd41-411a-b022-a3cf2f481a99", + "fe0e8e09-edef-4be6-b8d7-0cb86053f640", + "64853c2b-640f-4738-a363-40892f8d4757", + "644754bf-f80c-4e00-9693-75d2dc620d54", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Class', + 'Id', + 'R4'); + INSERT INTO O_RATTR + VALUES ("64853c2b-640f-4738-a363-40892f8d4757", + "68553234-715f-43ce-a1ce-4b93d6483cf5", + "f94afef8-ed1a-4b9b-bb29-36149617b861", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 1, + 'Id'); + INSERT INTO O_ATTR + VALUES ("64853c2b-640f-4738-a363-40892f8d4757", + "68553234-715f-43ce-a1ce-4b93d6483cf5", + "00000000-0000-0000-0000-000000000000", + 'Id', + '', + '', + 'Id', + 0, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); + INSERT INTO O_ID + VALUES (0, + "68553234-715f-43ce-a1ce-4b93d6483cf5"); + INSERT INTO O_OIDA + VALUES ("64853c2b-640f-4738-a363-40892f8d4757", + "68553234-715f-43ce-a1ce-4b93d6483cf5", + 0, + 'Id'); + INSERT INTO O_ID + VALUES (1, + "68553234-715f-43ce-a1ce-4b93d6483cf5"); + INSERT INTO O_ID + VALUES (2, + "68553234-715f-43ce-a1ce-4b93d6483cf5"); + INSERT INTO PE_PE + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 4); + INSERT INTO GD_GE + VALUES ("ce5eb32f-79fe-419f-a56d-8c439930f96d", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "68553234-715f-43ce-a1ce-4b93d6483cf5", + 21, + 0, + 'Test_Schema_Gen::Package::Reflexive_Class'); + INSERT INTO GD_SHP + VALUES ("ce5eb32f-79fe-419f-a56d-8c439930f96d"); + INSERT INTO GD_NCS + VALUES ("ce5eb32f-79fe-419f-a56d-8c439930f96d"); + INSERT INTO DIM_ND + VALUES (204.000000, + 144.000000, + "ce5eb32f-79fe-419f-a56d-8c439930f96d"); + INSERT INTO DIM_GE + VALUES (4740.000000, + 3108.000000, + "ce5eb32f-79fe-419f-a56d-8c439930f96d", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("ce5eb32f-79fe-419f-a56d-8c439930f96d", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_CON + VALUES ("26b28f41-8966-4148-98f5-91f5505b5c92", + 4944.000000, + 3168.000000, + "ce5eb32f-79fe-419f-a56d-8c439930f96d"); + INSERT INTO DIM_CON + VALUES ("8d6716fa-92c3-46e4-8116-2ab556e15f4e", + 4824.000000, + 3108.000000, + "ce5eb32f-79fe-419f-a56d-8c439930f96d"); + INSERT INTO DIM_CON + VALUES ("6ef83aa3-47e5-43f8-bbfa-058e9a2032f5", + 4740.000000, + 3204.000000, + "ce5eb32f-79fe-419f-a56d-8c439930f96d"); + INSERT INTO R_REL + VALUES ("4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + 1, + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_ASSOC + VALUES ("4cfe4e7d-1919-4ef2-a4db-03c85c772b2a"); + INSERT INTO R_AONE + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "04310dd4-9b14-4b59-9a59-9e9dc5d99468", + 0, + 1, + 'other'); + INSERT INTO O_RTIDA + VALUES ("64853c2b-640f-4738-a363-40892f8d4757", + "68553234-715f-43ce-a1ce-4b93d6483cf5", + 0, + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "04310dd4-9b14-4b59-9a59-9e9dc5d99468"); + INSERT INTO R_RTO + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "04310dd4-9b14-4b59-9a59-9e9dc5d99468", + 0); + INSERT INTO R_OIR + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "04310dd4-9b14-4b59-9a59-9e9dc5d99468", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_AOTH + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "aeb07e49-c4f9-42dc-93d2-bf42134687b4", + 0, + 1, + 'one'); + INSERT INTO O_RTIDA + VALUES ("64853c2b-640f-4738-a363-40892f8d4757", + "68553234-715f-43ce-a1ce-4b93d6483cf5", + 0, + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "aeb07e49-c4f9-42dc-93d2-bf42134687b4"); + INSERT INTO R_RTO + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "aeb07e49-c4f9-42dc-93d2-bf42134687b4", + 0); + INSERT INTO R_OIR + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "aeb07e49-c4f9-42dc-93d2-bf42134687b4", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_ASSR + VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "bc18e358-1a8c-41d3-9ed5-5013ba99339c", + 0); + INSERT INTO R_RGO + VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "bc18e358-1a8c-41d3-9ed5-5013ba99339c"); + INSERT INTO R_OIR + VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "bc18e358-1a8c-41d3-9ed5-5013ba99339c", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO PE_PE + VALUES ("4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 9); + INSERT INTO GD_GE + VALUES ("7bd1fcbb-abc0-435a-af67-11079f2b1404", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + 24, + 0, + 'Test_Schema_Gen::Package::R1'); + INSERT INTO GD_CON + VALUES ("7bd1fcbb-abc0-435a-af67-11079f2b1404", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("6c59d5ff-5c41-4e5d-bec3-6a7608db86c3", + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + 1, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "6c59d5ff-5c41-4e5d-bec3-6a7608db86c3"); + INSERT INTO DIM_GE + VALUES (4954.000000, + 3178.000000, + "6c59d5ff-5c41-4e5d-bec3-6a7608db86c3", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("6c59d5ff-5c41-4e5d-bec3-6a7608db86c3", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("d3e5f1ba-bcff-47ab-92ae-0cce0d3a416b", + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + 3, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "d3e5f1ba-bcff-47ab-92ae-0cce0d3a416b"); + INSERT INTO DIM_GE + VALUES (4955.000000, + 3106.000000, + "d3e5f1ba-bcff-47ab-92ae-0cce0d3a416b", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("d3e5f1ba-bcff-47ab-92ae-0cce0d3a416b", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("a0e511d2-2174-4ad6-9f3b-9b3502929f8a", + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + 2, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "a0e511d2-2174-4ad6-9f3b-9b3502929f8a"); + INSERT INTO DIM_GE + VALUES (4834.000000, + 3081.000000, + "a0e511d2-2174-4ad6-9f3b-9b3502929f8a", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("a0e511d2-2174-4ad6-9f3b-9b3502929f8a", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_LS + VALUES ("6d15d3b0-8cad-49b7-9b9e-0db3cfa4ac05", + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "00000000-0000-0000-0000-000000000000", + "76c98002-bf63-4027-a727-d84c74c0d612", + "b4c22ed9-4a33-4629-976a-79db62426ea6"); + INSERT INTO GD_LS + VALUES ("b392c3bc-222a-4c84-8eef-e14c9442e110", + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "6d15d3b0-8cad-49b7-9b9e-0db3cfa4ac05", + "b4c22ed9-4a33-4629-976a-79db62426ea6", + "0d565025-f494-43bd-9bff-ae4bf62bc727"); + INSERT INTO GD_AOS + VALUES ("bc2759d4-1947-4b2d-b842-9faece1ecc82", + "b392c3bc-222a-4c84-8eef-e14c9442e110"); + INSERT INTO GD_LS + VALUES ("a911e69d-97ed-454e-a494-7828c0ba57ee", + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "b392c3bc-222a-4c84-8eef-e14c9442e110", + "0d565025-f494-43bd-9bff-ae4bf62bc727", + "53cd2b79-85ba-474d-9090-46ac0fe88f7f"); + INSERT INTO GD_LS + VALUES ("f148f99d-15ab-4bd3-9aab-42301a186edb", + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "a911e69d-97ed-454e-a494-7828c0ba57ee", + "53cd2b79-85ba-474d-9090-46ac0fe88f7f", + "a44fd264-30ef-463e-8524-c49407b83d3a"); + INSERT INTO DIM_WAY + VALUES ("76c98002-bf63-4027-a727-d84c74c0d612", + 4944.000000, + 3168.000000, + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_WAY + VALUES ("a44fd264-30ef-463e-8524-c49407b83d3a", + 4824.000000, + 3108.000000, + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "00000000-0000-0000-0000-000000000000", + "76c98002-bf63-4027-a727-d84c74c0d612"); + INSERT INTO DIM_WAY + VALUES ("b4c22ed9-4a33-4629-976a-79db62426ea6", + 4994.000000, + 3168.000000, + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_WAY + VALUES ("0d565025-f494-43bd-9bff-ae4bf62bc727", + 4994.000000, + 3059.000000, + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_WAY + VALUES ("53cd2b79-85ba-474d-9090-46ac0fe88f7f", + 4824.000000, + 3059.000000, + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "7bd1fcbb-abc0-435a-af67-11079f2b1404", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("7bd1fcbb-abc0-435a-af67-11079f2b1404", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_CON + VALUES ("bc2759d4-1947-4b2d-b842-9faece1ecc82", + 4994.000000, + 3059.000000, + "7bd1fcbb-abc0-435a-af67-11079f2b1404"); + INSERT INTO DIM_ED + VALUES ("26b28f41-8966-4148-98f5-91f5505b5c92", + "8d6716fa-92c3-46e4-8116-2ab556e15f4e", + "7bd1fcbb-abc0-435a-af67-11079f2b1404"); + INSERT INTO O_OBJ + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + 'Supertype', + 3, + 'Supertype', + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO O_REF + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + "419dc876-6997-44cb-a671-41acc466044a", + 0, + "ee277c43-a11a-4ac9-bc82-2bb8a82fd437", + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + "dfca81f1-7154-44ce-90e1-66b28dd10093", + "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b", + "990c9f1b-71a8-4246-af0e-de20a069e784", + "2e2f0436-ad26-449f-9fbc-dfcfc110c5c2", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Subtype', + 'Id', + 'R2'); + INSERT INTO O_RATTR + VALUES ("990c9f1b-71a8-4246-af0e-de20a069e784", + "7ef7999e-5513-4984-8744-9c1a5cf46412", + "ee277c43-a11a-4ac9-bc82-2bb8a82fd437", + "419dc876-6997-44cb-a671-41acc466044a", + 1, + 'Id'); + INSERT INTO O_ATTR + VALUES ("990c9f1b-71a8-4246-af0e-de20a069e784", + "7ef7999e-5513-4984-8744-9c1a5cf46412", + "00000000-0000-0000-0000-000000000000", + 'Id', + '', + '', + 'Id', + 0, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); + INSERT INTO O_ID + VALUES (0, + "7ef7999e-5513-4984-8744-9c1a5cf46412"); + INSERT INTO O_OIDA + VALUES ("990c9f1b-71a8-4246-af0e-de20a069e784", + "7ef7999e-5513-4984-8744-9c1a5cf46412", + 0, + 'Id'); + INSERT INTO O_ID + VALUES (1, + "7ef7999e-5513-4984-8744-9c1a5cf46412"); + INSERT INTO O_ID + VALUES (2, + "7ef7999e-5513-4984-8744-9c1a5cf46412"); + INSERT INTO PE_PE + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 4); + INSERT INTO GD_GE + VALUES ("79aca22c-cf37-4577-ba92-e707cb1a5a00", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "7ef7999e-5513-4984-8744-9c1a5cf46412", + 21, + 0, + 'Test_Schema_Gen::Package::Supertype'); + INSERT INTO GD_SHP + VALUES ("79aca22c-cf37-4577-ba92-e707cb1a5a00"); + INSERT INTO GD_NCS + VALUES ("79aca22c-cf37-4577-ba92-e707cb1a5a00"); + INSERT INTO DIM_ND + VALUES (204.000000, + 156.000000, + "79aca22c-cf37-4577-ba92-e707cb1a5a00"); + INSERT INTO DIM_GE + VALUES (4248.000000, + 3384.000000, + "79aca22c-cf37-4577-ba92-e707cb1a5a00", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("79aca22c-cf37-4577-ba92-e707cb1a5a00", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_CON + VALUES ("600d4cd2-9ac4-4b2a-9f34-04e21b7b9e2e", + 4452.000000, + 3456.000000, + "79aca22c-cf37-4577-ba92-e707cb1a5a00"); + INSERT INTO DIM_CON + VALUES ("5d0a2f7c-52a1-4a2a-b547-8698a26116d6", + 4344.000000, + 3384.000000, + "79aca22c-cf37-4577-ba92-e707cb1a5a00"); + INSERT INTO O_OBJ + VALUES ("419dc876-6997-44cb-a671-41acc466044a", + 'Subtype', + 4, + 'Subtype', + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO O_NBATTR + VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", + "419dc876-6997-44cb-a671-41acc466044a"); + INSERT INTO O_BATTR + VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", + "419dc876-6997-44cb-a671-41acc466044a"); + INSERT INTO O_ATTR + VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", + "419dc876-6997-44cb-a671-41acc466044a", + "00000000-0000-0000-0000-000000000000", + 'Id', + '', + '', + 'Id', + 0, + "ba5eda7a-def5-0000-0000-000000000005", + '', + ''); + INSERT INTO O_ID + VALUES (0, + "419dc876-6997-44cb-a671-41acc466044a"); + INSERT INTO O_OIDA + VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", + "419dc876-6997-44cb-a671-41acc466044a", + 0, + 'Id'); + INSERT INTO O_ID + VALUES (1, + "419dc876-6997-44cb-a671-41acc466044a"); + INSERT INTO O_ID + VALUES (2, + "419dc876-6997-44cb-a671-41acc466044a"); + INSERT INTO PE_PE + VALUES ("419dc876-6997-44cb-a671-41acc466044a", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 4); + INSERT INTO GD_GE + VALUES ("89013d61-2e68-484d-9cd1-5b8a45e822e5", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "419dc876-6997-44cb-a671-41acc466044a", + 21, + 0, + 'Test_Schema_Gen::Package::Subtype'); + INSERT INTO GD_SHP + VALUES ("89013d61-2e68-484d-9cd1-5b8a45e822e5"); + INSERT INTO GD_NCS + VALUES ("89013d61-2e68-484d-9cd1-5b8a45e822e5"); + INSERT INTO DIM_ND + VALUES (204.000000, + 144.000000, + "89013d61-2e68-484d-9cd1-5b8a45e822e5"); + INSERT INTO DIM_GE + VALUES (4752.000000, + 3384.000000, + "89013d61-2e68-484d-9cd1-5b8a45e822e5", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("89013d61-2e68-484d-9cd1-5b8a45e822e5", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_CON + VALUES ("31631bcb-2ac4-4d50-9642-9c8d19567a55", + 4752.000000, + 3456.000000, + "89013d61-2e68-484d-9cd1-5b8a45e822e5"); + INSERT INTO R_REL + VALUES ("ca692c8a-5b63-4c1c-b24e-c99f10a22360", + 2, + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_SUBSUP + VALUES ("ca692c8a-5b63-4c1c-b24e-c99f10a22360"); + INSERT INTO R_SUPER + VALUES ("419dc876-6997-44cb-a671-41acc466044a", + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b"); + INSERT INTO O_RTIDA + VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", + "419dc876-6997-44cb-a671-41acc466044a", + 0, + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b"); + INSERT INTO R_RTO + VALUES ("419dc876-6997-44cb-a671-41acc466044a", + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b", + 0); + INSERT INTO R_OIR + VALUES ("419dc876-6997-44cb-a671-41acc466044a", + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_SUB + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + "dfca81f1-7154-44ce-90e1-66b28dd10093"); + INSERT INTO R_RGO + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + "dfca81f1-7154-44ce-90e1-66b28dd10093"); + INSERT INTO R_OIR + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + "dfca81f1-7154-44ce-90e1-66b28dd10093", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO PE_PE + VALUES ("ca692c8a-5b63-4c1c-b24e-c99f10a22360", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 9); + INSERT INTO GD_GE + VALUES ("4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "ca692c8a-5b63-4c1c-b24e-c99f10a22360", + 36, + 0, + 'Test_Schema_Gen::Package::R2'); + INSERT INTO GD_CON + VALUES ("4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("69027323-0038-4e79-a453-bd46450bee6c", + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + 1, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "69027323-0038-4e79-a453-bd46450bee6c"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "69027323-0038-4e79-a453-bd46450bee6c", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("69027323-0038-4e79-a453-bd46450bee6c", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("2c6c2ec4-539d-47d6-8227-45ab1e368f63", + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + 3, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "2c6c2ec4-539d-47d6-8227-45ab1e368f63"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "2c6c2ec4-539d-47d6-8227-45ab1e368f63", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("2c6c2ec4-539d-47d6-8227-45ab1e368f63", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("2d996854-73d5-49fa-bcaa-c1ad545c06f7", + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + 2, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "2d996854-73d5-49fa-bcaa-c1ad545c06f7"); + INSERT INTO DIM_GE + VALUES (4690.000000, + 3466.000000, + "2d996854-73d5-49fa-bcaa-c1ad545c06f7", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("2d996854-73d5-49fa-bcaa-c1ad545c06f7", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_LS + VALUES ("fd2cbf3c-464d-4edf-b0e6-eddf3419f6a8", + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + "00000000-0000-0000-0000-000000000000", + "084b93a5-1703-4f1e-9919-78c736fea417", + "f7ffc992-9a46-40f4-be36-2f23fd77226b"); + INSERT INTO GD_AOS + VALUES ("e1eb1982-33ca-4f6d-a252-27f7a81ce028", + "fd2cbf3c-464d-4edf-b0e6-eddf3419f6a8"); + INSERT INTO DIM_WAY + VALUES ("084b93a5-1703-4f1e-9919-78c736fea417", + 4752.000000, + 3456.000000, + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_WAY + VALUES ("f7ffc992-9a46-40f4-be36-2f23fd77226b", + 4680.000000, + 3456.000000, + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + "00000000-0000-0000-0000-000000000000", + "084b93a5-1703-4f1e-9919-78c736fea417"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("4de2c013-f1a6-4eda-b88d-44ce07f25e7e", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_CON + VALUES ("e1eb1982-33ca-4f6d-a252-27f7a81ce028", + 4680.000000, + 3456.000000, + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e"); + INSERT INTO DIM_ED + VALUES ("31631bcb-2ac4-4d50-9642-9c8d19567a55", + "00000000-0000-0000-0000-000000000000", + "4de2c013-f1a6-4eda-b88d-44ce07f25e7e"); + INSERT INTO GD_GE + VALUES ("efbe981c-68c9-40a1-a16f-6c7ccebdc003", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "dfca81f1-7154-44ce-90e1-66b28dd10093", + 35, + 0, + 'Test_Schema_Gen::Package::R2::Supertype'); + INSERT INTO GD_CON + VALUES ("efbe981c-68c9-40a1-a16f-6c7ccebdc003", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("a0df184b-f045-4eb9-9976-f6b51a8154fa", + "efbe981c-68c9-40a1-a16f-6c7ccebdc003", + 1, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "a0df184b-f045-4eb9-9976-f6b51a8154fa"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "a0df184b-f045-4eb9-9976-f6b51a8154fa", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("a0df184b-f045-4eb9-9976-f6b51a8154fa", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("d2017075-da48-487b-834e-be43bb16b1a1", + "efbe981c-68c9-40a1-a16f-6c7ccebdc003", + 3, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "d2017075-da48-487b-834e-be43bb16b1a1"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "d2017075-da48-487b-834e-be43bb16b1a1", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("d2017075-da48-487b-834e-be43bb16b1a1", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("a847a23e-35ae-4a70-863e-a003fe46297e", + "efbe981c-68c9-40a1-a16f-6c7ccebdc003", + 2, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "a847a23e-35ae-4a70-863e-a003fe46297e"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "a847a23e-35ae-4a70-863e-a003fe46297e", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("a847a23e-35ae-4a70-863e-a003fe46297e", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_LS + VALUES ("bf5f42ff-588f-4a88-92d8-42f6820f6ecb", + "efbe981c-68c9-40a1-a16f-6c7ccebdc003", + "00000000-0000-0000-0000-000000000000", + "9e96af85-25de-44ec-bf21-b42b433ebffa", + "ebdb9a6d-6f16-43fc-834d-2068c9a99b92"); + INSERT INTO DIM_WAY + VALUES ("9e96af85-25de-44ec-bf21-b42b433ebffa", + 4452.000000, + 3456.000000, + "efbe981c-68c9-40a1-a16f-6c7ccebdc003", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_WAY + VALUES ("ebdb9a6d-6f16-43fc-834d-2068c9a99b92", + 4680.000000, + 3456.000000, + "efbe981c-68c9-40a1-a16f-6c7ccebdc003", + "00000000-0000-0000-0000-000000000000", + "9e96af85-25de-44ec-bf21-b42b433ebffa"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "efbe981c-68c9-40a1-a16f-6c7ccebdc003", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("efbe981c-68c9-40a1-a16f-6c7ccebdc003", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ED + VALUES ("600d4cd2-9ac4-4b2a-9f34-04e21b7b9e2e", + "e1eb1982-33ca-4f6d-a252-27f7a81ce028", + "efbe981c-68c9-40a1-a16f-6c7ccebdc003"); + INSERT INTO R_REL + VALUES ("3ae58522-7f90-48b3-85b4-35df51c6192a", + 3, + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_SIMP + VALUES ("3ae58522-7f90-48b3-85b4-35df51c6192a"); + INSERT INTO R_FORM + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "3ae58522-7f90-48b3-85b4-35df51c6192a", + "b3f14c88-fd1b-4aa8-a5ae-15d202bee5d6", + 1, + 1, + ''); + INSERT INTO R_RGO + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "3ae58522-7f90-48b3-85b4-35df51c6192a", + "b3f14c88-fd1b-4aa8-a5ae-15d202bee5d6"); + INSERT INTO R_OIR + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "3ae58522-7f90-48b3-85b4-35df51c6192a", + "b3f14c88-fd1b-4aa8-a5ae-15d202bee5d6", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_PART + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + "3ae58522-7f90-48b3-85b4-35df51c6192a", + "9d8b6602-75c8-44b6-ac4f-9da04573b957", + 0, + 0, + ''); + INSERT INTO O_RTIDA + VALUES ("990c9f1b-71a8-4246-af0e-de20a069e784", + "7ef7999e-5513-4984-8744-9c1a5cf46412", + 0, + "3ae58522-7f90-48b3-85b4-35df51c6192a", + "9d8b6602-75c8-44b6-ac4f-9da04573b957"); + INSERT INTO R_RTO + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + "3ae58522-7f90-48b3-85b4-35df51c6192a", + "9d8b6602-75c8-44b6-ac4f-9da04573b957", + 0); + INSERT INTO R_OIR + VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", + "3ae58522-7f90-48b3-85b4-35df51c6192a", + "9d8b6602-75c8-44b6-ac4f-9da04573b957", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO PE_PE + VALUES ("3ae58522-7f90-48b3-85b4-35df51c6192a", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 9); + INSERT INTO GD_GE + VALUES ("6ba08f56-c2f9-4a88-9b58-f704f6854e52", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "3ae58522-7f90-48b3-85b4-35df51c6192a", + 24, + 0, + 'Test_Schema_Gen::Package::R3'); + INSERT INTO GD_CON + VALUES ("6ba08f56-c2f9-4a88-9b58-f704f6854e52", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("8dfb356b-0d77-46ea-8855-a5ba37d8ff15", + "6ba08f56-c2f9-4a88-9b58-f704f6854e52", + 1, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "8dfb356b-0d77-46ea-8855-a5ba37d8ff15"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "8dfb356b-0d77-46ea-8855-a5ba37d8ff15", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("8dfb356b-0d77-46ea-8855-a5ba37d8ff15", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("3c1d46f9-ab6e-490a-a8e3-162d318c2012", + "6ba08f56-c2f9-4a88-9b58-f704f6854e52", + 3, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "3c1d46f9-ab6e-490a-a8e3-162d318c2012"); + INSERT INTO DIM_GE + VALUES (4305.000000, + 3316.000000, + "3c1d46f9-ab6e-490a-a8e3-162d318c2012", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("3c1d46f9-ab6e-490a-a8e3-162d318c2012", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("7de675d0-3599-4597-af10-f95c19e4b88d", + "6ba08f56-c2f9-4a88-9b58-f704f6854e52", + 2, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "7de675d0-3599-4597-af10-f95c19e4b88d"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "7de675d0-3599-4597-af10-f95c19e4b88d", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("7de675d0-3599-4597-af10-f95c19e4b88d", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_LS + VALUES ("fe7c1f3d-0d73-4636-a75c-7c422e81cea4", + "6ba08f56-c2f9-4a88-9b58-f704f6854e52", + "00000000-0000-0000-0000-000000000000", + "2b37073b-2797-4ce1-a214-89176c2e1eab", + "39bb5949-4f3b-4816-b225-70804b654aa0"); + INSERT INTO DIM_WAY + VALUES ("2b37073b-2797-4ce1-a214-89176c2e1eab", + 4344.000000, + 3264.000000, + "6ba08f56-c2f9-4a88-9b58-f704f6854e52", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_WAY + VALUES ("39bb5949-4f3b-4816-b225-70804b654aa0", + 4344.000000, + 3384.000000, + "6ba08f56-c2f9-4a88-9b58-f704f6854e52", + "00000000-0000-0000-0000-000000000000", + "2b37073b-2797-4ce1-a214-89176c2e1eab"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "6ba08f56-c2f9-4a88-9b58-f704f6854e52", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("6ba08f56-c2f9-4a88-9b58-f704f6854e52", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ED + VALUES ("695fd096-c898-4f1e-9505-a036da9cf287", + "5d0a2f7c-52a1-4a2a-b547-8698a26116d6", + "6ba08f56-c2f9-4a88-9b58-f704f6854e52"); + INSERT INTO R_REL + VALUES ("131ece0d-48e6-40d3-a3c2-baac77f9f32c", + 4, + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_SIMP + VALUES ("131ece0d-48e6-40d3-a3c2-baac77f9f32c"); + INSERT INTO R_PART + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + "fe0e8e09-edef-4be6-b8d7-0cb86053f640", + 0, + 0, + ''); + INSERT INTO O_RTIDA + VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 0, + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + "fe0e8e09-edef-4be6-b8d7-0cb86053f640"); + INSERT INTO R_RTO + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + "fe0e8e09-edef-4be6-b8d7-0cb86053f640", + 0); + INSERT INTO R_OIR + VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + "fe0e8e09-edef-4be6-b8d7-0cb86053f640", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO R_FORM + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + "fb42f65b-cd41-411a-b022-a3cf2f481a99", + 1, + 1, + ''); + INSERT INTO R_RGO + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + "fb42f65b-cd41-411a-b022-a3cf2f481a99"); + INSERT INTO R_OIR + VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + "fb42f65b-cd41-411a-b022-a3cf2f481a99", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO PE_PE + VALUES ("131ece0d-48e6-40d3-a3c2-baac77f9f32c", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 9); + INSERT INTO GD_GE + VALUES ("a099b13e-ed73-489b-a170-610bc3665d56", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "131ece0d-48e6-40d3-a3c2-baac77f9f32c", + 24, + 0, + 'Test_Schema_Gen::Package::R4'); + INSERT INTO GD_CON + VALUES ("a099b13e-ed73-489b-a170-610bc3665d56", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("35f54702-d6fc-47af-908b-155701489c82", + "a099b13e-ed73-489b-a170-610bc3665d56", + 1, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "35f54702-d6fc-47af-908b-155701489c82"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "35f54702-d6fc-47af-908b-155701489c82", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("35f54702-d6fc-47af-908b-155701489c82", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("09c808ad-4cd1-463a-abdf-af47037a9994", + "a099b13e-ed73-489b-a170-610bc3665d56", + 3, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "09c808ad-4cd1-463a-abdf-af47037a9994"); + INSERT INTO DIM_GE + VALUES (4589.000000, + 3162.000000, + "09c808ad-4cd1-463a-abdf-af47037a9994", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("09c808ad-4cd1-463a-abdf-af47037a9994", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("ee5cc3d8-26bd-4f7f-8f28-7af26484d739", + "a099b13e-ed73-489b-a170-610bc3665d56", + 2, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "ee5cc3d8-26bd-4f7f-8f28-7af26484d739"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "ee5cc3d8-26bd-4f7f-8f28-7af26484d739", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("ee5cc3d8-26bd-4f7f-8f28-7af26484d739", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_LS + VALUES ("62c05ce8-3657-46de-92ab-5d263d9e62b1", + "a099b13e-ed73-489b-a170-610bc3665d56", + "00000000-0000-0000-0000-000000000000", + "7d8f35b5-b078-4369-841d-04f4476389d4", + "a69e3281-962a-43cf-977b-e541f46f73dc"); + INSERT INTO DIM_WAY + VALUES ("7d8f35b5-b078-4369-841d-04f4476389d4", + 4452.000000, + 3204.000000, + "a099b13e-ed73-489b-a170-610bc3665d56", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_WAY + VALUES ("a69e3281-962a-43cf-977b-e541f46f73dc", + 4740.000000, + 3204.000000, + "a099b13e-ed73-489b-a170-610bc3665d56", + "00000000-0000-0000-0000-000000000000", + "7d8f35b5-b078-4369-841d-04f4476389d4"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "a099b13e-ed73-489b-a170-610bc3665d56", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("a099b13e-ed73-489b-a170-610bc3665d56", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ED + VALUES ("9e246129-772e-4e7e-9b8b-8dd68e80b065", + "6ef83aa3-47e5-43f8-bbfa-058e9a2032f5", + "a099b13e-ed73-489b-a170-610bc3665d56"); + INSERT INTO O_OBJ + VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + 'Assoc_Class', + 5, + 'Assoc_Class', + '', + "00000000-0000-0000-0000-000000000000"); + INSERT INTO O_REF + VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "68553234-715f-43ce-a1ce-4b93d6483cf5", + 0, + "64853c2b-640f-4738-a363-40892f8d4757", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "bc18e358-1a8c-41d3-9ed5-5013ba99339c", + "04310dd4-9b14-4b59-9a59-9e9dc5d99468", + "9011bff4-2a98-4e04-956a-40afb80db518", + "da2bbbb4-1f61-4f3d-bd41-c13d075b9de3", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Reflexive_Class', + 'Id', + 'R1.''other'''); + INSERT INTO O_RATTR + VALUES ("9011bff4-2a98-4e04-956a-40afb80db518", + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "f94afef8-ed1a-4b9b-bb29-36149617b861", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 1, + 'Id'); + INSERT INTO O_ATTR + VALUES ("9011bff4-2a98-4e04-956a-40afb80db518", + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "00000000-0000-0000-0000-000000000000", + 'Other_Id', + '', + 'Other_', + 'Id', + 1, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); + INSERT INTO O_REF + VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "68553234-715f-43ce-a1ce-4b93d6483cf5", + 0, + "64853c2b-640f-4738-a363-40892f8d4757", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + "bc18e358-1a8c-41d3-9ed5-5013ba99339c", + "aeb07e49-c4f9-42dc-93d2-bf42134687b4", + "86f8146a-5d3f-4ff0-9119-6338bcb1d53f", + "fc3810e5-50ec-41f2-9998-27236801e3f4", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Reflexive_Class', + 'Id', + 'R1.''one'''); + INSERT INTO O_RATTR + VALUES ("86f8146a-5d3f-4ff0-9119-6338bcb1d53f", + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "f94afef8-ed1a-4b9b-bb29-36149617b861", + "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", + 1, + 'Id'); + INSERT INTO O_ATTR + VALUES ("86f8146a-5d3f-4ff0-9119-6338bcb1d53f", + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + "9011bff4-2a98-4e04-956a-40afb80db518", + 'One_Id', + '', + 'One_', + 'Id', + 1, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); + INSERT INTO O_ID + VALUES (0, + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3"); + INSERT INTO O_OIDA + VALUES ("9011bff4-2a98-4e04-956a-40afb80db518", + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + 0, + 'Other_Id'); + INSERT INTO O_OIDA + VALUES ("86f8146a-5d3f-4ff0-9119-6338bcb1d53f", + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + 0, + 'One_Id'); + INSERT INTO O_ID + VALUES (1, + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3"); + INSERT INTO O_ID + VALUES (2, + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3"); + INSERT INTO PE_PE + VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + 1, + "b48a6732-c56c-4e98-8773-afe91fcb30e4", + "00000000-0000-0000-0000-000000000000", + 4); + INSERT INTO GD_GE + VALUES ("ff43aac8-2d20-4e64-b96a-4b5499633df3", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", + 21, + 0, + 'Test_Schema_Gen::Package::Assoc_Class'); + INSERT INTO GD_SHP + VALUES ("ff43aac8-2d20-4e64-b96a-4b5499633df3"); + INSERT INTO GD_NCS + VALUES ("ff43aac8-2d20-4e64-b96a-4b5499633df3"); + INSERT INTO DIM_ND + VALUES (204.000000, + 144.000000, + "ff43aac8-2d20-4e64-b96a-4b5499633df3"); + INSERT INTO DIM_GE + VALUES (5052.000000, + 2892.000000, + "ff43aac8-2d20-4e64-b96a-4b5499633df3", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("ff43aac8-2d20-4e64-b96a-4b5499633df3", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_CON + VALUES ("d8027605-c5c5-4f0f-9c1a-18011924e4f7", + 5052.000000, + 3034.000000, + "ff43aac8-2d20-4e64-b96a-4b5499633df3"); + INSERT INTO GD_GE + VALUES ("df68e95e-64e3-4f29-a097-a408048a4399", + "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", + "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", + 34, + 0, + 'Test_Schema_Gen::Package::R1::Assoc_Class'); + INSERT INTO GD_CON + VALUES ("df68e95e-64e3-4f29-a097-a408048a4399", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("3867a3c3-9d8a-4b31-80c0-ab20ec032c14", + "df68e95e-64e3-4f29-a097-a408048a4399", + 1, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "3867a3c3-9d8a-4b31-80c0-ab20ec032c14"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "3867a3c3-9d8a-4b31-80c0-ab20ec032c14", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("3867a3c3-9d8a-4b31-80c0-ab20ec032c14", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("b4bd7874-bb29-4c55-ad5a-dd0c39ffa704", + "df68e95e-64e3-4f29-a097-a408048a4399", + 3, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "b4bd7874-bb29-4c55-ad5a-dd0c39ffa704"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "b4bd7874-bb29-4c55-ad5a-dd0c39ffa704", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("b4bd7874-bb29-4c55-ad5a-dd0c39ffa704", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_CTXT + VALUES ("654909ae-f193-4496-8254-34f8d3909641", + "df68e95e-64e3-4f29-a097-a408048a4399", + 2, + 0.000000, + 0.000000); + INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "654909ae-f193-4496-8254-34f8d3909641"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "654909ae-f193-4496-8254-34f8d3909641", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("654909ae-f193-4496-8254-34f8d3909641", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO GD_LS + VALUES ("e8c9a444-4942-4b30-bb2e-88684284d17d", + "df68e95e-64e3-4f29-a097-a408048a4399", + "00000000-0000-0000-0000-000000000000", + "c71b6092-0b55-4fc3-8365-b0c8c301d4e7", + "5a6aa846-482c-45d3-8da2-0b08a214e22b"); + INSERT INTO DIM_WAY + VALUES ("c71b6092-0b55-4fc3-8365-b0c8c301d4e7", + 5052.000000, + 3034.000000, + "df68e95e-64e3-4f29-a097-a408048a4399", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_WAY + VALUES ("5a6aa846-482c-45d3-8da2-0b08a214e22b", + 4994.000000, + 3059.000000, + "df68e95e-64e3-4f29-a097-a408048a4399", + "00000000-0000-0000-0000-000000000000", + "c71b6092-0b55-4fc3-8365-b0c8c301d4e7"); + INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "df68e95e-64e3-4f29-a097-a408048a4399", + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ELE + VALUES ("df68e95e-64e3-4f29-a097-a408048a4399", + 0, + "00000000-0000-0000-0000-000000000000"); + INSERT INTO DIM_ED + VALUES ("d8027605-c5c5-4f0f-9c1a-18011924e4f7", + "bc2759d4-1947-4b2d-b842-9faece1ecc82", + "df68e95e-64e3-4f29-a097-a408048a4399"); + """ + + def test_simple_class(self): + l = bridgepoint.ModelLoader() + l.input(self.__doc__, '') + m = l.build_component() + + cls = m.new('Class') + self.assertTrue(cls.Id) + + supertype = m.new('Supertype') + subtype = m.new('Subtype') + self.assertTrue(xtuml.relate(supertype, subtype, 2)) + self.assertTrue(xtuml.relate(supertype, cls, 3)) + self.assertTrue(supertype.Id) + self.assertTrue(subtype.Id) + + reflexive_class1 = m.new('Reflexive_Class') + reflexive_class2 = m.new('Reflexive_Class') + self.assertTrue(xtuml.relate(reflexive_class1, cls, 4)) + self.assertTrue(xtuml.relate(reflexive_class2, cls, 4)) + + assoc_class = m.new('Assoc_Class') + self.assertTrue(xtuml.relate(reflexive_class1, assoc_class, 1, 'one')) + self.assertTrue(xtuml.relate(reflexive_class2, assoc_class, 1, 'other')) + + +if __name__ == "__main__": + unittest.main() + diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 6a2bb5e..a7b70c0 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -8,54 +8,6 @@ from xtuml import where_eq as where -class TestAssociation(unittest.TestCase): - ''' - Test suite for the class xtuml.AssociationLink - ''' - - def test_association_constructor(self): - l1 = xtuml.AssociationLink('CLASS1', '1C', [], 'next') - l2 = xtuml.AssociationLink('CLASS1', '1C', [], 'prev') - ass = xtuml.Association(1, l1, l2) - self.assertEqual(ass.id, 'R1') - self.assertTrue(ass.is_reflexive) - - l1 = xtuml.AssociationLink('CLASS1', '1C', [], 'next') - l2 = xtuml.AssociationLink('CLASS2', '1C', [], 'prev') - ass = xtuml.Association('R2', l1, l2) - self.assertEqual(ass.id, 'R2') - self.assertFalse(ass.is_reflexive) - - def test_association_link_constructor(self): - l = xtuml.AssociationLink('CLASS', '1', [], 'test') - self.assertFalse(l.is_many) - self.assertFalse(l.is_conditional) - - l = xtuml.AssociationLink('CLASS', '1C', [], 'test') - self.assertFalse(l.is_many) - self.assertTrue(l.is_conditional) - - l = xtuml.AssociationLink('CLASS', '1c', [], 'test') - self.assertFalse(l.is_many) - self.assertTrue(l.is_conditional) - - l = xtuml.AssociationLink('CLASS', 'MC', [], 'test') - self.assertTrue(l.is_many) - self.assertTrue(l.is_conditional) - - l = xtuml.AssociationLink('CLASS', 'mC', [], 'test') - self.assertTrue(l.is_many) - self.assertTrue(l.is_conditional) - - l = xtuml.AssociationLink('CLASS', 'Mc', [], 'test') - self.assertTrue(l.is_many) - self.assertTrue(l.is_conditional) - - l = xtuml.AssociationLink('CLASS', 'mc', [], 'test') - self.assertTrue(l.is_many) - self.assertTrue(l.is_conditional) - - class TestModel(unittest.TestCase): ''' Test suite for the class xtuml.MetaModel @@ -237,9 +189,17 @@ def test_reflexive(self): ('Next_Id', 'unique_id'), ('Name', 'string')]) - endpint1 = xtuml.SingleAssociationLink('A', ids=['Id'], phrase='prev') - endpint2 = xtuml.SingleAssociationLink('A', ids=['Next_Id'], phrase='next') - self.metamodel.define_relation('R1', endpint1, endpint2) + self.metamodel.define_association(rel_id='R1', + source_kind='A', + source_keys=['Id'], + source_many=False, + source_conditional=False, + source_phrase='prev', + target_kind='A', + target_keys=['Next_Id'], + target_many=False, + target_conditional=False, + target_phrase='next') first = self.metamodel.new('A', Name="First") second = self.metamodel.new('A', Name="Second") @@ -261,10 +221,17 @@ def test_reflexive(self): def test_one_to_many(self): self.metamodel.define_class('A', [('Id', 'unique_id')]) self.metamodel.define_class('B', [('Id', 'unique_id'), ('A_Id', 'unique_id')]) - a_endpint = xtuml.SingleAssociationLink('A', ids=['Id']) - b_endpint = xtuml.ManyAssociationLink('B', ids=['A_Id']) - - self.metamodel.define_relation(1, a_endpint, b_endpint) + self.metamodel.define_association(rel_id=1, + source_kind='A', + source_keys=['Id'], + source_many=False, + source_conditional=False, + source_phrase='', + target_kind='B', + target_keys=['A_Id'], + target_many=True, + target_conditional=False, + target_phrase='') a = self.metamodel.new('A') b = self.metamodel.new('B') diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index c5219f7..055aebb 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -356,8 +356,8 @@ def test_implicit_serialize(self): self.assertTrue(s1) self.assertEqual(s1, s2) - s1 = xtuml.serialize(R1.source) - s2 = xtuml.persist.serialize_association_link(R1.source) + s1 = xtuml.serialize(R1.link) + s2 = xtuml.persist.serialize_link(R1.link) self.assertTrue(s1) self.assertEqual(s1, s2) diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 9a61ac9..388bade 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -34,9 +34,8 @@ from .persist import serialize from .model import Association -from .model import AssociationLink -from .model import SingleAssociationLink -from .model import ManyAssociationLink +from .model import Link +from .model import ReversedLink from .model import QuerySet from .model import BaseObject diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 98d1250..82a9bc0 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -13,34 +13,32 @@ logger = logging.getLogger('consistency_check') -def pretty_to_link(inst, from_link, to_link): +def pretty_to_link(inst, link): ''' Create a human-readable representation of a link on the 'TO'-side ''' values = '' prefix = '' metaclass = inst.__metaclass__ - + for name, ty in metaclass.attributes: - if name in from_link.ids: + if name in link.key_map: value = getattr(inst, name) value = xtuml.serialize_value(value, ty) - idx = from_link.ids.index(name) - name = to_link.ids[idx] + name = link.key_map[name] values += '%s%s=%s' % (prefix, name, value) prefix = ', ' - return '%s(%s)' % (to_link.kind, values) + return '%s(%s)' % (link.kind, values) -def pretty_from_link(inst, from_link, to_link): +def pretty_from_link(inst, link): ''' Create a human-readable representation of a link on the 'FROM'-side ''' values = '' prefix = '' metaclass = inst.__metaclass__ - for name, ty in metaclass.attributes: if name in metaclass.identifying_attributes: value = getattr(inst, name) @@ -48,7 +46,7 @@ def pretty_from_link(inst, from_link, to_link): values += '%s%s=%s' % (prefix, name, value) prefix = ', ' - return '%s(%s)' % (from_link.kind, values) + return '%s(%s)' % (metaclass.kind, values) def pretty_unique_identifier(inst, identifier): @@ -110,26 +108,26 @@ def check_uniqueness_constraint(m, kind=None): return res -def check_link_integrity(m, rel_id, from_link, to_link): +def check_link_integrity(m, link): ''' Check the model for integrity violations on an association in a particular direction. ''' res = True - for inst in m.select_many(from_link.kind): - nav_chain = xtuml.navigate_many(inst) - q_set = nav_chain.nav(to_link.kind, rel_id, to_link.phrase)() + for inst in link.from_metaclass.select_many(): + q_set = list(link.navigate(inst)) - if(len(q_set) < 1 and not to_link.is_conditional) or ( - (len(q_set) > 1 and not to_link.is_many)): + if(len(q_set) < 1 and not link.conditional) or ( + (len(q_set) > 1 and not link.many)): res = False logger.warning('integrity violation in ' - '%s --(%s)--> %s' % (pretty_from_link(inst, from_link, to_link), - rel_id, - pretty_to_link(inst, from_link, to_link))) + '%s --(%s)--> %s' % (pretty_from_link(inst, link), + link.rel_id, + pretty_to_link(inst, link))) return res + def check_association_integrity(m, rel_id=None): ''' Check the model for integrity violations on association(s). @@ -139,9 +137,9 @@ def check_association_integrity(m, rel_id=None): res = True for ass in m.associations: - if rel_id in [ass.id, None]: - res &= check_link_integrity(m, ass.id, ass.source, ass.target) - res &= check_link_integrity(m, ass.id, ass.target, ass.source) + if rel_id in [ass.rel_id, None]: + res &= check_link_integrity(m, ass.link) + res &= check_link_integrity(m, ass.reversed_link) return res diff --git a/xtuml/load.py b/xtuml/load.py index a467a4c..2825614 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -94,11 +94,19 @@ def __init__(self, kind, attributes): self.attributes = attributes -class CreateRelatationStmt(object): - - def __init__(self, ass1, ass2, rel_id): - self.end_points = (ass1, ass2) - self.id = rel_id +class CreateAssociationStmt(object): + def __init__(self, rel_id, source_kind, source_cardinality, source_keys, + source_phrase, target_kind, target_cardinality, target_keys, + target_phrase): + self.rel_id = rel_id + self.source_kind = source_kind + self.target_kind = target_kind + self.source_keys = source_keys + self.target_keys = target_keys + self.source_cardinality = source_cardinality + self.target_cardinality = target_cardinality + self.source_phrase = source_phrase + self.target_phrase = target_phrase class CreateUniqueStmt(object): @@ -228,8 +236,18 @@ def populate_associations(self, metamodel): input. ''' for stmt in self.statements: - if isinstance(stmt, CreateRelatationStmt): - metamodel.define_relation(stmt.id, *stmt.end_points) + if isinstance(stmt, CreateAssociationStmt): + metamodel.define_association(stmt.rel_id, + stmt.source_kind, + stmt.source_keys, + 'M' in stmt.source_cardinality, + 'C' in stmt.source_cardinality, + stmt.source_phrase, + stmt.target_kind, + stmt.target_keys, + 'M' in stmt.target_cardinality, + 'C' in stmt.target_cardinality, + stmt.target_phrase) def populate_unique_identifiers(self, metamodel): ''' @@ -516,15 +534,18 @@ def p_negative_value(self, p): def p_create_rop_statement(self, p): '''create_rop_statement : CREATE ROP REF_ID RELID FROM association_end TO association_end''' - p[0] = CreateRelatationStmt(p[6], p[8], p[4]) + args = [p[4]] + args.extend(p[6]) + args.extend(p[8]) + p[0] = CreateAssociationStmt(*args) def p_association_end(self, p): '''association_end : cardinality identifier LPAREN identifier_sequence RPAREN''' - p[0] = xtuml.AssociationLink(p[2], p[1], p[4]) + p[0] = (p[2], p[1], p[4], '') def p_phrased_association_end(self, p): '''association_end : cardinality identifier LPAREN identifier_sequence RPAREN PHRASE STRING''' - p[0] = xtuml.AssociationLink(p[2], p[1], p[4], p[7][1:-1]) + p[0] = (p[2], p[1], p[4], p[7][1:-1]) def p_cardinality_1(self, p): '''cardinality : NUMBER''' diff --git a/xtuml/model.py b/xtuml/model.py index 8e96096..45ce0e2 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -135,13 +135,25 @@ def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', def kind(self): return self.to_metaclass.kind + @property + def cardinality(self): + if self.many: + s = 'M' + else: + s = '1' + + if self.conditional: + s += 'C' + + return s + def navigate(self, inst): kwargs = dict() for key, mapped_key in self.key_map.items(): kwargs[mapped_key] = getattr(inst, key) return self.to_metaclass.query(kwargs) - + def __repr__(self): if self.phrase: return "%s->%s[%s, %s]" % (self.kind, self.to_metaclass.kind, @@ -164,61 +176,20 @@ class Association(object): ''' An association connects two classes to each other via two association links. ''' + rel_id = None + link = None + reversed_link = None - def __init__(self, relid, source, target): - if isinstance(relid, int): - relid = 'R%d' % relid - self.id = relid - self.source = source - self.target = target - + def __init__(self, rel_id, link, reversed_link): + self.rel_id = rel_id + self.link = link + self.reversed_link = reversed_link + @property def is_reflexive(self): - return self.source.kind.upper() == self.target.kind.upper() - - -class AssociationLink(object): - ''' - An association link represent an end point in an association. - ''' - - def __init__(self, kind, cardinality, ids, phrase=''): - self.cardinality = cardinality - self.kind = kind - self.phrase = phrase - self.ids = ids - - @property - def is_many(self): - return self.cardinality.upper() in ['M', 'MC'] - - @property - def is_conditional(self): - return 'C' in self.cardinality.upper() + return self.link.kind == self.reversed_link.kind - -class SingleAssociationLink(AssociationLink): - ''' - An association link that identifies an end point with cardinality 0..1 or 1. - ''' - - def __init__(self, kind, conditional=False, ids=[], phrase=''): - if conditional: cardinality = '1C' - else: cardinality = '1' - AssociationLink.__init__(self, kind, cardinality, ids, phrase) - - -class ManyAssociationLink(AssociationLink): - ''' - An association link that identifies an end point with cardinality * or 1..*. - ''' - - def __init__(self, kind, conditional=False, ids=[], phrase=''): - if conditional: cardinality = 'MC' - else: cardinality = 'M' - AssociationLink.__init__(self, kind, cardinality, ids, phrase) - class QuerySet(xtuml.OrderedSet): ''' An ordered set which holds instances that match queries from a metamodel. @@ -333,8 +304,7 @@ def __call__(self, *args, **kwargs): def attribute_names(self): return [name for name, _ in self.attributes] - def add_link(self, metaclass, rel_id, key_map, phrase, conditional=False, - many=False, reverse=False): + def add_link(self, metaclass, rel_id, key_map, phrase, conditional, many, reverse=False): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id @@ -550,28 +520,32 @@ def clone(self, instance): setattr(clone, name, value) return clone - - def define_relation(self, rel_id, source, target): - ''' - This method is deprecated. Use *define_association* instead. - ''' - return self.define_association(rel_id, source, target) - - def define_association(self, rel_id, source, target): + + def define_association(self, rel_id, source_kind, source_keys, source_many, + source_conditional, source_phrase, target_kind, + target_keys, target_many, target_conditional, + target_phrase): ''' - Define and return an association between *source* to *target* named - *rel_id*. + Define and return an association between two classes. ''' - source_metaclass = self.find_metaclass(source.kind) - target_metaclass = self.find_metaclass(target.kind) + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + source_metaclass = self.find_metaclass(source_kind) + target_metaclass = self.find_metaclass(target_kind) + key_map = dict(zip(source_keys, target_keys)) - key_map = dict(zip(source.ids, target.ids)) - source_metaclass.add_link(target_metaclass, rel_id, key_map, target.phrase) - target_metaclass.add_link(source_metaclass, rel_id, key_map, source.phrase, reverse=True) + link1 = source_metaclass.add_link(target_metaclass, rel_id, key_map, + many=target_many, phrase=target_phrase, + conditional=target_conditional) - ass = Association(rel_id, source, target) - self.associations.append(ass) + link2 = target_metaclass.add_link(source_metaclass, rel_id, key_map, + many=source_many, phrase=source_phrase, + conditional=source_conditional, reverse=True) + ass = Association(rel_id, link1, link2) + self.associations.append(ass) + return ass def define_unique_identifier(self, kind, name, *named_attributes): diff --git a/xtuml/persist.py b/xtuml/persist.py index 6a203fa..29b401d 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -77,16 +77,16 @@ def serialize_instances(metamodel): return s -def serialize_association_link(lnk): +def serialize_link(link): ''' Serialize an xtuml metamodel association link. ''' - s = '%s %s (%s)' % (lnk.cardinality.upper(), - lnk.kind, - ', '.join(lnk.ids)) + s = '%s %s (%s)' % (link.cardinality, + link.from_metaclass.kind, + ', '.join(link.key_map.keys())) - if lnk.phrase: - s += " PHRASE '%s'" % lnk.phrase + if link.phrase: + s += " PHRASE '%s'" % link.phrase return s @@ -95,11 +95,11 @@ def serialize_association(ass): ''' Serialize an xtuml metamodel association. ''' - source = serialize_association_link(ass.source) - target = serialize_association_link(ass.target) - return 'CREATE ROP REF_ID %s FROM %s TO %s;\n' % (ass.id, - source, - target) + link = serialize_link(ass.link) + reversed_link = serialize_link(ass.reversed_link) + return 'CREATE ROP REF_ID %s FROM %s TO %s;\n' % (ass.rel_id, + link, + reversed_link) def serialize_class(Cls): @@ -134,7 +134,7 @@ def serialize_schema(metamodel): for kind in sorted(metamodel.metaclasses.keys()): s += serialize_class(metamodel.metaclasses[kind].clazz) - for ass in sorted(metamodel.associations, key=lambda x: x.id): + for ass in sorted(metamodel.associations, key=lambda x: x.rel_id): s += serialize_association(ass) return s @@ -165,8 +165,8 @@ def serialize(resource): elif isinstance(resource, xtuml.Association): return serialize_association(resource) - elif isinstance(resource, xtuml.AssociationLink): - return serialize_association_link(resource) + elif isinstance(resource, xtuml.Link): + return serialize_link(resource) elif isinstance(resource, xtuml.BaseObject): return serialize_instance(resource) @@ -193,7 +193,7 @@ def persist_schema(metamodel, path): s = serialize_class(metamodel.metaclasses[kind].clazz) f.write(s) - for ass in sorted(metamodel.associations, key=lambda x: x.id): + for ass in sorted(metamodel.associations, key=lambda x: x.rel_id): s = serialize_association(ass) f.write(s) @@ -231,7 +231,7 @@ def persist_database(metamodel, path): attribute_names) f.write(s) - for ass in sorted(metamodel.associations, key=lambda x: x.id): + for ass in sorted(metamodel.associations, key=lambda x: x.rel_id): s = serialize_association(ass) f.write(s) From 129945b1d9d9cad59251488e8c029561d5f16218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 27 Jul 2016 09:42:22 +0200 Subject: [PATCH 052/216] cosmetics --- examples/gen_ooaofooa_schema.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index 25240b1..6cd2f74 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -7,7 +7,6 @@ import re import xtuml -from xtuml import navigate_one as one from xtuml import navigate_many as many from bridgepoint import ooaofooa From deed994e0b836a1c226bb1ae3f75ac9e83438866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 27 Jul 2016 13:30:00 +0200 Subject: [PATCH 053/216] xtuml: major cosmetic restructuring that breaks API. --- tests/test_xtuml/test_metamodel.py | 14 +- tests/test_xtuml/test_navigate.py | 2 +- tests/test_xtuml/test_persist.py | 2 +- tests/test_xtuml/test_relate.py | 4 +- tests/test_xtuml/test_sort.py | 4 +- xtuml/__init__.py | 12 +- xtuml/consistency_check.py | 1 + xtuml/model.py | 871 +++++++++++++++++------------ xtuml/persist.py | 1 + 9 files changed, 547 insertions(+), 364 deletions(-) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index a7b70c0..6950b31 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -79,7 +79,7 @@ def test_is_instance(self): m = self.metamodel q = m.select_any('S_DT') - self.assertIsInstance(q, xtuml.BaseObject) + self.assertIsInstance(q, xtuml.Class) def test_query_order(self): m = self.metamodel @@ -113,7 +113,7 @@ def test_case_sensitivity(self): def test_unknown_type(self): self.metamodel.define_class('A', [('Id', '')]) - self.assertRaises(xtuml.ModelException, self.metamodel.new, 'A') + self.assertRaises(xtuml.MetaException, self.metamodel.new, 'A') def test_undefined_class(self): self.assertRaises(xtuml.UnknownClassException, self.metamodel.new, @@ -121,7 +121,7 @@ def test_undefined_class(self): def test_redefined_class(self): self.metamodel.define_class('MY_CLASS', []) - self.assertRaises(xtuml.ModelException, self.metamodel.define_class, + self.assertRaises(xtuml.MetaModelException, self.metamodel.define_class, 'MY_CLASS', []) def test_select_any_undefined(self): @@ -142,7 +142,7 @@ def test_delete(self): def test_delete_twise(self): inst = self.metamodel.select_any('S_DT', where(Name='void')) xtuml.delete(inst) - self.assertRaises(xtuml.ModelException, xtuml.delete, inst) + self.assertRaises(xtuml.DeleteException, xtuml.delete, inst) def test_clone(self): s_ee = self.metamodel.new('S_EE', Name='Test', Descrip='test', Key_Lett='TEST') @@ -170,7 +170,7 @@ def test_clone(self): self.assertEqual(pe_pe_clone.type, pe_pe.type) def test_delete_unknown_instance(self): - self.assertRaises(xtuml.ModelException, xtuml.delete, self) + self.assertRaises(xtuml.DeleteException, xtuml.delete, self) class TestDefineAssociations(unittest.TestCase): @@ -240,9 +240,9 @@ def test_one_to_many(self): self.assertEqual(a, xtuml.navigate_one(b).A[1]()) -class TestBaseObject(unittest.TestCase): +class TestClass(unittest.TestCase): ''' - Test suite for the class xtuml.BaseObject + Test suite for the class xtuml.Class ''' My_Class = xtuml.MetaClass('My_Class') diff --git a/tests/test_xtuml/test_navigate.py b/tests/test_xtuml/test_navigate.py index b2cc8ca..6e07e01 100644 --- a/tests/test_xtuml/test_navigate.py +++ b/tests/test_xtuml/test_navigate.py @@ -37,7 +37,7 @@ def test_navigate_none(self): self.assertEqual(len(xtuml.navigate_many(None)()), 0) def test_navigate_invalid_handle(self): - self.assertRaises(xtuml.ModelException, xtuml.navigate_one, 50) + self.assertRaises(xtuml.MetaException, xtuml.navigate_one, 50) if __name__ == "__main__": diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index 055aebb..ee592ed 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -360,7 +360,7 @@ def test_implicit_serialize(self): s2 = xtuml.persist.serialize_link(R1.link) self.assertTrue(s1) self.assertEqual(s1, s2) - + x = m.new('X', Boolean=True, Integer=4, String='str') s1 = xtuml.serialize(x) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index 172c1ae..fed10af 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -49,7 +49,7 @@ def test_relate_reflexive_without_phrase(self): inst1 = self.m.new('ACT_SMT') inst2 = self.m.new('ACT_SMT') - self.assertRaises(xtuml.ModelException, xtuml.relate, + self.assertRaises(xtuml.RelateException, xtuml.relate, inst1, inst2, 661, '') def test_relate_inverted_order(self): @@ -63,7 +63,7 @@ def test_relate_inverted_order(self): def test_relate_invalid_relid(self): s_edt = self.m.new('S_EDT') s_dt = self.m.new('S_DT') - self.assertRaises(xtuml.ModelException, xtuml.relate, s_edt, s_dt, 0) + self.assertRaises(xtuml.UnknownLinkException, xtuml.relate, s_edt, s_dt, 0) def test_unrelate(self): inst1 = self.m.new('ACT_SMT') diff --git a/tests/test_xtuml/test_sort.py b/tests/test_xtuml/test_sort.py index 7aa1ecc..2fcb96c 100644 --- a/tests/test_xtuml/test_sort.py +++ b/tests/test_xtuml/test_sort.py @@ -38,7 +38,7 @@ def test_sort(self): self.assertEqual(inst.LineNumber, 9 - idx) def test_invalid_arguments(self): - self.assertRaises(xtuml.ModelException, xtuml.sort_reflexive, [], 1, '') + self.assertRaises(xtuml.MetaException, xtuml.sort_reflexive, [], 1, '') def test_empty_set(self): inst_set = self.m.select_many('S_BPARM') @@ -50,7 +50,7 @@ def test_unknown_phrase(self): self.m.new('S_BPARM') inst_set = self.m.select_many('S_BPARM') - self.assertRaises(xtuml.UnknownAssociationException, + self.assertRaises(xtuml.UnknownLinkException, xtuml.sort_reflexive, inst_set, 55, '') diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 388bade..2c4d02d 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -38,12 +38,18 @@ from .model import ReversedLink from .model import QuerySet +from .model import Class from .model import BaseObject from .model import MetaClass from .model import MetaModel -from .model import ModelException + +from .model import MetaException +from .model import DeleteException +from .model import RelateException +from .model import UnelateException +from .model import MetaModelException +from .model import UnknownLinkException from .model import UnknownClassException -from .model import UnknownAssociationException from .model import navigate_any from .model import navigate_one @@ -59,3 +65,5 @@ from .consistency_check import check_uniqueness_constraint + + diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 82a9bc0..014621b 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -66,6 +66,7 @@ def pretty_unique_identifier(inst, identifier): return '%s(%s)' % (identifier, values) + def check_uniqueness_constraint(m, kind=None): ''' Check the model for uniqueness constraint violations. diff --git a/xtuml/model.py b/xtuml/model.py index 45ce0e2..1618136 100644 --- a/xtuml/model.py +++ b/xtuml/model.py @@ -1,115 +1,138 @@ # encoding: utf-8 # Copyright (C) 2016 John Törnblom - -from functools import partial +''' +Perform various xtUML meta operations, e.g. create new metamodels and +metaclasses, relate instances and perform navigations and queries. +''' import logging import collections +import xtuml + +from functools import partial + try: from future_builtins import filter, zip except ImportError: pass -import xtuml - logger = logging.getLogger(__name__) -class ModelException(Exception): + +class MetaException(Exception): ''' - Base class for all pyxtuml-specific exceptions + Base class for all exceptions thrown by the xtuml.meta module. ''' -class UnknownClassException(ModelException): - pass +class DeleteException(MetaException): + ''' + An exception that may be thrown during delete operations. + ''' + + +class RelateException(MetaException): + ''' + An exception that may be thrown during relate operations. + ''' -class UnknownAssociationException(ModelException): +class UnelateException(MetaException): + ''' + An exception that may be thrown during unrelate operations. + ''' + +class UnknownLinkException(MetaException): + ''' + An exception that may be thrown when an link is not found. + ''' def __init__(self, from_kind, to_kind, rel_id, phrase): if phrase: msg = "%s->%s[%s, %s]" % (from_kind, to_kind, repr(rel_id), repr(phrase)) else: msg = "%s->%s[%s]" % (from_kind, to_kind, repr(rel_id)) - ModelException.__init__(self, msg) + MetaException.__init__(self, msg) -class NavChain(object): +class MetaModelException(MetaException): + ''' + Base class for all exceptions thrown by the MetaModel class. ''' - A navigation chain initializes a query from one or more instances. - Queries may be syntactically cascaded in several ways: - - res = NavChain(inst).nav('X', 'R100', 'phrase').nav('Y', 101) - or using an OAL/RSL inspired syntax: - - res = NavChain(inst).X[100, 'phrase'].Y[101](lamda x: ) + +class UnknownClassException(MetaModelException): + ''' + An exception that may be thrown when a metaclass is not found. ''' - - def __init__(self, handle): - if handle is None: - handle = [] - - elif isinstance(handle, BaseObject): - handle = [handle] - - elif not isinstance(handle, collections.Iterable): - raise ModelException("Unable to navigate across '%s'" % type(handle)) - - self.handle = handle - self._kind = None - - def nav(self, kind, relid, phrase=''): - self.handle = NavChain._nav(self.handle, kind, relid, phrase) - return self - - @staticmethod - def _nav(handle, kind, rel_id, phrase): - kind = kind.upper() - if isinstance(rel_id, int): - rel_id = 'R%d' % rel_id - - for inst in iter(handle): - for result in inst.__metaclass__.navigate(inst, kind, rel_id, phrase): - yield result - - def __getattr__(self, name): - self._kind = name - return self - - def __getitem__(self, args): - if not isinstance(args, tuple): - args = (args, '') - - relid, phrase = args - - return self.nav(self._kind, relid, phrase) -class NavOneChain(NavChain): +def _is_null(instance, name): + ''' + Determine if an attribute of an *instance* with a specific *name* + is null. + ''' + value = getattr(instance, name) + if value: + return False - def __call__(self, where_clause=None): - handle = self.handle or iter([]) - if not where_clause: - return next(handle, None) - - for inst in handle: - if where_clause(inst): - return inst + elif value is None: + return True + + name = name.upper() + for attr_name, attr_ty in instance.__metaclass__.attributes: + if attr_name.upper() != name: + continue + + attr_ty = attr_ty.upper() + if attr_ty == 'UNIQUE_ID': + # UUID(int=0) is reserved for null + return value == 0 + + elif attr_ty == 'STRING': + # empty string is reserved for null + return len(value) == 0 + + else: + #null-values for integer, boolean and real are not supported + return False -class NavManyChain(NavChain): +class Association(object): + ''' + An association connects two metaclasses to each other via two directed + links. + ''' + rel_id = None + link = None + reversed_link = None - def __call__(self, where_clause=None): - handle = self.handle or list() - return QuerySet(filter(where_clause, handle)) + def __init__(self, rel_id, link, reversed_link): + self.rel_id = rel_id + self.link = link + self.reversed_link = reversed_link + + @property + def is_reflexive(self): + return self.link.kind == self.reversed_link.kind class Link(object): + ''' + A link connects one metaclass to another in a single direction. + + *rel_id* is used to specify the association between the to metaclasses, + and a *key map* is used to define the mapping from a primary key in the + *from_metaclass* to a foreign key in the *to_metaclass*. The *phrase* is + used to specify the direction when the association is reflexive. + + In addition, links also specify cardinality constraints via the *many* + and *conditional* attributes. + ''' from_metaclass = None rel_id = None to_metaclass = None @@ -130,13 +153,17 @@ def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', self.phrase = phrase self.conditional = conditional self.many = many - - @property - def kind(self): - return self.to_metaclass.kind @property def cardinality(self): + ''' + Obtain the cardinality string. + + Example: '1C' for a conditional link with a single instance [0..1] + 'MC' for a link with any number of instances [0..*] + 'M' for a more than one instance [1..*] + 'M' for a link with exactly one instance [1] + ''' if self.many: s = 'M' else: @@ -147,10 +174,20 @@ def cardinality(self): return s - def navigate(self, inst): + @property + def kind(self): + ''' + Obtain the resulting kind when the link is navigated. + ''' + return self.to_metaclass.kind + + def navigate(self, instance): + ''' + Navigate accross a link starting from an *instance*. + ''' kwargs = dict() for key, mapped_key in self.key_map.items(): - kwargs[mapped_key] = getattr(inst, key) + kwargs[mapped_key] = getattr(instance, key) return self.to_metaclass.query(kwargs) @@ -164,7 +201,10 @@ def __repr__(self): class ReversedLink(Link): - + ''' + A reversed (directed) link is identical to a regular link, but with the + *key_map* being inverted upon initialisation. + ''' def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', conditional=False, many=False): Link.__init__(self, from_metaclass, rel_id, to_metaclass, @@ -172,51 +212,29 @@ def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', phrase, conditional, many) -class Association(object): - ''' - An association connects two classes to each other via two association links. - ''' - rel_id = None - link = None - reversed_link = None - - def __init__(self, rel_id, link, reversed_link): - self.rel_id = rel_id - self.link = link - self.reversed_link = reversed_link - - @property - def is_reflexive(self): - return self.link.kind == self.reversed_link.kind - - -class QuerySet(xtuml.OrderedSet): +class Query(object): ''' - An ordered set which holds instances that match queries from a metamodel. + A *Query* retrive instances from a metaclass by matching instance + attributes against a dictonary of values provided upon initialisation. ''' - @property - def first(self): - if len(self): - return next(iter(self)) - - @property - def last(self): - if len(self): - return next(reversed(self)) - - -class Query(object): + metaclass = None result = None - generator = None + evaluation = None - def __init__(self, table, kwargs): + def __init__(self, metaclass, kwargs): self.result = collections.deque() self.items = collections.deque(kwargs.items()) - self.table = table - self.generator = self.mk_generator() + self.metaclass = metaclass + self.evaluation = self.evaluate() + + def evaluate(self): + ''' + Evaluate the query by iterating all instances in the metaclass. - def mk_generator(self): - for inst in iter(self.table): + **Note**: if the instance population is modified during evaluation, + an exception is thrown. + ''' + for inst in iter(self.metaclass.instances): for name, value in iter(self.items): if getattr(inst, name) != value or _is_null(inst, name): break @@ -224,30 +242,60 @@ def mk_generator(self): self.result.append(inst) yield inst - self.generator = None + self.evaluation = None def execute(self): + ''' + Execute the query. + + **Note**: Each instance is evaluated for inclusion only once, even + if the query is executed multiple times. To re-evaluate the query, + create a new one. + ''' for inst in self.result: yield inst - while self.generator: - yield next(self.generator) + while self.evaluation: + yield next(self.evaluation) -class BaseObject(object): +class QuerySet(xtuml.OrderedSet): + ''' + An ordered set which holds instances that match queries. + ''' + @property + def first(self): + ''' + Obtain the first element in the set. + ''' + if len(self): + return next(iter(self)) + + @property + def last(self): + ''' + Obtain the last element in the set. + ''' + if len(self): + return next(reversed(self)) + + +class Class(object): ''' - A common base object for all instances created in a metamodel. Accesses - to attributes, e.g. getattr/setattr, on these objects are case insensitive. + A class that all instances created by a metaclass inherits from. + + **Note**: Accesses to attributes, e.g. getattr/setattr, on these objects + are case insensitive. ''' def __init__(self): self.__metaclass__.cache.clear() def __add__(self, other): - assert isinstance(other, BaseObject) + assert isinstance(other, Class) return QuerySet([self, other]) def __sub__(self, other): - assert isinstance(other, BaseObject) + assert isinstance(other, Class) if self == other: return QuerySet() else: return QuerySet([self]) @@ -273,7 +321,17 @@ def __str__(self): return str(self.__dict__) +# Backwards compatabillity with older versions of pyxtuml +BaseObject = Class + + class MetaClass(object): + ''' + A metaclass contain metadata for instances, e.g. what attributes are + available, what thier types are, and so on. + + In addition, each metaclass also handle allocations of instances. + ''' metamodel = None kind = None attributes = None @@ -295,16 +353,28 @@ def __init__(self, kind, metamodel=None): self.links = dict() self.instances = list() self.cache = dict() - self.clazz = type(kind, (BaseObject,), dict(__metaclass__=self)) + self.clazz = type(kind, (Class,), dict(__metaclass__=self)) def __call__(self, *args, **kwargs): + ''' + Create and return a new instance using the metaclass constructor. + ''' return self.new(*args, **kwargs) @property def attribute_names(self): + ''' + Obtain an ordered list of all attribute names. + ''' return [name for name, _ in self.attributes] - def add_link(self, metaclass, rel_id, key_map, phrase, conditional, many, reverse=False): + def add_link(self, metaclass, rel_id, key_map, phrase, conditional, + many, reverse=False): + ''' + Add a new link from *self* to *metaclass*. Keys in the link are added + to the set of identifying or referential attributes depending on the + direction, i.e. if the link is reversed or not. + ''' if isinstance(rel_id, int): rel_id = 'R%d' % rel_id @@ -321,23 +391,38 @@ def add_link(self, metaclass, rel_id, key_map, phrase, conditional, many, revers return link def find_link(self, kind, rel_id, phrase): + ''' + Find a link with a given *rel_id* and *phrase* that yeld instances of + some *kind*. + ''' if isinstance(rel_id, int): rel_id = 'R%d' % rel_id key = (kind, rel_id, phrase) return self.links.get(key, None) - def append_attribute(self, name, ty): - attr = (name, ty) + def append_attribute(self, name, type_name): + ''' + Append an attribute with a given *name* and *type name* at the end of + the list of attributes. + ''' + attr = (name, type_name) self.attributes.append(attr) setattr(self.clazz, name, None) - def insert_attribute(self, index, name, ty): - attr = (name, ty) + def insert_attribute(self, index, name, type_name): + ''' + Insert an attribute with a given *name* and *type name* at some *index* + in the list of attributes. + ''' + attr = (name, type_name) self.attributes.insert(index, attr) setattr(self.clazz, name, None) def delete_attribute(self, name): + ''' + Delete an attribute with a given *name* from the list of attributes. + ''' for idx, attr in enumerate(self.attributes): attr_name, _ = attr if attr_name == name: @@ -345,6 +430,9 @@ def delete_attribute(self, name): return def default_value(self, type_name): + ''' + Obtain the default value for some *type name*. + ''' uname = type_name.upper() if uname == 'BOOLEAN': return False @@ -364,9 +452,12 @@ def default_value(self, type_name): else: return None else: - raise ModelException("Unknown type named '%s'" % type_name) + raise MetaException("Unknown type named '%s'" % type_name) def new(self, *args, **kwargs): + ''' + Create and return a new instance. + ''' inst = self.clazz() # set all attributes with an initial default value @@ -390,14 +481,36 @@ def new(self, *args, **kwargs): return inst - def delete(self, inst): - if inst in self.instances: - self.instances.remove(inst) + def clone(self, instance): + ''' + Create a shallow clone of an *instance*. + + **Note:** the clone and the original instance **does not** have to be + part of the same metaclass. + ''' + clone = self.new() + for name, _ in instance.__metaclass__.attributes: + value = getattr(instance, name) + setattr(clone, name, value) + + return clone + + def delete(self, instance): + ''' + Delete an *instance* from the instance pool. If the *instance* is not + part of the metaclass, a *MetaException* is thrown. + ''' + if instance in self.instances: + self.instances.remove(instance) self.cache.clear() else: - raise ModelException("Instance not found in its model") + raise DeleteException("Instance not found in the instance pool") def select_one(self, where_clause=None): + ''' + Select a single instance from the instance pool. Optionally, a + conditional *where-clause* in the form of a function may be provided. + ''' if isinstance(where_clause, dict): s = self.query(where_clause) else: @@ -406,6 +519,10 @@ def select_one(self, where_clause=None): return next(s, None) def select_many(self, where_clause=None): + ''' + Select several instances from the instance pool. Optionally, + a conditional *where-clause* in the form of a function may be provided. + ''' if isinstance(where_clause, dict): s = self.query(where_clause) else: @@ -414,195 +531,112 @@ def select_many(self, where_clause=None): return QuerySet(s) def navigate(self, inst, kind, rel_id, phrase=''): + ''' + Navigate across a link with some *rel_id* and *phrase* that yields + instances of some *kind*. + ''' key = (kind, rel_id, phrase) if key in self.links: link = self.links[key] return link.navigate(inst) else: - raise UnknownAssociationException(self.kind, kind, rel_id, phrase) + raise UnknownLinkException(self.kind, kind, rel_id, phrase) - def query(self, kwargs): - index = frozenset(list(kwargs.items())) + def query(self, dictonary_of_values): + ''' + Query the instance pool for instances with attributes that match a given + *dictonary of values*. + ''' + index = frozenset(list(dictonary_of_values.items())) if index not in self.cache: - self.cache[index] = Query(self.instances, kwargs) + self.cache[index] = Query(self, dictonary_of_values) return self.cache[index].execute() -class MetaModel(object): +class NavChain(object): ''' - A metamodel contains class definitions with associations between them, - and instances of different kinds of classes. + A navigation chain initializes a navigation from one or more instances. + Navigation may be syntactically cascaded in several ways: - **Note:** All identifiers, e.g. attributes, association ids, key letters - (the kind or name of a class), are case **insensitive**. - ''' - metaclasses = None - associations = None - id_generator = None + res = NavChain(inst).nav('X', 'R100', 'phrase').nav('Y', 101) + + or using an OAL/RSL inspired syntax: - def __init__(self, id_generator=None): - ''' - Create a new, empty metamodel. - Optionally, specify an id generator used to obtain unique identifiers. - ''' - if id_generator is None: - id_generator = xtuml.UUIDGenerator() - - self.metaclasses = dict() - self.associations = list() - self.id_generator = id_generator - - @property - def instances(self): - for metaclass in self.metaclasses.values(): - for inst in metaclass.instances: - yield inst - - @property - def classes(self): - for metaclass in self.metaclasses.values(): - yield metaclass.clazz + res = NavChain(inst).X[100, 'phrase'].Y[101](lamda x: ) + ''' - def define_class(self, kind, attributes, doc=''): - ''' - Define a new class in the metamodel, and return its metaclass. - ''' - ukind = kind.upper() - if ukind in self.metaclasses: - raise ModelException('A class with the name %s is already defined' % kind) - - metaclass = MetaClass(kind, self) - for name, ty in attributes: - metaclass.append_attribute(name, ty) + def __init__(self, handle): + if handle is None: + handle = [] - self.metaclasses[ukind] = metaclass - - return metaclass - - def find_class(self, kind): - ''' - Find a class of some *kind* in the metamodel. - ''' - return self.find_metaclass(kind).clazz - - def find_metaclass(self, kind): - ''' - Find a metaclass of some *kind* in the metamodel. - ''' - ukind = kind.upper() - if ukind in self.metaclasses: - return self.metaclasses[ukind] - else: - raise UnknownClassException(kind) - - def new(self, kind, *args, **kwargs): - ''' - Create and return a new instance in the metamodel of some *kind*. + elif isinstance(handle, Class): + handle = [handle] - Optionally, initial attribute values may be assigned to the new instance - by passing them as positional or keyword arguments. Positional arguments - are assigned in the order in which they appear in the metamodel schema. - ''' - metaclass = self.find_metaclass(kind) - return metaclass.new(*args, **kwargs) + elif not isinstance(handle, collections.Iterable): + raise MetaException("Unable to navigate across '%s'" % type(handle)) - def clone(self, instance): - ''' - Create a shallow clone of an *instance*. + self.handle = handle + self._kind = None - **Note:** the clone and the original instance **does not** have to be - part of the same metamodel. - ''' - clone = self.new(instance.__metaclass__.kind) - for name, _ in instance.__metaclass__.attributes: - value = getattr(instance, name) - setattr(clone, name, value) - - return clone - - def define_association(self, rel_id, source_kind, source_keys, source_many, - source_conditional, source_phrase, target_kind, - target_keys, target_many, target_conditional, - target_phrase): - ''' - Define and return an association between two classes. - ''' + def nav(self, kind, relid, phrase=''): + self.handle = NavChain._nav(self.handle, kind, relid, phrase) + return self + + @staticmethod + def _nav(handle, kind, rel_id, phrase): + kind = kind.upper() if isinstance(rel_id, int): rel_id = 'R%d' % rel_id + + for inst in iter(handle): + for result in inst.__metaclass__.navigate(inst, kind, rel_id, phrase): + yield result - source_metaclass = self.find_metaclass(source_kind) - target_metaclass = self.find_metaclass(target_kind) - key_map = dict(zip(source_keys, target_keys)) - - link1 = source_metaclass.add_link(target_metaclass, rel_id, key_map, - many=target_many, phrase=target_phrase, - conditional=target_conditional) - - link2 = target_metaclass.add_link(source_metaclass, rel_id, key_map, - many=source_many, phrase=source_phrase, - conditional=source_conditional, reverse=True) - - ass = Association(rel_id, link1, link2) - self.associations.append(ass) - - return ass - - def define_unique_identifier(self, kind, name, *named_attributes): - ''' - Define a unique identifier for some *kind* of class based on its *named attributes* - ''' - if not named_attributes: - return - - if isinstance(name, int): - name = 'I%d' % name - - metaclass = self.find_metaclass(kind) - metaclass.indices[name] = set(named_attributes) - - def select_many(self, kind, where_clause=None): + def __getattr__(self, kind): ''' - Query the metamodel for a set of instances of some *kind*. Optionally, - a conditional *where-clause* in the form of a function may be provided. - - Usage example: - - >>> m = xtuml.load_metamodel('db.sql') - >>> inst_set = m.select_many('My_Class', lambda sel: sel.number > 5) + The navigation chain specified a *kind*, e.g. + >>> chain.X ''' - metaclass = self.find_metaclass(kind) - return metaclass.select_many(where_clause) + self._kind = kind + return self - def select_any(self, kind, where_clause=None): - ''' - This method is deprecated. Use *select_one* instead. + def __getitem__(self, args): ''' - return self.select_one(kind, where_clause) - - def select_one(self, kind, where_clause=None): + The navigation chain specified a link, e.g. the rel_id and phrase, e.g. + >>> chain[100, 'phrase'] ''' - Query the model for a single instance of some *kind*. Optionally, a - conditional *where-clause* in the form of a function may be provided. + if not isinstance(args, tuple): + args = (args, '') - Usage example: + relid, phrase = args - >>> m = xtuml.load_metamodel('db.sql') - >>> inst = m.select_one('My_Class', lambda sel: sel.name == 'Test') + return self.nav(self._kind, relid, phrase) + + def __call__(self, where_clause=None): ''' - metaclass = self.find_metaclass(kind) - return metaclass.select_one(where_clause) + The navigation chain is invoked. Optionally, a conditional + *where-clause* in the form of a function may be provided, e.g - def is_consistent(self): - ''' - Check the model for integrity violations. + >>> chain(lambda selected: selected.Name == 'test') ''' - if not xtuml.check_association_integrity(self): - return False - - - return xtuml.check_uniqueness_constraint(self) + handle = self.handle or list() + return QuerySet(filter(where_clause, handle)) + +class NavOneChain(NavChain): + ''' + A navigation chain that yeilds an instance, or None. + ''' + def __call__(self, where_clause=None): + handle = self.handle or iter([]) + if not where_clause: + return next(handle, None) + + for inst in handle: + if where_clause(inst): + return inst + def navigate_one(instance): ''' @@ -649,7 +683,7 @@ def navigate_many(instance_or_set): The resulting query will return a set of instances. ''' - return NavManyChain(instance_or_set) + return NavChain(instance_or_set) def navigate_subtype(supertype, rel_id): @@ -674,6 +708,33 @@ def navigate_subtype(supertype, rel_id): return subtype +class WhereEqual(dict): + ''' + Helper class to create dictonary of values for queries using + python keyword arguments to *where_eq()* + ''' + def __call__(self, selected): + for name in self: + if getattr(selected, name) != self.get(name): + return False + + return True + + +def where_eq(**kwargs): + ''' + Return a where-clause which filters out instances based on named + keywords. + + Usage example: + + >>> from xtuml import where_eq as where + >>> m = xtuml.load_metamodel('db.sql') + >>> inst = m.select_any('My_Modeled_Class', where(My_Number=5)) + ''' + return WhereEqual(kwargs) + + def sort_reflexive(set_of_instances, rel_id, phrase): ''' Sort a *set of instances* in the order they appear across a conditional and @@ -681,7 +742,7 @@ def sort_reflexive(set_of_instances, rel_id, phrase): **not** associated to an instance across the given *phrase*. ''' if not isinstance(set_of_instances, QuerySet): - raise ModelException('The collection to sort must be a QuerySet') + raise MetaException('The collection to sort must be a QuerySet') if not set_of_instances.first: return QuerySet() @@ -704,7 +765,7 @@ def sort_reflexive(set_of_instances, rel_id, phrase): other_phrase = link.phrase break else: - raise UnknownAssociationException(metaclass.kind, rel_id, phrase) + raise UnknownLinkException(metaclass.kind, rel_id, phrase) first_filt = lambda sel: not navigate_one(sel).nav(metaclass.kind, rel_id, phrase)() @@ -758,8 +819,7 @@ def _find_link(inst1, inst2, rel_id, phrase): return inst1, inst2, other_link - raise UnknownAssociationException(metaclass1.kind, metaclass2.kind, - rel_id, phrase) + raise UnknownLinkException(metaclass1.kind, metaclass2.kind, rel_id, phrase) def _deferred_link_operation(inst, link, op): @@ -787,37 +847,6 @@ def _deferred_link_operation(inst, link, op): return l -def _is_null(instance, name): - ''' - Determine if an attribute of an *instance* with a specific *name* - is null. - ''' - value = getattr(instance, name) - if value: - return False - - elif value is None: - return True - - name = name.upper() - for attr_name, attr_ty in instance.__metaclass__.attributes: - if attr_name.upper() != name: - continue - - attr_ty = attr_ty.upper() - if attr_ty == 'UNIQUE_ID': - # UUID(int=0) is reserved for null - return value == 0 - - elif attr_ty == 'STRING': - # empty string is reserved for null - return len(value) == 0 - - else: - #null-values for integer, boolean and real are not supported - return False - - def relate(from_instance, to_instance, rel_id, phrase=''): ''' Relate *from_instance* to *to_instance* across *rel_id*. For refelxive @@ -839,7 +868,7 @@ def relate(from_instance, to_instance, rel_id, phrase=''): for from_name, to_name in link.key_map.items(): if _is_null(to_instance, to_name): - raise ModelException('undefined referential attribute %s' % to_name) + raise RelateException('undefined referential attribute %s' % to_name) from_value = getattr(from_instance, from_name) to_value = getattr(to_instance, to_name) @@ -848,7 +877,9 @@ def relate(from_instance, to_instance, rel_id, phrase=''): continue if not _is_null(from_instance, from_name): - raise ModelException('instance is already related') + raise RelateException('instance is already related' + ' (%s.%s=%s)' % (from_instance.__metaclass__.kind, + from_name, from_value)) updated = True setattr(from_instance, from_name, to_value) @@ -879,7 +910,7 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): updated = False for from_name in link.key_map: if _is_null(from_instance, from_name): - raise ModelException('instances not related') + raise UnelateException('instances are not related') updated = True setattr(from_instance, from_name, None) @@ -893,34 +924,176 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): def delete(instance): ''' - Delete an *instance* from its metamodel. + Delete an *instance* from its metaclass instance pool. ''' - if not isinstance(instance, BaseObject): - raise ModelException("not an xtuml instance") + if not isinstance(instance, Class): + raise DeleteException("the provided argument is not an xtuml instance") - instance.__metaclass__.delete(instance) + return instance.__metaclass__.delete(instance) -class WhereEqual(dict): +class MetaModel(object): + ''' + A metamodel contains metaclasses with associations between them. - def __call__(self, selected): - for name in self: - if getattr(selected, name) != self.get(name): - return False + **Note:** All identifiers, e.g. attributes, association ids, key letters + (the kind or name of a class), are case **insensitive**. + ''' + metaclasses = None + associations = None + id_generator = None + + def __init__(self, id_generator=None): + ''' + Create a new, empty metamodel. Optionally, specify an id generator + used to obtain unique identifiers. + ''' + if id_generator is None: + id_generator = xtuml.UUIDGenerator() + + self.metaclasses = dict() + self.associations = list() + self.id_generator = id_generator + + @property + def instances(self): + ''' + Obtain a sequence of all instances in the metamodel. + ''' + for metaclass in self.metaclasses.values(): + for inst in metaclass.instances: + yield inst + + def define_class(self, kind, attributes, doc=''): + ''' + Define a new class in the metamodel, and return its metaclass. + ''' + ukind = kind.upper() + if ukind in self.metaclasses: + raise MetaModelException('A class with the name %s is already defined' % kind) + + metaclass = MetaClass(kind, self) + for name, ty in attributes: + metaclass.append_attribute(name, ty) - return True + self.metaclasses[ukind] = metaclass + + return metaclass + def find_class(self, kind): + ''' + Find a class of some *kind* in the metamodel. + ''' + return self.find_metaclass(kind).clazz -def where_eq(**kwargs): - ''' - Return a where-clause which filters out instances based on named - keywords. + def find_metaclass(self, kind): + ''' + Find a metaclass of some *kind* in the metamodel. + ''' + ukind = kind.upper() + if ukind in self.metaclasses: + return self.metaclasses[ukind] + else: + raise UnknownClassException(kind) + + def new(self, kind, *args, **kwargs): + ''' + Create and return a new instance in the metamodel of some *kind*. + + Optionally, initial attribute values may be assigned to the new instance + by passing them as positional or keyword arguments. Positional arguments + are assigned in the order in which they appear in the metaclass. + ''' + metaclass = self.find_metaclass(kind) + return metaclass.new(*args, **kwargs) + + def clone(self, instance): + ''' + Create a shallow clone of an *instance*. + + **Note:** the clone and the original instance **does not** have to be + part of the same metaclass. + ''' + metaclass = self.find_metaclass(instance.__metaclass__.kind) + return metaclass.clone(instance) + + def define_association(self, rel_id, source_kind, source_keys, source_many, + source_conditional, source_phrase, target_kind, + target_keys, target_many, target_conditional, + target_phrase): + ''' + Define and return an association. + ''' + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + source_metaclass = self.find_metaclass(source_kind) + target_metaclass = self.find_metaclass(target_kind) + key_map = dict(zip(source_keys, target_keys)) + + link1 = source_metaclass.add_link(target_metaclass, rel_id, key_map, + many=target_many, phrase=target_phrase, + conditional=target_conditional) + + link2 = target_metaclass.add_link(source_metaclass, rel_id, key_map, + many=source_many, phrase=source_phrase, + conditional=source_conditional, reverse=True) + + ass = Association(rel_id, link1, link2) + self.associations.append(ass) + + return ass + + def define_unique_identifier(self, kind, name, *named_attributes): + ''' + Define a unique identifier for some *kind* of class based on its + *named attributes*. + ''' + if not named_attributes: + return + + if isinstance(name, int): + name = 'I%d' % name + + metaclass = self.find_metaclass(kind) + metaclass.indices[name] = set(named_attributes) + + def select_many(self, kind, where_clause=None): + ''' + Query the metamodel for a set of instances of some *kind*. Optionally, + a conditional *where-clause* in the form of a function may be provided. + + Usage example: + + >>> m = xtuml.load_metamodel('db.sql') + >>> inst_set = m.select_many('My_Class', lambda sel: sel.number > 5) + ''' + metaclass = self.find_metaclass(kind) + return metaclass.select_many(where_clause) - Usage example: + def select_one(self, kind, where_clause=None): + ''' + Query the metamodel for a single instance of some *kind*. Optionally, a + conditional *where-clause* in the form of a function may be provided. + + Usage example: + + >>> m = xtuml.load_metamodel('db.sql') + >>> inst = m.select_one('My_Class', lambda sel: sel.name == 'Test') + ''' + metaclass = self.find_metaclass(kind) + return metaclass.select_one(where_clause) - >>> from xtuml import where_eq as where - >>> m = xtuml.load_metamodel('db.sql') - >>> inst = m.select_any('My_Modeled_Class', where(My_Number=5)) - ''' - return WhereEqual(kwargs) + # Backwards compatabillity with older versions of pyxtuml + select_any = select_one + + def is_consistent(self): + ''' + Check the metamodel for integrity violations. + ''' + if not xtuml.check_association_integrity(self): + return False + + + return xtuml.check_uniqueness_constraint(self) diff --git a/xtuml/persist.py b/xtuml/persist.py index 29b401d..8080c03 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -238,3 +238,4 @@ def persist_database(metamodel, path): for inst in metamodel.instances: s = serialize_instance(inst) f.write(s) + From 3e095d7a23ccb2723c461170f474c92249edfff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 27 Jul 2016 13:31:39 +0200 Subject: [PATCH 054/216] xtuml: rename xtuml.model to xtuml.meta --- xtuml/__init__.py | 48 ++++++++++++++++++------------------- xtuml/{model.py => meta.py} | 0 2 files changed, 24 insertions(+), 24 deletions(-) rename xtuml/{model.py => meta.py} (100%) diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 2c4d02d..b68b13f 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -33,33 +33,33 @@ from .persist import serialize_value from .persist import serialize -from .model import Association -from .model import Link -from .model import ReversedLink +from xtuml.meta import Association +from xtuml.meta import Link +from xtuml.meta import ReversedLink -from .model import QuerySet -from .model import Class -from .model import BaseObject -from .model import MetaClass -from .model import MetaModel +from xtuml.meta import QuerySet +from xtuml.meta import Class +from xtuml.meta import BaseObject +from xtuml.meta import MetaClass +from xtuml.meta import MetaModel -from .model import MetaException -from .model import DeleteException -from .model import RelateException -from .model import UnelateException -from .model import MetaModelException -from .model import UnknownLinkException -from .model import UnknownClassException +from xtuml.meta import MetaException +from xtuml.meta import DeleteException +from xtuml.meta import RelateException +from xtuml.meta import UnelateException +from xtuml.meta import MetaModelException +from xtuml.meta import UnknownLinkException +from xtuml.meta import UnknownClassException -from .model import navigate_any -from .model import navigate_one -from .model import navigate_many -from .model import navigate_subtype -from .model import relate -from .model import unrelate -from .model import delete -from .model import where_eq -from .model import sort_reflexive +from xtuml.meta import navigate_any +from xtuml.meta import navigate_one +from xtuml.meta import navigate_many +from xtuml.meta import navigate_subtype +from xtuml.meta import relate +from xtuml.meta import unrelate +from xtuml.meta import delete +from xtuml.meta import where_eq +from xtuml.meta import sort_reflexive from .consistency_check import check_association_integrity from .consistency_check import check_uniqueness_constraint diff --git a/xtuml/model.py b/xtuml/meta.py similarity index 100% rename from xtuml/model.py rename to xtuml/meta.py From 6d61a36c4182362a137c756cc2d113b994300541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 27 Jul 2016 13:36:20 +0200 Subject: [PATCH 055/216] cosmetics --- xtuml/persist.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/persist.py b/xtuml/persist.py index 8080c03..af46806 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -159,7 +159,7 @@ def serialize(resource): if isinstance(resource, xtuml.MetaModel): return serialize_database(resource) - elif isinstance(resource, type) and issubclass(resource, xtuml.BaseObject): + elif isinstance(resource, type) and issubclass(resource, xtuml.Class): return serialize_class(resource) elif isinstance(resource, xtuml.Association): @@ -168,7 +168,7 @@ def serialize(resource): elif isinstance(resource, xtuml.Link): return serialize_link(resource) - elif isinstance(resource, xtuml.BaseObject): + elif isinstance(resource, xtuml.Class): return serialize_instance(resource) From d90ae3db215e56265c151022c92d789d5f275cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 27 Jul 2016 16:42:39 +0200 Subject: [PATCH 056/216] sourcegen: use navigate_subtype when walking ACT_SMT and V_VAL --- bridgepoint/sourcegen.py | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/bridgepoint/sourcegen.py b/bridgepoint/sourcegen.py index 4cd9626..821bfd9 100644 --- a/bridgepoint/sourcegen.py +++ b/bridgepoint/sourcegen.py @@ -6,6 +6,7 @@ from xtuml import navigate_one as one from xtuml import navigate_any as any from xtuml import navigate_many as many +from xtuml import navigate_subtype as subtype from xtuml.tools import Walker @@ -90,17 +91,7 @@ def accept_ACT_BLK(self, inst): self.buf_linebreak() def accept_ACT_SMT(self, inst): - children = ['ACT_FOR', 'ACT_WHL', 'ACT_IF', 'ACT_EL', 'ACT_E', - 'ACT_BRG', 'ACT_FNC', 'ACT_RET', 'ACT_TFM', 'ACT_AI', - 'ACT_DEL', 'ACT_CNV', 'ACT_CR', 'ACT_SEL', 'ACT_FIO', - 'ACT_FIW', 'ACT_URU', 'ACT_UNR', 'ACT_RU', 'ACT_REL', - 'ACT_CTL', 'ACT_BRK', 'ACT_CON', 'E_ESS', 'E_GPR', - 'ACT_IOP', 'ACT_SGN'] - - for key_letter in children: - child = one(inst).nav(key_letter, 603)() - self.accept(child) - + self.accept(subtype(inst, 603)) self.buf_linebreak(';') def accept_ACT_RET(self, inst): @@ -319,14 +310,7 @@ def accept_ACT_TFM(self, inst): self.buf(')') def accept_V_VAL(self, inst): - children = ['V_FNV', 'V_PVL', 'V_SLR', 'V_BRV', 'V_IRF', 'V_AVL', - 'V_LIN', 'V_LST', 'V_UNY', 'V_TRV', 'V_ISR', 'V_EDV', - 'V_TVL', 'V_LRL', 'V_LBO', 'V_BIN', 'V_LEN', 'V_MVL', - 'V_AER', 'V_ALV', 'V_MSV', 'V_SCV'] - - for key_letter in children: - child = one(inst).nav(key_letter, 801)() - self.accept(child) + self.accept(subtype(inst, 801)) def accept_V_TVL(self, inst): self.accept(one(inst).V_VAR[805]()) From 5780751cf141ef565ef346bb410f14b2be2629ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 2 Aug 2016 21:17:45 +0000 Subject: [PATCH 057/216] cosmetics --- xtuml/meta.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 1618136..14d290f 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -710,7 +710,7 @@ def navigate_subtype(supertype, rel_id): class WhereEqual(dict): ''' - Helper class to create dictonary of values for queries using + Helper class to create a dictonary of values for queries using python keyword arguments to *where_eq()* ''' def __call__(self, selected): @@ -723,7 +723,7 @@ def __call__(self, selected): def where_eq(**kwargs): ''' - Return a where-clause which filters out instances based on named + Return a where-clause that filters out instances based on named keywords. Usage example: @@ -788,7 +788,7 @@ def sequence_generator(): def _find_link(inst1, inst2, rel_id, phrase): ''' - Find links which correspond to the given arguments. + Find links that correspond to the given arguments. ''' metaclass1 = inst1.__metaclass__ metaclass2 = inst2.__metaclass__ @@ -824,8 +824,8 @@ def _find_link(inst1, inst2, rel_id, phrase): def _deferred_link_operation(inst, link, op): ''' - Generate list of deferred operations which needs to be invoked after an - update to identifying attributes on the association end point is made. + Generate a list of deferred operations that needs to be invoked after an + update is made to identifying attributes on the association *link*. ''' l = list() @@ -849,7 +849,7 @@ def _deferred_link_operation(inst, link, op): def relate(from_instance, to_instance, rel_id, phrase=''): ''' - Relate *from_instance* to *to_instance* across *rel_id*. For refelxive + Relate *from_instance* to *to_instance* across *rel_id*. For reflexive association, a *phrase* indicating the direction must also be provided. The two instances are related to each other by copying the identifying @@ -893,8 +893,8 @@ def relate(from_instance, to_instance, rel_id, phrase=''): def unrelate(from_instance, to_instance, rel_id, phrase=''): ''' - Unrelate *from_instance* from *to_instance* across *rel_id*. For refelxive - association, a *phrase* indicating the direction must also be provided. + Unrelate *from_instance* from *to_instance* across *rel_id*. For reflexive + associations, a *phrase* indicating the direction must also be provided. The two instances are unrelated from each other by reseting the identifying attributes on the FROM side of the association. Updated values which affect @@ -1022,7 +1022,8 @@ def define_association(self, rel_id, source_kind, source_keys, source_many, target_keys, target_many, target_conditional, target_phrase): ''' - Define and return an association. + Define and return an association from one kind of class (the source + kind) to some other kind of class (the target kind). ''' if isinstance(rel_id, int): rel_id = 'R%d' % rel_id @@ -1094,6 +1095,5 @@ def is_consistent(self): if not xtuml.check_association_integrity(self): return False - return xtuml.check_uniqueness_constraint(self) From 0e1ddb232bf8f39ac269b14d5de2c8f0eef04f4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 8 Aug 2016 15:23:40 +0000 Subject: [PATCH 058/216] setup: provide a user option that limit testing to a single test case or test method --- setup.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 18ecb77..5c99e9c 100755 --- a/setup.py +++ b/setup.py @@ -33,16 +33,21 @@ def run(self): class TestCommand(Command): description = "Execute unit tests" - user_options = [] + user_options = [('name=', None, 'Limit testing to a single test case or test method')] def initialize_options(self): - pass + self.name = None def finalize_options(self): - pass + if self.name and not self.name.startswith('tests.'): + self.name = 'tests.' + self.name def run(self): - suite = unittest.TestLoader().discover('tests') + if self.name: + suite = unittest.TestLoader().loadTestsFromName(self.name) + else: + suite = unittest.TestLoader().discover('tests') + runner = unittest.TextTestRunner(verbosity=2, buffer=True) exit_code = not runner.run(suite).wasSuccessful() sys.exit(exit_code) From bcfa77d1fedacd6ec1a4f5bd7508d95b82d3ca27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 8 Aug 2016 16:42:02 +0000 Subject: [PATCH 059/216] count number of concistency violations --- bridgepoint/consistency_check.py | 10 ++-- tests/test_xtuml/test_consistency.py | 71 +++++++++++++++++++++++----- xtuml/consistency_check.py | 32 ++++++------- xtuml/meta.py | 4 +- 4 files changed, 83 insertions(+), 34 deletions(-) diff --git a/bridgepoint/consistency_check.py b/bridgepoint/consistency_check.py index 3ebf64e..5ae155e 100644 --- a/bridgepoint/consistency_check.py +++ b/bridgepoint/consistency_check.py @@ -56,18 +56,18 @@ def main(): m = loader.build_metamodel() - error = False + error = 0 for rel_id in opts.rel_ids: - error |= xtuml.check_association_integrity(m, rel_id) + error += xtuml.check_association_integrity(m, rel_id) if not opts.rel_ids: - error |= xtuml.check_association_integrity(m) + error += xtuml.check_association_integrity(m) for kind in opts.kinds: - error |= xtuml.check_uniqueness_constraint(m, kind) + error += xtuml.check_uniqueness_constraint(m, kind) if not opts.kinds: - error |= xtuml.check_uniqueness_constraint(m) + error += xtuml.check_uniqueness_constraint(m) sys.exit(error) diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index 954c8a9..47a3b35 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -1,7 +1,11 @@ +import os import unittest import xtuml import bridgepoint +import xtuml.consistency_check + + class TestConcistency(unittest.TestCase): ''' Test suite for the module xtuml.consistency_check @@ -25,25 +29,25 @@ def test_association_integrity(self): s_brg = m.new('S_BRG', Name='My_Bridge_Operation') - self.assertFalse(xtuml.check_association_integrity(m, 22)) + self.assertEqual(1, xtuml.check_association_integrity(m, 22)) self.assertTrue(xtuml.relate(s_bparm, s_dt, 22)) - self.assertTrue(xtuml.check_association_integrity(m, 22)) + self.assertEqual(0, xtuml.check_association_integrity(m, 22)) - self.assertFalse(xtuml.check_association_integrity(m, 21)) + self.assertEqual(1, xtuml.check_association_integrity(m, 21)) self.assertTrue(xtuml.relate(s_bparm, s_brg, 21)) - self.assertTrue(xtuml.check_association_integrity(m, 21)) + self.assertEqual(0, xtuml.check_association_integrity(m, 21)) - self.assertFalse(xtuml.check_association_integrity(m, 20)) + self.assertEqual(1, xtuml.check_association_integrity(m, 20)) self.assertTrue(xtuml.relate(s_brg, s_dt, 20)) - self.assertTrue(xtuml.check_association_integrity(m, 20)) + self.assertEqual(0, xtuml.check_association_integrity(m, 20)) - self.assertFalse(xtuml.check_association_integrity(m, 8001)) + self.assertEqual(1, xtuml.check_association_integrity(m, 8001)) self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) - self.assertTrue(xtuml.check_association_integrity(m, 8001)) + self.assertEqual(0, xtuml.check_association_integrity(m, 8001)) - self.assertFalse(xtuml.check_association_integrity(m, 19)) + self.assertEqual(1, xtuml.check_association_integrity(m, 19)) self.assertTrue(xtuml.relate(s_brg, s_ee, 19)) - self.assertTrue(xtuml.check_association_integrity(m, 19)) + self.assertEqual(0, xtuml.check_association_integrity(m, 19)) # the old, unused association R8 is still present in ooaofooa, and thus # consistency check fails on S_EE. @@ -56,8 +60,53 @@ def test_uniqueness_constraint(self): s_dt = m.select_one('S_DT', xtuml.where_eq(Name='string')) m.clone(s_dt) + # S_DT has two unique identifiers (I1 and I2). two instances + # produce one error each, hence 4 errors self.assertFalse(m.is_consistent()) - self.assertTrue(xtuml.check_uniqueness_constraint(m, 'PE_PE')) + self.assertEqual(4, xtuml.check_uniqueness_constraint(m, 'S_DT')) xtuml.delete(s_dt) self.assertTrue(m.is_consistent()) + + + + +class TestConcistencyCLI(unittest.TestCase): + ''' + Test suite for the xtuml.consistency_check + command line interface. + ''' + def main(self, *args): + try: + xtuml.consistency_check.main(list(args)) + except SystemExit as e: + return e.code + + return 0 + + def test_no_args(self): + rc = self.main() + self.assertEqual(1, rc) + + def test_ooaofooa_globals(self): + path = (os.path.dirname(__file__) + os.sep + os.pardir + os.sep + + 'resources' + os.sep) + + rc = self.main(path + 'ooaofooa_schema.sql', path + 'Globals.xtuml') + self.assertEqual(0, rc) + + def test_limit_searchspace(self): + path = (os.path.dirname(__file__) + os.sep + os.pardir + os.sep + + 'resources' + os.sep) + + rc = self.main(path + 'ooaofooa_schema.sql', path + 'Globals.xtuml', + path + 'Globals.xtuml') + + self.assertNotEqual(0, rc) + + rc = self.main(path + 'ooaofooa_schema.sql', path + 'Globals.xtuml', + path + 'Globals.xtuml', '-k', 'O_OBJ', '-r', '0') + + self.assertEqual(0, rc) + + \ No newline at end of file diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 014621b..afd926b 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -76,7 +76,7 @@ def check_uniqueness_constraint(m, kind=None): else: metaclasses = [m.find_metaclass(kind)] - res = True + res = 0 for metaclass in metaclasses: for inst in metaclass.select_many(): @@ -88,7 +88,7 @@ def check_uniqueness_constraint(m, kind=None): isnull = value is None isnull |= (ty == 'UNIQUE_ID' and not value) if isnull: - res = False + res += 1 logger.warning('%s.%s is part of an identifier and is null' % (metaclass.kind, name)) @@ -101,7 +101,7 @@ def check_uniqueness_constraint(m, kind=None): where_clause = xtuml.where_eq(**kwargs) s = metaclass.select_many(where_clause) if len(s) != 1: - res = False + res += 1 id_string = pretty_unique_identifier(inst, identifier) logger.warning('uniqueness constraint violation in %s, %s' % (metaclass.kind, id_string)) @@ -113,13 +113,13 @@ def check_link_integrity(m, link): ''' Check the model for integrity violations on an association in a particular direction. ''' - res = True + res = 0 for inst in link.from_metaclass.select_many(): q_set = list(link.navigate(inst)) if(len(q_set) < 1 and not link.conditional) or ( (len(q_set) > 1 and not link.many)): - res = False + res += 1 logger.warning('integrity violation in ' '%s --(%s)--> %s' % (pretty_from_link(inst, link), link.rel_id, @@ -136,16 +136,16 @@ def check_association_integrity(m, rel_id=None): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id - res = True + res = 0 for ass in m.associations: if rel_id in [ass.rel_id, None]: - res &= check_link_integrity(m, ass.link) - res &= check_link_integrity(m, ass.reversed_link) + res += check_link_integrity(m, ass.link) + res += check_link_integrity(m, ass.reversed_link) return res -def main(): +def main(args): parser = optparse.OptionParser(usage="%prog [options] [another_sql_file...].", version=xtuml.version.complete_string, formatter=optparse.TitledHelpFormatter()) @@ -163,7 +163,7 @@ def main(): parser.add_option("-v", "--verbosity", dest='verbosity', action="count", help="increase debug logging level", default=1) - (opts, args) = parser.parse_args() + (opts, args) = parser.parse_args(args) if len(args) == 0: parser.print_help() sys.exit(1) @@ -182,22 +182,22 @@ def main(): m = loader.build_metamodel() - error = False + error = 0 for rel_id in opts.rel_ids: - error |= xtuml.check_association_integrity(m, rel_id) + error += xtuml.check_association_integrity(m, rel_id) if not opts.rel_ids: - error |= xtuml.check_association_integrity(m) + error += xtuml.check_association_integrity(m) for kind in opts.kinds: - error |= xtuml.check_uniqueness_constraint(m, kind) + error += xtuml.check_uniqueness_constraint(m, kind) if not opts.kinds: - error |= xtuml.check_uniqueness_constraint(m) + error += xtuml.check_uniqueness_constraint(m) sys.exit(error) if __name__ == '__main__': - main() + main(sys.argv[1:]) diff --git a/xtuml/meta.py b/xtuml/meta.py index 14d290f..007a968 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -1092,8 +1092,8 @@ def is_consistent(self): ''' Check the metamodel for integrity violations. ''' - if not xtuml.check_association_integrity(self): + if xtuml.check_association_integrity(self): return False - return xtuml.check_uniqueness_constraint(self) + return xtuml.check_uniqueness_constraint(self) == 0 From 69fab39ec9b0fe93e7e24ca34b8c5f4385273262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 8 Aug 2016 17:17:45 +0000 Subject: [PATCH 060/216] test: cosmetics --- tests/test_xtuml/test_consistency.py | 4 +--- xtuml/consistency_check.py | 5 +++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index 47a3b35..a0828b4 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -78,11 +78,9 @@ class TestConcistencyCLI(unittest.TestCase): ''' def main(self, *args): try: - xtuml.consistency_check.main(list(args)) + return xtuml.consistency_check.main(list(args)) except SystemExit as e: return e.code - - return 0 def test_no_args(self): rc = self.main() diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index afd926b..db22189 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -195,9 +195,10 @@ def main(args): if not opts.kinds: error += xtuml.check_uniqueness_constraint(m) - sys.exit(error) + return error if __name__ == '__main__': - main(sys.argv[1:]) + num_errors = main(sys.argv[1:]) + sys.exit(num_errors > 0) From ffeda7056feb22f5490b05047deee2f246b56aa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 8 Aug 2016 17:18:45 +0000 Subject: [PATCH 061/216] add test case for bridgepoint.consistency_check --- bridgepoint/consistency_check.py | 12 +++--- tests/test_bridgepoint/test_consistency.py | 43 ++++++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 tests/test_bridgepoint/test_consistency.py diff --git a/bridgepoint/consistency_check.py b/bridgepoint/consistency_check.py index 5ae155e..e75c80e 100644 --- a/bridgepoint/consistency_check.py +++ b/bridgepoint/consistency_check.py @@ -15,7 +15,7 @@ logger = logging.getLogger('consistency_check') -def main(): +def main(args): parser = optparse.OptionParser(usage="%prog [options] [another_model_path...]", version=xtuml.version.complete_string, formatter=optparse.TitledHelpFormatter()) @@ -37,7 +37,7 @@ def main(): parser.add_option("-v", "--verbosity", dest='verbosity', action="count", help="increase debug logging level", default=1) - (opts, args) = parser.parse_args() + (opts, args) = parser.parse_args(args) if len(args) == 0: parser.print_help() sys.exit(1) @@ -69,9 +69,9 @@ def main(): if not opts.kinds: error += xtuml.check_uniqueness_constraint(m) - sys.exit(error) + return error - -if __name__ == '__main__': - main() +if __name__ == '__main__': + num_errors = main(sys.argv[1:]) + sys.exit(num_errors > 0) diff --git a/tests/test_bridgepoint/test_consistency.py b/tests/test_bridgepoint/test_consistency.py new file mode 100644 index 0000000..372c43c --- /dev/null +++ b/tests/test_bridgepoint/test_consistency.py @@ -0,0 +1,43 @@ +import os +import unittest +import xtuml +import bridgepoint + +import bridgepoint.consistency_check + + +class TestConcistencyCLI(unittest.TestCase): + ''' + Test suite for the bridgepoint.consistency_check + command line interface. + ''' + def main(self, *args): + try: + return bridgepoint.consistency_check.main(list(args)) + except SystemExit as e: + return e.code + + def test_no_args(self): + rc = self.main() + self.assertEqual(1, rc) + + def test_auto_include_globals(self): + path = (os.path.dirname(__file__) + os.sep + os.pardir + os.sep + + 'resources' + os.sep + 'Globals.xtuml') + + rc = self.main(path) + self.assertEqual(0, rc) + + rc = self.main(path, '-g') + self.assertNotEqual(0, rc) + + def test_limit_searchspace(self): + path = (os.path.dirname(__file__) + os.sep + os.pardir + os.sep + + 'resources' + os.sep + 'Globals.xtuml') + + rc = self.main(path, '-g') + self.assertNotEqual(0, rc) + + rc = self.main(path, '-g', '-k', 'O_OBJ', '-r', '0') + self.assertEqual(0, rc) + From df2f82bcedc803666d3acf562836bbcc106f79af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 19:18:51 +0000 Subject: [PATCH 062/216] rename UnelateException to UnrelateException --- xtuml/__init__.py | 2 +- xtuml/meta.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xtuml/__init__.py b/xtuml/__init__.py index b68b13f..eadfc7a 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -46,7 +46,7 @@ from xtuml.meta import MetaException from xtuml.meta import DeleteException from xtuml.meta import RelateException -from xtuml.meta import UnelateException +from xtuml.meta import UnrelateException from xtuml.meta import MetaModelException from xtuml.meta import UnknownLinkException from xtuml.meta import UnknownClassException diff --git a/xtuml/meta.py b/xtuml/meta.py index 007a968..a57d6ed 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -40,7 +40,7 @@ class RelateException(MetaException): ''' -class UnelateException(MetaException): +class UnrelateException(MetaException): ''' An exception that may be thrown during unrelate operations. ''' @@ -910,7 +910,7 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): updated = False for from_name in link.key_map: if _is_null(from_instance, from_name): - raise UnelateException('instances are not related') + raise UnrelateException('instances are not related') updated = True setattr(from_instance, from_name, None) From b59e2e49fe8df5d2874d887e37c4d5823445060e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 19:20:24 +0000 Subject: [PATCH 063/216] verify behaviour of xtuml.unrelate upon some illegal input --- tests/test_xtuml/test_relate.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index fed10af..b93cdd7 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -80,7 +80,18 @@ def test_unrelate(self): self.assertTrue(xtuml.unrelate(inst1, inst2, 661, 'precedes')) self.assertIsNone(xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) self.assertIsNone(xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) - + + def test_unrelate_none(self): + inst = self.m.new('ACT_SMT') + self.assertFalse(xtuml.relate(None, inst, 602)) + self.assertFalse(xtuml.relate(inst, None, 602)) + + def test_unrelate_when_not_related(self): + act_smt = self.m.new('ACT_SMT') + act_blk = self.m.new('ACT_BLK') + + self.assertRaises(xtuml.UnrelateException, xtuml.unrelate, act_smt, act_blk, 602) + def test_relate_in_wrong_order(self): s_ee = self.m.new('S_EE') pe_pe = self.m.new('PE_PE') From 8241d18986b25f02c119738219ee769fa83fda92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 19:41:16 +0000 Subject: [PATCH 064/216] test relate when already related --- tests/test_xtuml/test_relate.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index b93cdd7..400513e 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -23,6 +23,14 @@ def test_relate(self): self.assertTrue(xtuml.relate(s_dt, s_edt, 17)) self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) + def test_relate_when_already_related(self): + act_smt = self.m.new('ACT_SMT') + act_blk1 = self.m.new('ACT_BLK') + act_blk2 = self.m.new('ACT_BLK') + + self.assertTrue(xtuml.relate(act_smt, act_blk1, 602)) + self.assertRaises(xtuml.RelateException, xtuml.relate, act_smt, act_blk2, 602) + def test_relate_reflexive_one_to_other(self): inst1 = self.m.new('ACT_SMT') inst2 = self.m.new('ACT_SMT') From 789c514bd214c4436efa8eb00d2e0a1a9fbf5a78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 19:48:59 +0000 Subject: [PATCH 065/216] throw UnknownLinkException properly when sort_reflexive is unable to find a link --- xtuml/meta.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index a57d6ed..dd84a01 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -765,9 +765,8 @@ def sort_reflexive(set_of_instances, rel_id, phrase): other_phrase = link.phrase break else: - raise UnknownLinkException(metaclass.kind, rel_id, phrase) + raise UnknownLinkException(metaclass.kind, metaclass.kind, rel_id, phrase) - first_filt = lambda sel: not navigate_one(sel).nav(metaclass.kind, rel_id, phrase)() first_instances = list(filter(first_filt, set_of_instances)) if not first_instances: From 5e0f4e1c97ec117efb51fab618d595177b8b6dfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 19:49:40 +0000 Subject: [PATCH 066/216] test sort_reflexive with unknown link --- tests/test_xtuml/test_sort.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/test_xtuml/test_sort.py b/tests/test_xtuml/test_sort.py index 2fcb96c..9186174 100644 --- a/tests/test_xtuml/test_sort.py +++ b/tests/test_xtuml/test_sort.py @@ -72,8 +72,16 @@ def test_recursion(self): for inst1, inst2 in zip(inst_set, [p1, p2, p3, p4]): self.assertEqual(inst1, inst2) - + def test_unknown_link(self): + p1 = self.m.new('S_BPARM', Name='p1') + p2 = self.m.new('S_BPARM', Name='p2') + self.assertTrue(xtuml.relate(p1, p2, 55, 'precedes')) + + inst_set = self.m.select_many('S_BPARM') + self.assertRaises(xtuml.UnknownLinkException, + xtuml.sort_reflexive, inst_set, 5, 'precedes') + if __name__ == "__main__": unittest.main() From 0f02e1590a7188f1fb190464744fd8f31dbdd101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 19:53:35 +0000 Subject: [PATCH 067/216] test navigate_subtype with supertype=None --- tests/test_xtuml/test_navigate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_xtuml/test_navigate.py b/tests/test_xtuml/test_navigate.py index 6e07e01..6636d2a 100644 --- a/tests/test_xtuml/test_navigate.py +++ b/tests/test_xtuml/test_navigate.py @@ -34,6 +34,7 @@ def test_navigate_suptype(self): def test_navigate_none(self): self.assertIsNone(xtuml.navigate_one(None)()) + self.assertIsNone(xtuml.navigate_subtype(None, 0)) self.assertEqual(len(xtuml.navigate_many(None)()), 0) def test_navigate_invalid_handle(self): From 50838d74f81646c831a2d5e8a2edcdf64163983b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 20:45:20 +0000 Subject: [PATCH 068/216] cosmetics --- xtuml/meta.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index dd84a01..1398db2 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -193,10 +193,10 @@ def navigate(self, instance): def __repr__(self): if self.phrase: - return "%s->%s[%s, %s]" % (self.kind, self.to_metaclass.kind, + return "%s->%s[%s, %s]" % (self.from_metaclass.kind, self.kind, repr(self.rel_id), repr(self.phrase)) else: - return "%s->%s[%s]" % (self.kind, self.to_metaclass.kind, + return "%s->%s[%s]" % (self.from_metaclass.kind, self.kind, repr(self.rel_id)) From a1ed7c00887321758907421acf10feaade6105c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 20:46:06 +0000 Subject: [PATCH 069/216] fix typo in unrelate testcase --- tests/test_xtuml/test_relate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index 400513e..dc0b98b 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -91,8 +91,8 @@ def test_unrelate(self): def test_unrelate_none(self): inst = self.m.new('ACT_SMT') - self.assertFalse(xtuml.relate(None, inst, 602)) - self.assertFalse(xtuml.relate(inst, None, 602)) + self.assertFalse(xtuml.unrelate(None, inst, 602)) + self.assertFalse(xtuml.unrelate(inst, None, 602)) def test_unrelate_when_not_related(self): act_smt = self.m.new('ACT_SMT') From 2db061ead66a932503a95314a40ccb594dd0841a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 Aug 2016 20:47:02 +0000 Subject: [PATCH 070/216] test for unique identifier with null values --- tests/test_xtuml/test_consistency.py | 6 ++++++ xtuml/consistency_check.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index a0828b4..9e07f1d 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -53,6 +53,12 @@ def test_association_integrity(self): # consistency check fails on S_EE. #self.assertTrue(m.is_consistent()) + def test_unique_identifier_with_null(self): + m = self.metamodel + act_blk = m.new('ACT_BLK') + act_blk.Block_ID = None + self.assertEqual(1, xtuml.check_uniqueness_constraint(m, 'ACT_BLK')) + def test_uniqueness_constraint(self): m = self.metamodel self.assertTrue(m.is_consistent()) diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index db22189..8c3df47 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -100,7 +100,7 @@ def check_uniqueness_constraint(m, kind=None): where_clause = xtuml.where_eq(**kwargs) s = metaclass.select_many(where_clause) - if len(s) != 1: + if len(s) > 1: res += 1 id_string = pretty_unique_identifier(inst, identifier) logger.warning('uniqueness constraint violation in %s, %s' From fb9646de5704689d00f2a29ef895a3d5bae5ecec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 31 Jul 2016 04:20:52 +0200 Subject: [PATCH 071/216] cosmetics (case sensitivity fixes) --- bridgepoint/gen_xsd_schema.py | 8 ++--- bridgepoint/ooaofooa.py | 4 +-- bridgepoint/sourcegen.py | 2 +- tests/test_bridgepoint/test_assign.py | 24 ++++++------- tests/test_bridgepoint/test_binop.py | 52 +++++++++++++-------------- tests/test_bridgepoint/test_const.py | 44 +++++++++++------------ 6 files changed, 67 insertions(+), 67 deletions(-) diff --git a/bridgepoint/gen_xsd_schema.py b/bridgepoint/gen_xsd_schema.py index 7e22c40..432270b 100644 --- a/bridgepoint/gen_xsd_schema.py +++ b/bridgepoint/gen_xsd_schema.py @@ -30,16 +30,16 @@ def get_type_name(s_dt): get the xsd name of a S_DT ''' s_cdt = nav_one(s_dt).S_CDT[17]() - if s_cdt and s_cdt.core_typ in range(1, 6): - return s_dt.name + if s_cdt and s_cdt.Core_Typ in range(1, 6): + return s_dt.Name s_edt = nav_one(s_dt).S_EDT[17]() if s_edt: - return s_dt.name + return s_dt.Name s_udt = nav_one(s_dt).S_UDT[17]() if s_udt: - return s_dt.name + return s_dt.Name # s_sdt = nav_one(s_dt).S_SDT[17]() # if s_sdt: diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 2e5d6de..8e364c4 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3757,8 +3757,8 @@ def get_data_type_name(s_dt): Convert a BridgePoint data type to a pyxtuml meta model type. ''' s_cdt = one(s_dt).S_CDT[17]() - if s_cdt and s_cdt.core_typ in range(1, 6): - return s_dt.name + if s_cdt and s_cdt.Core_Typ in range(1, 6): + return s_dt.Name if one(s_dt).S_EDT[17](): return 'INTEGER' diff --git a/bridgepoint/sourcegen.py b/bridgepoint/sourcegen.py index 821bfd9..064ade5 100644 --- a/bridgepoint/sourcegen.py +++ b/bridgepoint/sourcegen.py @@ -228,7 +228,7 @@ def accept_ACT_WHL(self, inst): self.buf('end while') def accept_ACT_IF(self, inst): - by_position = lambda inst: (one(inst).ACT_SMT[603]().lineNumber, + by_position = lambda inst: (one(inst).ACT_SMT[603]().LineNumber, one(inst).ACT_SMT[603]().StartPosition) self.buf('if ') diff --git a/tests/test_bridgepoint/test_assign.py b/tests/test_bridgepoint/test_assign.py index db7e513..91cd5cb 100644 --- a/tests/test_bridgepoint/test_assign.py +++ b/tests/test_bridgepoint/test_assign.py @@ -22,8 +22,8 @@ def test_positive_integer(self): self.assertFalse(v_val.isLValue) self.assertFalse(v_val.isImplicit) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 12) - self.assertEqual(v_val.endPosition, 12) + self.assertEqual(v_val.StartPosition, 12) + self.assertEqual(v_val.EndPosition, 12) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -32,8 +32,8 @@ def test_positive_integer(self): self.assertTrue(v_val.isLValue) self.assertTrue(v_val.isImplicit) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 8) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 8) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -64,8 +64,8 @@ def test_positive_real(self): self.assertFalse(v_val.isLValue) self.assertFalse(v_val.isImplicit) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 12) - self.assertEqual(v_val.endPosition, 14) + self.assertEqual(v_val.StartPosition, 12) + self.assertEqual(v_val.EndPosition, 14) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'real') @@ -74,8 +74,8 @@ def test_positive_real(self): self.assertTrue(v_val.isLValue) self.assertTrue(v_val.isImplicit) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 8) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 8) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'real') @@ -106,8 +106,8 @@ def test_string(self): self.assertFalse(v_val.isLValue) self.assertFalse(v_val.isImplicit) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 12) - self.assertEqual(v_val.endPosition, 18) + self.assertEqual(v_val.StartPosition, 12) + self.assertEqual(v_val.EndPosition, 18) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'string') @@ -116,8 +116,8 @@ def test_string(self): self.assertTrue(v_val.isLValue) self.assertTrue(v_val.isImplicit) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 8) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 8) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'string') diff --git a/tests/test_bridgepoint/test_binop.py b/tests/test_bridgepoint/test_binop.py index 393612e..9231df2 100644 --- a/tests/test_bridgepoint/test_binop.py +++ b/tests/test_bridgepoint/test_binop.py @@ -22,8 +22,8 @@ def test_plus(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 12) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 12) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -50,8 +50,8 @@ def test_grouped_binop(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 14) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 14) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -78,8 +78,8 @@ def test_minus(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 12) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 12) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -106,8 +106,8 @@ def test_unary_minus(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 13) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 13) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -134,8 +134,8 @@ def test_real_mult(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 16) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 16) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'real') @@ -162,8 +162,8 @@ def test_integer_div(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 12) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 12) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -190,8 +190,8 @@ def test_less_true(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 12) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 12) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'boolean') @@ -218,8 +218,8 @@ def test_less_eq_true(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 13) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 13) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'boolean') @@ -246,8 +246,8 @@ def test_chained_binop_1(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 18) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 18) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -274,8 +274,8 @@ def test_chained_binop_2(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 18) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 18) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -302,8 +302,8 @@ def test_chained_unary_op(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 19) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 19) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'boolean') @@ -337,8 +337,8 @@ def test_and_binop_true(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 20) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 20) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'boolean') @@ -365,8 +365,8 @@ def test_or_binop_true(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 20) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 20) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'boolean') diff --git a/tests/test_bridgepoint/test_const.py b/tests/test_bridgepoint/test_const.py index 2fa61e9..3ea4776 100644 --- a/tests/test_bridgepoint/test_const.py +++ b/tests/test_bridgepoint/test_const.py @@ -22,8 +22,8 @@ def test_positive_integer(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 8) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 8) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -44,8 +44,8 @@ def test_negative_integer(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 9) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 9) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -57,8 +57,8 @@ def test_negative_integer(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 9) - self.assertEqual(v_val.endPosition, 9) + self.assertEqual(v_val.StartPosition, 9) + self.assertEqual(v_val.EndPosition, 9) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'integer') @@ -79,8 +79,8 @@ def test_positive_real(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 10) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 10) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'real') @@ -101,8 +101,8 @@ def test_negative_real(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 11) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 11) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'real') @@ -114,8 +114,8 @@ def test_negative_real(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 9) - self.assertEqual(v_val.endPosition, 11) + self.assertEqual(v_val.StartPosition, 9) + self.assertEqual(v_val.EndPosition, 11) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'real') @@ -136,8 +136,8 @@ def test_string(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 14) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 14) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'string') @@ -158,8 +158,8 @@ def test_empty_string(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 9) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 9) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'string') @@ -180,8 +180,8 @@ def test_true(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 11) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 11) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'boolean') @@ -202,8 +202,8 @@ def test_false_1(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 12) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 12) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'boolean') @@ -224,8 +224,8 @@ def test_false_2(self): self.assertEqual(v_val.isLValue, False) self.assertEqual(v_val.isImplicit, False) self.assertEqual(v_val.LineNumber, 1) - self.assertEqual(v_val.startPosition, 8) - self.assertEqual(v_val.endPosition, 12) + self.assertEqual(v_val.StartPosition, 8) + self.assertEqual(v_val.EndPosition, 12) s_dt = one(v_val).S_DT[820]() self.assertEqual(s_dt.Name, 'boolean') From a577b646d5976fb7a105a02eca9b4d4b5ca87379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 9 Aug 2016 14:22:44 +0200 Subject: [PATCH 072/216] cosmetics --- xtuml/meta.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 1398db2..b7d2946 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -287,9 +287,6 @@ class Class(object): **Note**: Accesses to attributes, e.g. getattr/setattr, on these objects are case insensitive. ''' - def __init__(self): - self.__metaclass__.cache.clear() - def __add__(self, other): assert isinstance(other, Class) return QuerySet([self, other]) @@ -408,7 +405,6 @@ def append_attribute(self, name, type_name): ''' attr = (name, type_name) self.attributes.append(attr) - setattr(self.clazz, name, None) def insert_attribute(self, index, name, type_name): ''' @@ -417,7 +413,6 @@ def insert_attribute(self, index, name, type_name): ''' attr = (name, type_name) self.attributes.insert(index, attr) - setattr(self.clazz, name, None) def delete_attribute(self, name): ''' @@ -458,6 +453,7 @@ def new(self, *args, **kwargs): ''' Create and return a new instance. ''' + self.cache.clear() inst = self.clazz() # set all attributes with an initial default value From 0961e3ca0ade199bc1326ae0df21ebf82efce6bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 9 Aug 2016 17:11:13 +0200 Subject: [PATCH 073/216] cosmetics --- xtuml/meta.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index b7d2946..bb05e6c 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -217,14 +217,14 @@ class Query(object): A *Query* retrive instances from a metaclass by matching instance attributes against a dictonary of values provided upon initialisation. ''' - metaclass = None + storage = None result = None evaluation = None - def __init__(self, metaclass, kwargs): + def __init__(self, storage, kwargs): self.result = collections.deque() self.items = collections.deque(kwargs.items()) - self.metaclass = metaclass + self.storage = storage self.evaluation = self.evaluate() def evaluate(self): @@ -234,7 +234,7 @@ def evaluate(self): **Note**: if the instance population is modified during evaluation, an exception is thrown. ''' - for inst in iter(self.metaclass.instances): + for inst in iter(self.storage): for name, value in iter(self.items): if getattr(inst, name) != value or _is_null(inst, name): break @@ -337,7 +337,7 @@ class MetaClass(object): links = None indices = None clazz = None - instances = None + storage = None cache = None def __init__(self, kind, metamodel=None): @@ -348,7 +348,7 @@ def __init__(self, kind, metamodel=None): self.identifying_attributes = set() self.indices = dict() self.links = dict() - self.instances = list() + self.storage = list() self.cache = dict() self.clazz = type(kind, (Class,), dict(__metaclass__=self)) @@ -473,7 +473,7 @@ def new(self, *args, **kwargs): for name, value in kwargs.items(): setattr(inst, name, value) - self.instances.append(inst) + self.storage.append(inst) return inst @@ -496,8 +496,8 @@ def delete(self, instance): Delete an *instance* from the instance pool. If the *instance* is not part of the metaclass, a *MetaException* is thrown. ''' - if instance in self.instances: - self.instances.remove(instance) + if instance in self.storage: + self.storage.remove(instance) self.cache.clear() else: raise DeleteException("Instance not found in the instance pool") @@ -510,7 +510,7 @@ def select_one(self, where_clause=None): if isinstance(where_clause, dict): s = self.query(where_clause) else: - s = iter(filter(where_clause, self.instances)) + s = iter(filter(where_clause, self.storage)) return next(s, None) @@ -522,7 +522,7 @@ def select_many(self, where_clause=None): if isinstance(where_clause, dict): s = self.query(where_clause) else: - s = filter(where_clause, self.instances) + s = filter(where_clause, self.storage) return QuerySet(s) @@ -545,7 +545,7 @@ def query(self, dictonary_of_values): ''' index = frozenset(list(dictonary_of_values.items())) if index not in self.cache: - self.cache[index] = Query(self, dictonary_of_values) + self.cache[index] = Query(self.storage, dictonary_of_values) return self.cache[index].execute() @@ -956,7 +956,7 @@ def instances(self): Obtain a sequence of all instances in the metamodel. ''' for metaclass in self.metaclasses.values(): - for inst in metaclass.instances: + for inst in metaclass.storage: yield inst def define_class(self, kind, attributes, doc=''): From 027d90484c1723eb21643da9ddb39d24e8aebb34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 16 Aug 2016 19:07:48 +0000 Subject: [PATCH 074/216] cosmetics --- xtuml/consistency_check.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 8c3df47..855607d 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -40,7 +40,7 @@ def pretty_from_link(inst, link): prefix = '' metaclass = inst.__metaclass__ for name, ty in metaclass.attributes: - if name in metaclass.identifying_attributes: + if name in link.key_map: value = getattr(inst, name) value = xtuml.serialize_value(value, ty) values += '%s%s=%s' % (prefix, name, value) From ace34d8aca726ea256bdf2d773148b30221515c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 16 Aug 2016 19:50:13 +0000 Subject: [PATCH 075/216] cosmetics --- docs/api-reference.rst | 18 +++++++++++------- xtuml/consistency_check.py | 1 + xtuml/load.py | 3 +++ xtuml/meta.py | 2 +- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/docs/api-reference.rst b/docs/api-reference.rst index 78a071f..715b655 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -13,22 +13,18 @@ Loading Metamodels .. autoclass:: xtuml.ModelLoader :members: build_metamodel, file_input, filename_input, input, populate -.. autoclass:: xtuml.UUIDGenerator - -.. autoclass:: xtuml.IntegerGenerator - Metamodel Operations ^^^^^^^^^^^^^^^^^^^^ .. autoclass:: xtuml.MetaModel :members: clone, new, find_class, select_one, select_many -.. autofunction:: xtuml.delete .. autofunction:: xtuml.navigate_one .. autofunction:: xtuml.navigate_any .. autofunction:: xtuml.navigate_many .. autofunction:: xtuml.navigate_subtype .. autofunction:: xtuml.relate .. autofunction:: xtuml.unrelate +.. autofunction:: xtuml.delete .. autofunction:: xtuml.where_eq .. autofunction:: xtuml.sort_reflexive @@ -49,6 +45,10 @@ Persistance Tools ^^^^^ +.. autoclass:: xtuml.UUIDGenerator + +.. autoclass:: xtuml.IntegerGenerator + .. autoclass:: xtuml.Walker :members: accept, default_accept @@ -63,9 +63,13 @@ Tools Exceptions ^^^^^^^^^^ .. autoexception:: xtuml.ParsingException -.. autoexception:: xtuml.ModelException +.. autoexception:: xtuml.MetaException +.. autoexception:: xtuml.DeleteException +.. autoexception:: xtuml.RelateException +.. autoexception:: xtuml.UnrelateException +.. autoexception:: xtuml.MetaModelException +.. autoexception:: xtuml.UnknownLinkException .. autoexception:: xtuml.UnknownClassException -.. autoexception:: xtuml.UnknownAssociationException bridgepoint diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 855607d..731dcb2 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -39,6 +39,7 @@ def pretty_from_link(inst, link): values = '' prefix = '' metaclass = inst.__metaclass__ + for name, ty in metaclass.attributes: if name in link.key_map: value = getattr(inst, name) diff --git a/xtuml/load.py b/xtuml/load.py index 2825614..ef73e7d 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -77,6 +77,9 @@ def deserialize_value(ty, value): class ParsingException(Exception): + ''' + An exception that may be thrown while loading (and parsing) a metamodel. + ''' pass diff --git a/xtuml/meta.py b/xtuml/meta.py index bb05e6c..906c47a 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -61,7 +61,7 @@ def __init__(self, from_kind, to_kind, rel_id, phrase): class MetaModelException(MetaException): ''' - Base class for all exceptions thrown by the MetaModel class. + Base class for exceptions thrown by the MetaModel class. ''' From a174d3a47e5b243933e2e4a575229a0e316feb56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 16 Aug 2016 20:03:46 +0000 Subject: [PATCH 076/216] update docs on bridgepoint.consistency_check --- docs/cli.rst | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/cli.rst b/docs/cli.rst index cc9ef9c..40aec08 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -16,9 +16,24 @@ association to check. **Note:** both the model and its schema needs to be provided by the user. +**Available options** + +=============== =================================================== +Option Description +=============== =================================================== +--version show program's version number and exit +--help, -h show this help message and exit +-r limit consistency check to one or more associations +-k limit check for uniqueness constraint violations to + one or more classes +--verbosity, -v increase debug logging level +=============== =================================================== + +BridgePoint metamodel +~~~~~~~~~~~~~~~~~~~~~ There is also a tool available that checks for constraint violations in ooaofooa, the metamodel used by the BridgePoint editor. It can be used to detect various -issues in a BridgePoint model: +fatal issues in a BridgePoint model, e.g. parameters that lacks a type. :: @@ -35,6 +50,8 @@ Option Description -r limit consistency check to one or more associations -k limit check for uniqueness constraint violations to one or more classes +--globals, -g add builtin global data types automatically, e.g. + boolean, integer and real --verbosity, -v increase debug logging level =============== =================================================== From c882f8a323319703b19c6265a3a81ac3cc5c6512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 17 Aug 2016 19:33:53 +0000 Subject: [PATCH 077/216] ci: initial appeyor support --- appveyor.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 appveyor.yml diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..b0ff36f --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,28 @@ +build: off + +environment: + matrix: + - PYTHON: "C:\\Python27" + PYTHON_VERSION: "2.7.x" + PYTHON_ARCH: "32" + +init: + - "%PYTHON%/python --version" + +install: + - "%PYTHON%/python -m pip install ply" + - "%PYTHON%/python -m pip install sphinx" + - "%PYTHON%/python -m pip install sphinx_rtd_theme" + +before_test: + - "%PYTHON%/python setup.py build" + +test_script: + - "%PYTHON%/python setup.py test" + +after_test: + - "%PYTHON%/python -m sphinx -b latexpdf docs dist/pyxtuml.pdf" + - "%PYTHON%/python -m sphinx -b man docs dist" + +artifacts: + - path: dist\* From c18d36e0b2a97a201e4b9497642dad34d667330a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 17 Aug 2016 19:48:30 +0000 Subject: [PATCH 078/216] test: defere removal of temp files until program exit --- tests/test_xtuml/test_persist.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index ee592ed..c2e3b7e 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -4,6 +4,7 @@ import unittest import os import tempfile +import atexit import xtuml @@ -108,7 +109,7 @@ def test_persist_default_values(self): with open(filename) as f: self.assertEqual(s, f.read()) finally: - os.remove(filename) + atexit.register(os.remove, filename) loader = xtuml.ModelLoader() loader.input(schema) @@ -145,7 +146,7 @@ def test_persist_schema(self): with open(filename) as f: self.assertEqual(s, f.read()) finally: - os.remove(filename) + atexit.register(os.remove, filename) def test_persist_database(self): schema = ''' @@ -172,7 +173,7 @@ def test_persist_database(self): with open(filename) as f: self.assertEqual(s, f.read()) finally: - os.remove(filename) + atexit.register(os.remove, filename) def test_serialize_schema(self): schema = ''' From 0226e1caead022a7deabfcb1cdf116fb2f49df65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 17 Aug 2016 19:59:44 +0000 Subject: [PATCH 079/216] appveyor: don't try to produce PDF manual, it depends POSIX make --- appveyor.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index b0ff36f..955bb4e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -21,7 +21,6 @@ test_script: - "%PYTHON%/python setup.py test" after_test: - - "%PYTHON%/python -m sphinx -b latexpdf docs dist/pyxtuml.pdf" - "%PYTHON%/python -m sphinx -b man docs dist" artifacts: From 96ad4fd8d859b2cbac9a094cfc414b68678f4689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 3 Sep 2016 12:52:00 +0200 Subject: [PATCH 080/216] version bump --- xtuml/version.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xtuml/version.py b/xtuml/version.py index 0201a17..70116d7 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -1,9 +1,9 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2016 John Törnblom name = 'pyxtuml' -date = '2016-07-07' -version = '0.8' -release = '0.8.3' +date = '2016-09-03' +version = '0.9' +release = '0.9.0' complete_string = '%s v%s (%s)' % (name, release, date) From 266b31d4a8609b7435bdd49f1ee3aca472777fd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 20 Sep 2016 18:25:00 +0000 Subject: [PATCH 081/216] meta: fix case sensitivity issues when association contain lowercased key letters --- tests/test_xtuml/test_metamodel.py | 26 ++++++++++++++++++++++++-- xtuml/meta.py | 7 +++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 6950b31..c80033b 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -93,8 +93,8 @@ def test_query_order(self): self.assertEqual(index != length - 1, inst != q.last) def test_case_sensitivity(self): - self.metamodel.define_class('Aa', []) - + self.metamodel.define_class('Aa', [('Id', 'unique_id')]) + self.metamodel.new('AA') self.assertTrue(self.metamodel.select_any('aA')) @@ -111,6 +111,28 @@ def test_case_sensitivity(self): self.assertEqual(len(self.metamodel.select_many('Aa')), 4) self.assertEqual(len(self.metamodel.select_many('aa')), 4) + metaclass = self.metamodel.find_metaclass('aa') + metaclass.append_attribute('Next_Id', 'unique_id') + + self.metamodel.define_association(rel_id='R1', + source_kind='AA', + source_keys=['ID'], + source_many=False, + source_conditional=False, + source_phrase='prev', + target_kind='aa', + target_keys=['next_id'], + target_many=False, + target_conditional=False, + target_phrase='next') + + next_id = None + for inst in self.metamodel.select_many('aa'): + inst.next_ID = next_id + next_id = inst.Id + + self.assertTrue(xtuml.navigate_one(inst).aa[1, 'prev'].AA[1, 'prev']()) + def test_unknown_type(self): self.metamodel.define_class('A', [('Id', '')]) self.assertRaises(xtuml.MetaException, self.metamodel.new, 'A') diff --git a/xtuml/meta.py b/xtuml/meta.py index 906c47a..3d362cb 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -382,7 +382,7 @@ def add_link(self, metaclass, rel_id, key_map, phrase, conditional, link = Link(self, rel_id, metaclass, key_map, phrase, conditional, many) self.referential_attributes |= set(link.key_map.keys()) - key = (metaclass.kind, rel_id, phrase) + key = (metaclass.kind.upper(), rel_id, phrase) self.links[key] = link return link @@ -395,7 +395,7 @@ def find_link(self, kind, rel_id, phrase): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id - key = (kind, rel_id, phrase) + key = (kind.upper(), rel_id, phrase) return self.links.get(key, None) def append_attribute(self, name, type_name): @@ -531,7 +531,7 @@ def navigate(self, inst, kind, rel_id, phrase=''): Navigate across a link with some *rel_id* and *phrase* that yields instances of some *kind*. ''' - key = (kind, rel_id, phrase) + key = (kind.upper(), rel_id, phrase) if key in self.links: link = self.links[key] return link.navigate(inst) @@ -581,7 +581,6 @@ def nav(self, kind, relid, phrase=''): @staticmethod def _nav(handle, kind, rel_id, phrase): - kind = kind.upper() if isinstance(rel_id, int): rel_id = 'R%d' % rel_id From 1b038dc915cf0c325b62bbd4b9d79a1a36e3ef52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 20 Sep 2016 18:39:51 +0000 Subject: [PATCH 082/216] version bump --- xtuml/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/version.py b/xtuml/version.py index 70116d7..9e15e2d 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -2,8 +2,8 @@ # Copyright (C) 2016 John Törnblom name = 'pyxtuml' -date = '2016-09-03' +date = '2016-09-20' version = '0.9' -release = '0.9.0' +release = '0.9.1' complete_string = '%s v%s (%s)' % (name, release, date) From b96b4fa43719ddbf2e590f29d4022590eed383db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 23 Sep 2016 08:21:26 +0200 Subject: [PATCH 083/216] meta: fix relate operation on reflexive association classes --- xtuml/meta.py | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 3d362cb..f9bfb0a 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -787,32 +787,23 @@ def _find_link(inst1, inst2, rel_id, phrase): metaclass1 = inst1.__metaclass__ metaclass2 = inst2.__metaclass__ - link = metaclass2.find_link(metaclass1.kind, rel_id, phrase) - if link and not isinstance(link, ReversedLink): - return inst2, inst1, link - - link = metaclass1.find_link(metaclass2.kind, rel_id, phrase) - if link and not isinstance(link, ReversedLink): - return inst1, inst2, link - if isinstance(rel_id, int): rel_id = 'R%d' % rel_id - for other_link in metaclass1.links.values(): - if other_link == link: - continue - - if other_link.to_metaclass != metaclass1: - continue - - if other_link.rel_id != rel_id: + for ass in metaclass1.metamodel.associations: + if ass.rel_id != rel_id: continue - if other_link.phrase == phrase: - continue + if (ass.link.from_metaclass == metaclass1 and + ass.link.to_metaclass == metaclass2 and + ass.reversed_link.phrase == phrase): + return inst1, inst2, ass.link + + if (ass.reversed_link.from_metaclass == metaclass1 and + ass.reversed_link.to_metaclass == metaclass2 and + ass.link.phrase == phrase): + return inst2, inst1, ass.link - return inst1, inst2, other_link - raise UnknownLinkException(metaclass1.kind, metaclass2.kind, rel_id, phrase) From 0dbf03550f1bce2978c1046644205d0a2ee9c354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 23 Sep 2016 08:23:23 +0200 Subject: [PATCH 084/216] persist: fix serialization of associations --- xtuml/persist.py | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/xtuml/persist.py b/xtuml/persist.py index af46806..5a833de 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -77,29 +77,28 @@ def serialize_instances(metamodel): return s -def serialize_link(link): +def serialize_association(ass): ''' - Serialize an xtuml metamodel association link. + Serialize an xtuml metamodel association. ''' - s = '%s %s (%s)' % (link.cardinality, - link.from_metaclass.kind, - ', '.join(link.key_map.keys())) + s1 = '%s %s (%s)' % (ass.link.cardinality, + ass.link.to_metaclass.kind, + ', '.join(ass.reversed_link.key_map.keys())) + + if ass.link.phrase: + s1 += " PHRASE '%s'" % ass.link.phrase + + s2 = '%s %s (%s)' % (ass.reversed_link.cardinality, + ass.reversed_link.to_metaclass.kind, + ', '.join(ass.link.key_map.keys())) - if link.phrase: - s += " PHRASE '%s'" % link.phrase - - return s + if ass.reversed_link.phrase: + s2 += " PHRASE '%s'" % ass.reversed_link.phrase -def serialize_association(ass): - ''' - Serialize an xtuml metamodel association. - ''' - link = serialize_link(ass.link) - reversed_link = serialize_link(ass.reversed_link) return 'CREATE ROP REF_ID %s FROM %s TO %s;\n' % (ass.rel_id, - link, - reversed_link) + s2, + s1) def serialize_class(Cls): @@ -165,9 +164,6 @@ def serialize(resource): elif isinstance(resource, xtuml.Association): return serialize_association(resource) - elif isinstance(resource, xtuml.Link): - return serialize_link(resource) - elif isinstance(resource, xtuml.Class): return serialize_instance(resource) From cc2f6f768ee617c9843a93c405f75fc79dd7c5ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 23 Sep 2016 08:25:14 +0200 Subject: [PATCH 085/216] test: fix case where an invalid phrase is used in a relate operation --- tests/test_xtuml/test_relate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index dc0b98b..424c5cc 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -57,7 +57,7 @@ def test_relate_reflexive_without_phrase(self): inst1 = self.m.new('ACT_SMT') inst2 = self.m.new('ACT_SMT') - self.assertRaises(xtuml.RelateException, xtuml.relate, + self.assertRaises(xtuml.UnknownLinkException, xtuml.relate, inst1, inst2, 661, '') def test_relate_inverted_order(self): From 504c02f044328954faaade31aeffcea78d77d54a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 23 Sep 2016 08:26:52 +0200 Subject: [PATCH 086/216] test: fix test case that serialize of associations Induvidual links cannot be serialized, only complete associations --- tests/test_xtuml/test_persist.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index c2e3b7e..18c67e1 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -356,11 +356,6 @@ def test_implicit_serialize(self): s2 = xtuml.serialize_association(R1) self.assertTrue(s1) self.assertEqual(s1, s2) - - s1 = xtuml.serialize(R1.link) - s2 = xtuml.persist.serialize_link(R1.link) - self.assertTrue(s1) - self.assertEqual(s1, s2) x = m.new('X', Boolean=True, Integer=4, String='str') From f3431c141517ff775d731ded61c428cb7f235510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 23 Sep 2016 08:27:57 +0200 Subject: [PATCH 087/216] test: add test cases for relate and navigation operations where phrases are used --- tests/test_xtuml/test_phrase.py | 176 ++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 tests/test_xtuml/test_phrase.py diff --git a/tests/test_xtuml/test_phrase.py b/tests/test_xtuml/test_phrase.py new file mode 100644 index 0000000..45478eb --- /dev/null +++ b/tests/test_xtuml/test_phrase.py @@ -0,0 +1,176 @@ +import unittest +import xtuml + +from xtuml import relate +from xtuml import navigate_one as one + + +class TestAssocClass(unittest.TestCase): + ''' + CREATE TABLE Assoc ( + one_side_ID UNIQUE_ID, + other_side_ID UNIQUE_ID + ); + + CREATE TABLE Class ( + ID UNIQUE_ID + ); + + CREATE ROP REF_ID R1 + FROM MC Assoc (one_side_ID) PHRASE 'one' + TO 1 Class (ID) PHRASE 'other'; + + CREATE ROP REF_ID R1 + FROM MC Assoc (other_side_ID) PHRASE 'other' + TO 1 Class (ID) PHRASE 'one'; + ''' + + def setUp(self): + l = xtuml.ModelLoader() + l.input(self.__class__.__doc__) + self.m = l.build_metamodel() + + def tearDown(self): + del self.m + + def test_serialize(self): + s1 = xtuml.serialize(self.m) + l = xtuml.ModelLoader() + l.input(s1) + s2 = xtuml.serialize(l.build_metamodel()) + print s1 + print s2 + self.assertEqual(s1, s2) + + def test_relate_assoc_to_class_across_one(self): + cls = self.m.new('Class') + assoc = self.m.new('Assoc') + + self.assertTrue(relate(assoc, cls, 1, 'one')) + self.assertEqual(assoc.one_side_ID, cls.ID) + + def test_relate_assoc_to_class_across_other(self): + cls = self.m.new('Class') + assoc = self.m.new('Assoc') + + self.assertTrue(relate(assoc, cls, 1, 'other')) + self.assertEqual(assoc.other_side_ID, cls.ID) + + def test_relate_class_to_assoc_across_one(self): + cls = self.m.new('Class') + assoc = self.m.new('Assoc') + + self.assertTrue(relate(cls, assoc, 1, 'one')) + self.assertEqual(assoc.other_side_ID, cls.ID) + + def test_relate_class_to_assoc_across_other(self): + cls = self.m.new('Class') + assoc = self.m.new('Assoc') + + self.assertTrue(relate(cls, assoc, 1, 'other')) + self.assertEqual(assoc.one_side_ID, cls.ID) + + def test_navigate_assoc_to_class_across_one(self): + cls = self.m.new('Class') + assoc = self.m.new('Assoc', other_side_ID=cls.ID) + self.assertTrue(one(assoc).Class[1, 'one']()) + + def test_navigate_assoc_to_class_across_other(self): + cls = self.m.new('Class') + assoc = self.m.new('Assoc', one_side_ID=cls.ID) + self.assertTrue(one(assoc).Class[1, 'other']()) + + def test_navigate_class_to_assoc_across_one(self): + cls = self.m.new('Class') + assoc = self.m.new('Assoc', one_side_ID=cls.ID) + self.assertTrue(one(cls).Assoc[1, 'one']()) + + def test_navigate_class_to_assoc_across_other(self): + cls = self.m.new('Class') + assoc = self.m.new('Assoc', other_side_ID=cls.ID) + self.assertTrue(one(cls).Assoc[1, 'other']()) + + def test_relate_two_classes_to_assoc(self): + cls1 = self.m.new('Class') + cls2 = self.m.new('Class') + assoc = self.m.new('Assoc') + + self.assertTrue(relate(cls1, assoc, 1, 'one')) + self.assertTrue(relate(cls2, assoc, 1, 'other')) + + def test_relate_assoc_to_two_classes(self): + cls1 = self.m.new('Class') + cls2 = self.m.new('Class') + assoc = self.m.new('Assoc') + + self.assertTrue(relate(assoc, cls1, 1, 'one')) + self.assertTrue(relate(assoc, cls2, 1, 'other')) + + def test_relate_assoc_to_two_classes_incorrectly(self): + cls1 = self.m.new('Class') + cls2 = self.m.new('Class') + assoc = self.m.new('Assoc') + + self.assertTrue(relate(assoc, cls1, 1, 'one')) + self.assertRaises(xtuml.RelateException, relate, + assoc, cls2, 1, 'one') + + +class TestReflexiveClass(unittest.TestCase): + ''' + CREATE TABLE Reflexive ( + ID UNIQUE_ID, + Ref_ID UNIQUE_ID + ); + CREATE UNIQUE INDEX I1 ON Reflexive (ID); + CREATE ROP REF_ID R1 FROM 1C Reflexive (Ref_ID) PHRASE 'one' TO 1C Reflexive (ID) PHRASE 'other'; + ''' + + def setUp(self): + l = xtuml.ModelLoader() + l.input(self.__class__.__doc__) + self.m = l.build_metamodel() + + def tearDown(self): + del self.m + + def test_serialize(self): + s1 = xtuml.serialize(self.m) + l = xtuml.ModelLoader() + l.input(s1) + s2 = xtuml.serialize(l.build_metamodel()) + self.assertTrue(s1 == s2) + + def test_relate_across_one(self): + cls1 = self.m.new('Reflexive') + cls2 = self.m.new('Reflexive') + + self.assertTrue(relate(cls1, cls2, 1, 'one')) + self.assertEqual(cls1.Ref_ID, cls2.ID) + + def test_relate_across_other(self): + cls1 = self.m.new('Reflexive') + cls2 = self.m.new('Reflexive') + + self.assertTrue(relate(cls1, cls2, 1, 'other')) + self.assertEqual(cls2.Ref_ID, cls1.ID) + + def test_navgate_across_one(self): + cls1 = self.m.new('Reflexive') + cls2 = self.m.new('Reflexive', Ref_ID=cls1.ID) + + self.assertEqual(one(cls1).Reflexive[1, 'one'](), cls2) + self.assertFalse(one(cls2).Reflexive[1, 'one']()) + + def test_navgate_across_other(self): + cls1 = self.m.new('Reflexive') + cls2 = self.m.new('Reflexive', Ref_ID=cls1.ID) + + self.assertEqual(one(cls2).Reflexive[1, 'other'](), cls1) + self.assertFalse(one(cls1).Reflexive[1, 'other']()) + + +if __name__ == "__main__": + unittest.main() + + From 92f3fd0370d3dce805484707b700360f33271377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 23 Sep 2016 08:34:00 +0200 Subject: [PATCH 088/216] cosmetics --- tests/test_xtuml/test_phrase.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_xtuml/test_phrase.py b/tests/test_xtuml/test_phrase.py index 45478eb..611f998 100644 --- a/tests/test_xtuml/test_phrase.py +++ b/tests/test_xtuml/test_phrase.py @@ -38,8 +38,6 @@ def test_serialize(self): l = xtuml.ModelLoader() l.input(s1) s2 = xtuml.serialize(l.build_metamodel()) - print s1 - print s2 self.assertEqual(s1, s2) def test_relate_assoc_to_class_across_one(self): @@ -122,8 +120,10 @@ class TestReflexiveClass(unittest.TestCase): ID UNIQUE_ID, Ref_ID UNIQUE_ID ); - CREATE UNIQUE INDEX I1 ON Reflexive (ID); - CREATE ROP REF_ID R1 FROM 1C Reflexive (Ref_ID) PHRASE 'one' TO 1C Reflexive (ID) PHRASE 'other'; + + CREATE ROP REF_ID R1 + FROM 1C Reflexive (Ref_ID) PHRASE 'one' + TO 1C Reflexive (ID) PHRASE 'other'; ''' def setUp(self): From ce7016bac36b7bd7f2c7e169d64c7bac0d58ff04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 23 Sep 2016 08:38:06 +0200 Subject: [PATCH 089/216] bump version --- xtuml/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/version.py b/xtuml/version.py index 9e15e2d..f111fcc 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -2,8 +2,8 @@ # Copyright (C) 2016 John Törnblom name = 'pyxtuml' -date = '2016-09-20' +date = '2016-09-23' version = '0.9' -release = '0.9.1' +release = '0.9.2' complete_string = '%s v%s (%s)' % (name, release, date) From 9d7f055433fbf4c1519f7c5c63a2a89119d7b0e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 23 Sep 2016 18:42:15 +0200 Subject: [PATCH 090/216] meta: return a set of affected instances from relate/unrelate operations --- xtuml/meta.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index f9bfb0a..0739070 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -840,17 +840,16 @@ def relate(from_instance, to_instance, rel_id, phrase=''): The two instances are related to each other by copying the identifying attributes from the instance on the TO side of a association to the instance n the FROM side. Updated values which affect existing associations are - propagated. + propagated. A set of all affected instances will be returned. ''' + affected_instances = set() if None in [from_instance, to_instance]: - return False + return affected_instances from_instance, to_instance, link = _find_link(from_instance, to_instance, rel_id, phrase) post_process = _deferred_link_operation(from_instance, link, relate) - updated = False - for from_name, to_name in link.key_map.items(): if _is_null(to_instance, to_name): raise RelateException('undefined referential attribute %s' % to_name) @@ -866,14 +865,14 @@ def relate(from_instance, to_instance, rel_id, phrase=''): ' (%s.%s=%s)' % (from_instance.__metaclass__.kind, from_name, from_value)) - updated = True + affected_instances.add(from_instance) setattr(from_instance, from_name, to_value) - if updated: + if affected_instances: for deferred_relate in post_process: - deferred_relate() + affected_instances |= deferred_relate() - return updated + return affected_instances def unrelate(from_instance, to_instance, rel_id, phrase=''): @@ -883,28 +882,29 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): The two instances are unrelated from each other by reseting the identifying attributes on the FROM side of the association. Updated values which affect - existing associations are propagated. + existing associations are propagated. A set of all affected instances will + be returned. ''' + affected_instances = set() if None in [from_instance, to_instance]: - return False + return affected_instances from_instance, to_instance, link = _find_link(from_instance, to_instance, rel_id, phrase) post_process = _deferred_link_operation(from_instance, link, unrelate) - updated = False for from_name in link.key_map: if _is_null(from_instance, from_name): raise UnrelateException('instances are not related') - updated = True + affected_instances.add(from_instance) setattr(from_instance, from_name, None) - if updated: + if affected_instances: for deferred_unrelate in post_process: - deferred_unrelate() + affected_instances |= deferred_unrelate() - return updated + return affected_instances def delete(instance): From 81bce631204a38807475b1471a8246abde6994dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 26 Sep 2016 20:04:03 +0200 Subject: [PATCH 091/216] schema gen: omit unique identifiers that contain derived attributes this can be reactivated using the -d flag to bridgepoint.gen_sql_schema --- bridgepoint/ooaofooa.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 8e364c4..3d8f0cd 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3824,7 +3824,13 @@ def mk_class(m, o_obj, derived_attributes=False): for o_id in many(o_obj).O_ID[104](): o_oida = many(o_id).O_OIDA[105]() - names = [o_attr.Name for o_attr in many(o_oida).O_ATTR[105]()] + o_attrs = many(o_oida).O_ATTR[105]() + if not derived_attributes and one(o_attrs).O_BATTR[106].O_DBATTR[107](): + logger.warning('Omitting unique identifier %s.I%d' % + (o_obj.Key_Lett, o_id.Oid_ID + 1)) + continue + + names = [o_attr.Name for o_attr in o_attrs] m.define_unique_identifier(o_obj.Key_Lett, o_id.Oid_ID + 1, *names) return Cls From e1591efa88c014f97b3af51eb6fe17a5def20678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 26 Sep 2016 20:08:12 +0200 Subject: [PATCH 092/216] unrelate: don't clear derived attributes that are also identifying to the instance --- tests/test_xtuml/test_relate.py | 8 +++++++- xtuml/meta.py | 7 ++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index 424c5cc..6f3b9b6 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -88,7 +88,13 @@ def test_unrelate(self): self.assertTrue(xtuml.unrelate(inst1, inst2, 661, 'precedes')) self.assertIsNone(xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) self.assertIsNone(xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) - + + def test_unrelate_subtype(self): + inst1 = self.m.new('PE_PE') + inst2 = self.m.new('EP_PKG') + self.assertTrue(xtuml.relate(inst1, inst2, 8001)) + self.assertFalse(xtuml.unrelate(inst1, inst2, 8001)) + def test_unrelate_none(self): inst = self.m.new('ACT_SMT') self.assertFalse(xtuml.unrelate(None, inst, 602)) diff --git a/xtuml/meta.py b/xtuml/meta.py index 0739070..8650658 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -896,9 +896,10 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): for from_name in link.key_map: if _is_null(from_instance, from_name): raise UnrelateException('instances are not related') - - affected_instances.add(from_instance) - setattr(from_instance, from_name, None) + + if not from_name in from_instance.__metaclass__.identifying_attributes: + affected_instances.add(from_instance) + setattr(from_instance, from_name, None) if affected_instances: for deferred_unrelate in post_process: From b1b4e84651e36ebbc032adc4452d3ca24be133b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 2 Oct 2016 17:10:02 +0000 Subject: [PATCH 093/216] persist: preserve order of keys in associations by using the same link for both end points --- xtuml/persist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/persist.py b/xtuml/persist.py index 5a833de..b762468 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -83,7 +83,7 @@ def serialize_association(ass): ''' s1 = '%s %s (%s)' % (ass.link.cardinality, ass.link.to_metaclass.kind, - ', '.join(ass.reversed_link.key_map.keys())) + ', '.join(ass.link.key_map.values())) if ass.link.phrase: s1 += " PHRASE '%s'" % ass.link.phrase From 660c7a5e45ad27dfa2d6836a06bc234f3b5e8eb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 2 Oct 2016 17:14:03 +0000 Subject: [PATCH 094/216] version bump --- xtuml/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/version.py b/xtuml/version.py index f111fcc..f86cc4c 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -2,8 +2,8 @@ # Copyright (C) 2016 John Törnblom name = 'pyxtuml' -date = '2016-09-23' +date = '2016-10-02' version = '0.9' -release = '0.9.2' +release = '0.9.3' complete_string = '%s v%s (%s)' % (name, release, date) From 65fb53c9c499b654fb5c8713b5ee233891166e0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 8 Oct 2016 10:19:27 +0200 Subject: [PATCH 095/216] consistency_check: add check_subtype_integrity() to check supertype/subtype constraints --- tests/test_xtuml/test_consistency.py | 10 +++++++--- xtuml/__init__.py | 2 +- xtuml/consistency_check.py | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index 9e07f1d..aa85899 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -74,8 +74,12 @@ def test_uniqueness_constraint(self): xtuml.delete(s_dt) self.assertTrue(m.is_consistent()) - - + def test_subtype_integrity(self): + for num in range(0, 5): + errors = xtuml.check_subtype_integrity(self.metamodel, 'PE_PE', 8001) + self.assertEqual(num, errors) + self.metamodel.new('PE_PE') + class TestConcistencyCLI(unittest.TestCase): ''' @@ -113,4 +117,4 @@ def test_limit_searchspace(self): self.assertEqual(0, rc) - \ No newline at end of file + diff --git a/xtuml/__init__.py b/xtuml/__init__.py index eadfc7a..6974cc9 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -63,7 +63,7 @@ from .consistency_check import check_association_integrity from .consistency_check import check_uniqueness_constraint - +from .consistency_check import check_subtype_integrity diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 731dcb2..578f133 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -129,6 +129,22 @@ def check_link_integrity(m, link): return res +def check_subtype_integrity(m, super_kind, rel_id): + ''' + Check the model for integrity violations across a subtype association. + ''' + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + res = 0 + for inst in m.select_many(super_kind): + if not xtuml.navigate_subtype(inst, rel_id): + res += 1 + logger.warning('integrity violation across ' + '%s[%s]' % (super_kind, rel_id)) + + return res + def check_association_integrity(m, rel_id=None): ''' From 8c42ac130502822570e317d0d28caaca13265e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 8 Oct 2016 14:04:40 +0000 Subject: [PATCH 096/216] add bridgepoint.ModelLoader.build_component to API references --- bridgepoint/ooaofooa.py | 9 +++++++++ docs/api-reference.rst | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 3d8f0cd..9e05c7c 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -4015,6 +4015,15 @@ def filename_input(self, path_or_filename): xtuml.ModelLoader.filename_input(self, path_or_filename) def build_component(self, name=None, derived_attributes=False): + ''' + Instantiate and build a component from ooaofooa named *name* as a + pyxtuml model. Classes, associations, attributes and unique identifers, + i.e. O_OBJ, R_REL, O_ATTR in ooaofooa, are defined in the resulting + pyxtuml model. + + Optionally, control whether *derived attributes* shall be mapped into + the resulting pyxtuml model as attributes or not. + ''' mm = self.build_metamodel() c_c = mm.select_any('C_C', where(Name=name)) if c_c: diff --git a/docs/api-reference.rst b/docs/api-reference.rst index 715b655..d4c53c3 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -82,7 +82,7 @@ Loading Models .. autofunction:: bridgepoint.load_metamodel .. autoclass:: bridgepoint.ModelLoader - :members: filename_input + :members: filename_input, build_component Model Transformation ^^^^^^^^^^^^^^^^^^^^ From faefca628abc6d379d1d8245aa24f6c53df90ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 8 Oct 2016 14:40:58 +0000 Subject: [PATCH 097/216] docs: cosmetics --- bridgepoint/ooaofooa.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 9e05c7c..dbdc038 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -4023,6 +4023,9 @@ def build_component(self, name=None, derived_attributes=False): Optionally, control whether *derived attributes* shall be mapped into the resulting pyxtuml model as attributes or not. + + Futhermore, if no *name* is provided, the entire content of the ooaofooa + model is instantiated into the pyxtuml model. ''' mm = self.build_metamodel() c_c = mm.select_any('C_C', where(Name=name)) From e7e5803761b7237d3e01a58b93246f53ca3e21ab Mon Sep 17 00:00:00 2001 From: Cortland Starrett Date: Tue, 11 Oct 2016 14:41:12 -0400 Subject: [PATCH 098/216] turn derived_attributes on in example This will allow the BridgePoint development schema generator to use this file unchanged. Hopefully, this is O.K. and does not detract from the example. --- examples/gen_ooaofooa_schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index 6cd2f74..2c76664 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -44,7 +44,7 @@ def main(): loader.filename_input(filename) m = loader.build_metamodel() - c = loader.build_component() + c = loader.build_component(derived_attributes=True) for o_obj in m.select_many('O_OBJ'): for o_attr in many(o_obj).O_ATTR[102](o_attr_filter): From a19c30a2c29cb3059b71e8e5e664e6addb118f55 Mon Sep 17 00:00:00 2001 From: Cortland Starrett Date: Wed, 12 Oct 2016 09:14:41 -0400 Subject: [PATCH 099/216] job: #8425 Automating the re-insertion of return_type into ACT_ACT which is of an unsupported special type (instance) and coercing it to INTEGER. --- examples/gen_ooaofooa_schema.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index 2c76664..1e29cd1 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -45,12 +45,14 @@ def main(): m = loader.build_metamodel() c = loader.build_component(derived_attributes=True) - + for o_obj in m.select_many('O_OBJ'): for o_attr in many(o_obj).O_ATTR[102](o_attr_filter): logger.info('Filtering %s.%s' % (o_obj.Key_Lett, o_attr.Name)) metaclass = c.find_metaclass(o_obj.Key_Lett) metaclass.delete_attribute(o_attr.Name) + if o_obj.Key_Lett == 'ACT_ACT': + metaclass.insert_attribute(index=5, name='return_value', type_name='INTEGER') xtuml.persist_schema(c, '/dev/stdout') From da908d01ee0460f991e79b1c5e814850955f8532 Mon Sep 17 00:00:00 2001 From: Cortland Starrett Date: Wed, 12 Oct 2016 09:19:37 -0400 Subject: [PATCH 100/216] job: #8425 adjust indentation --- examples/gen_ooaofooa_schema.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index 1e29cd1..80eff09 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -51,8 +51,8 @@ def main(): logger.info('Filtering %s.%s' % (o_obj.Key_Lett, o_attr.Name)) metaclass = c.find_metaclass(o_obj.Key_Lett) metaclass.delete_attribute(o_attr.Name) - if o_obj.Key_Lett == 'ACT_ACT': - metaclass.insert_attribute(index=5, name='return_value', type_name='INTEGER') + if o_obj.Key_Lett == 'ACT_ACT': + metaclass.insert_attribute(index=5, name='return_value', type_name='INTEGER') xtuml.persist_schema(c, '/dev/stdout') From dc0dcfc7d33259c01724395bdd242a81c72e72d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 12 Oct 2016 19:01:46 +0200 Subject: [PATCH 101/216] docs: expose xtuml.MetaClass to public API --- docs/api-reference.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/api-reference.rst b/docs/api-reference.rst index d4c53c3..86f3f9e 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -28,6 +28,11 @@ Metamodel Operations .. autofunction:: xtuml.where_eq .. autofunction:: xtuml.sort_reflexive +.. autoclass:: xtuml.MetaClass + :members: clone, new, select_one, select_many, query, navigate, delete, + attribute_names, append_attribute, insert_attribute, delete_attribute, + referential_attributes, identifying_attributes + .. autofunction:: xtuml.check_association_integrity .. autofunction:: xtuml.check_uniqueness_constraint From f75fc5809346c0125b0c545cbbefebb5134c9a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 19 Nov 2016 12:48:37 +0100 Subject: [PATCH 102/216] version bump --- xtuml/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/version.py b/xtuml/version.py index f86cc4c..6defe27 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -2,8 +2,8 @@ # Copyright (C) 2016 John Törnblom name = 'pyxtuml' -date = '2016-10-02' +date = '2016-11-19' version = '0.9' -release = '0.9.3' +release = '0.9.4' complete_string = '%s v%s (%s)' % (name, release, date) From b3a4efac79e5594d6c94ee2a03eda96de02c6582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 21 Feb 2017 21:43:53 +0100 Subject: [PATCH 103/216] re-license to LGPLv3+ --- LICENSE => COPYING | 8 +- COPYING.LESSER | 165 ++++++++++++++++++ bridgepoint/__init__.py | 18 ++ bridgepoint/consistency_check.py | 17 +- bridgepoint/gen_sql_schema.py | 17 +- bridgepoint/gen_xsd_schema.py | 17 +- bridgepoint/imp.py | 17 +- bridgepoint/oal.py | 17 +- bridgepoint/ooaofooa.py | 17 +- bridgepoint/prebuild.py | 17 +- bridgepoint/sourcegen.py | 17 +- docs/license.rst | 4 +- examples/create_external_entity.py | 17 +- examples/gen_ooaofooa_schema.py | 17 +- examples/gen_rt_integrity_check.py | 17 +- examples/list_bp_class_attributes.py | 17 +- examples/list_bp_enums.py | 17 +- examples/print_packageable_elements.py | 17 +- setup.py | 21 ++- tests/test_bridgepoint/test_assign.py | 17 +- tests/test_bridgepoint/test_binop.py | 17 +- .../test_bridgepoint/test_build_component.py | 18 +- tests/test_bridgepoint/test_consistency.py | 18 ++ tests/test_bridgepoint/test_const.py | 17 +- tests/test_bridgepoint/test_control.py | 17 +- tests/test_bridgepoint/test_create.py | 17 +- tests/test_bridgepoint/test_delete.py | 17 +- tests/test_bridgepoint/test_foreach.py | 17 +- tests/test_bridgepoint/test_generate.py | 17 +- tests/test_bridgepoint/test_ifs.py | 17 +- tests/test_bridgepoint/test_param.py | 17 +- tests/test_bridgepoint/test_relation.py | 17 +- tests/test_bridgepoint/test_select.py | 17 +- tests/test_bridgepoint/test_while.py | 17 +- tests/test_bridgepoint/utils.py | 17 +- tests/test_xtuml/test_consistency.py | 18 ++ tests/test_xtuml/test_load.py | 17 +- tests/test_xtuml/test_metamodel.py | 17 +- tests/test_xtuml/test_navigate.py | 17 +- tests/test_xtuml/test_persist.py | 17 +- tests/test_xtuml/test_phrase.py | 18 ++ tests/test_xtuml/test_relate.py | 17 +- tests/test_xtuml/test_sort.py | 17 +- tests/test_xtuml/test_tools.py | 18 +- xtuml/__init__.py | 17 +- xtuml/consistency_check.py | 17 +- xtuml/load.py | 17 +- xtuml/meta.py | 17 +- xtuml/persist.py | 17 +- xtuml/tools.py | 17 +- xtuml/version.py | 17 +- 51 files changed, 951 insertions(+), 52 deletions(-) rename LICENSE => COPYING (99%) create mode 100644 COPYING.LESSER diff --git a/LICENSE b/COPYING similarity index 99% rename from LICENSE rename to COPYING index ef7e7ef..94a9ed0 100644 --- a/LICENSE +++ b/COPYING @@ -1,4 +1,4 @@ -GNU GENERAL PUBLIC LICENSE + GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. @@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - {one line to give the program's name and a brief idea of what it does.} - Copyright (C) {year} {name of author} + + Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - {project} Copyright (C) {year} {fullname} + Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. diff --git a/COPYING.LESSER b/COPYING.LESSER new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/COPYING.LESSER @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/bridgepoint/__init__.py b/bridgepoint/__init__.py index fcfb016..8437c80 100644 --- a/bridgepoint/__init__.py +++ b/bridgepoint/__init__.py @@ -1,3 +1,21 @@ +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + from bridgepoint import imp imp.install() diff --git a/bridgepoint/consistency_check.py b/bridgepoint/consistency_check.py index e75c80e..52ff4c9 100644 --- a/bridgepoint/consistency_check.py +++ b/bridgepoint/consistency_check.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015-2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Check a bridgepoint model for association constraint violations in its metamodel (ooaofooa). diff --git a/bridgepoint/gen_sql_schema.py b/bridgepoint/gen_sql_schema.py index eba5910..d619108 100644 --- a/bridgepoint/gen_sql_schema.py +++ b/bridgepoint/gen_sql_schema.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2015-2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Generate an sql schema file for an xtUML model. The arguments are either xtuml files, or folders containing *.xtuml files. diff --git a/bridgepoint/gen_xsd_schema.py b/bridgepoint/gen_xsd_schema.py index 432270b..c87eb09 100644 --- a/bridgepoint/gen_xsd_schema.py +++ b/bridgepoint/gen_xsd_schema.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2015-2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Generate an xsd schema file for an xtUML model. The arguments are either xtuml files, or folders containing *.xtuml files. diff --git a/bridgepoint/imp.py b/bridgepoint/imp.py index 38506ec..731d3fa 100644 --- a/bridgepoint/imp.py +++ b/bridgepoint/imp.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015-2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import sys import os.path diff --git a/bridgepoint/oal.py b/bridgepoint/oal.py index fbf30d7..7c3a42e 100644 --- a/bridgepoint/oal.py +++ b/bridgepoint/oal.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015-2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Parser for the Object Action Language (OAL). diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index dbdc038..41384b8 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015-2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import os import logging diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index 31bdfc5..8a5892b 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2015-2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Transform OAL actions from its textual form into instances in a the ooaofooa metamodel. diff --git a/bridgepoint/sourcegen.py b/bridgepoint/sourcegen.py index 064ade5..58260af 100644 --- a/bridgepoint/sourcegen.py +++ b/bridgepoint/sourcegen.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015-2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import logging diff --git a/docs/license.rst b/docs/license.rst index 84cdf5f..0530398 100644 --- a/docs/license.rst +++ b/docs/license.rst @@ -1,6 +1,6 @@ License ======= -pyxtuml is licensed under the `GPL v3`_. +pyxtuml is licensed under the `LGPLv3+`_. -.. _`GPL v3`: http://www.gnu.org/copyleft/gpl.html +.. _`LGPLv3+`: http://www.gnu.org/copyleft/lgpl.html diff --git a/examples/create_external_entity.py b/examples/create_external_entity.py index d078cfd..ef61b19 100644 --- a/examples/create_external_entity.py +++ b/examples/create_external_entity.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import xtuml from bridgepoint import ooaofooa diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index 80eff09..f1888c6 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import sys import logging diff --git a/examples/gen_rt_integrity_check.py b/examples/gen_rt_integrity_check.py index 40a4a52..e26d36a 100755 --- a/examples/gen_rt_integrity_check.py +++ b/examples/gen_rt_integrity_check.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Generate OAL actions that checks for model integrity violations at runtime. diff --git a/examples/list_bp_class_attributes.py b/examples/list_bp_class_attributes.py index b5ef619..8e7abfe 100644 --- a/examples/list_bp_class_attributes.py +++ b/examples/list_bp_class_attributes.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import sys diff --git a/examples/list_bp_enums.py b/examples/list_bp_enums.py index 113e6af..e776c7d 100644 --- a/examples/list_bp_enums.py +++ b/examples/list_bp_enums.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import sys diff --git a/examples/print_packageable_elements.py b/examples/print_packageable_elements.py index bd60c5d..4596526 100644 --- a/examples/print_packageable_elements.py +++ b/examples/print_packageable_elements.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import sys import xtuml diff --git a/setup.py b/setup.py index 5c99e9c..fc23f83 100755 --- a/setup.py +++ b/setup.py @@ -1,6 +1,21 @@ #!/usr/bin/env python # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import logging import unittest import sys @@ -59,13 +74,13 @@ def run(self): author='John Törnblom', author_email='john.tornblom@gmail.com', url='https://github.com/xtuml/pyxtuml', - license='GPLv3', + license='LGPLv3+', classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'Topic :: Software Development :: Code Generators', 'Topic :: Software Development :: Compilers', - 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + 'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.5'], keywords='xtuml bridgepoint', diff --git a/tests/test_bridgepoint/test_assign.py b/tests/test_bridgepoint/test_assign.py index 91cd5cb..65dc8aa 100644 --- a/tests/test_bridgepoint/test_assign.py +++ b/tests/test_bridgepoint/test_assign.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_binop.py b/tests/test_bridgepoint/test_binop.py index 9231df2..845d109 100644 --- a/tests/test_bridgepoint/test_binop.py +++ b/tests/test_bridgepoint/test_binop.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_build_component.py b/tests/test_bridgepoint/test_build_component.py index 84f94c4..bdae17d 100644 --- a/tests/test_bridgepoint/test_build_component.py +++ b/tests/test_bridgepoint/test_build_component.py @@ -1,5 +1,21 @@ # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + import unittest import bridgepoint import xtuml diff --git a/tests/test_bridgepoint/test_consistency.py b/tests/test_bridgepoint/test_consistency.py index 372c43c..e160002 100644 --- a/tests/test_bridgepoint/test_consistency.py +++ b/tests/test_bridgepoint/test_consistency.py @@ -1,3 +1,21 @@ +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + import os import unittest import xtuml diff --git a/tests/test_bridgepoint/test_const.py b/tests/test_bridgepoint/test_const.py index 3ea4776..05664c7 100644 --- a/tests/test_bridgepoint/test_const.py +++ b/tests/test_bridgepoint/test_const.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_control.py b/tests/test_bridgepoint/test_control.py index d329b52..0a27c96 100644 --- a/tests/test_bridgepoint/test_control.py +++ b/tests/test_bridgepoint/test_control.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_create.py b/tests/test_bridgepoint/test_create.py index 0d44ef1..b395c2d 100644 --- a/tests/test_bridgepoint/test_create.py +++ b/tests/test_bridgepoint/test_create.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_delete.py b/tests/test_bridgepoint/test_delete.py index 863f2a9..1a75d96 100644 --- a/tests/test_bridgepoint/test_delete.py +++ b/tests/test_bridgepoint/test_delete.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_foreach.py b/tests/test_bridgepoint/test_foreach.py index d9e0312..a4c5153 100644 --- a/tests/test_bridgepoint/test_foreach.py +++ b/tests/test_bridgepoint/test_foreach.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_generate.py b/tests/test_bridgepoint/test_generate.py index fca11aa..72cc3ea 100644 --- a/tests/test_bridgepoint/test_generate.py +++ b/tests/test_bridgepoint/test_generate.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_ifs.py b/tests/test_bridgepoint/test_ifs.py index 063d139..797e912 100644 --- a/tests/test_bridgepoint/test_ifs.py +++ b/tests/test_bridgepoint/test_ifs.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_param.py b/tests/test_bridgepoint/test_param.py index 26a2b17..34e9a63 100644 --- a/tests/test_bridgepoint/test_param.py +++ b/tests/test_bridgepoint/test_param.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_relation.py b/tests/test_bridgepoint/test_relation.py index 9003ef0..b28a197 100644 --- a/tests/test_bridgepoint/test_relation.py +++ b/tests/test_bridgepoint/test_relation.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_select.py b/tests/test_bridgepoint/test_select.py index c00c990..c7cb04e 100644 --- a/tests/test_bridgepoint/test_select.py +++ b/tests/test_bridgepoint/test_select.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/test_while.py b/tests/test_bridgepoint/test_while.py index 919048b..0398c67 100644 --- a/tests/test_bridgepoint/test_while.py +++ b/tests/test_bridgepoint/test_while.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . from tests.test_bridgepoint.utils import PrebuildFunctionTestCase from tests.test_bridgepoint.utils import prebuild_docstring diff --git a/tests/test_bridgepoint/utils.py b/tests/test_bridgepoint/utils.py index 41ebd8c..4d45919 100644 --- a/tests/test_bridgepoint/utils.py +++ b/tests/test_bridgepoint/utils.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2014-2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import unittest import xtuml diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index aa85899..93f68cb 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -1,3 +1,21 @@ +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + import os import unittest import xtuml diff --git a/tests/test_xtuml/test_load.py b/tests/test_xtuml/test_load.py index b825661..c205085 100644 --- a/tests/test_xtuml/test_load.py +++ b/tests/test_xtuml/test_load.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2014-2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import unittest import os diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index c80033b..6dfdcce 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2014-2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import unittest diff --git a/tests/test_xtuml/test_navigate.py b/tests/test_xtuml/test_navigate.py index 6636d2a..6b7d1cc 100644 --- a/tests/test_xtuml/test_navigate.py +++ b/tests/test_xtuml/test_navigate.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import unittest import xtuml diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index 18c67e1..db355b1 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2014-2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import unittest import os diff --git a/tests/test_xtuml/test_phrase.py b/tests/test_xtuml/test_phrase.py index 611f998..0a0765e 100644 --- a/tests/test_xtuml/test_phrase.py +++ b/tests/test_xtuml/test_phrase.py @@ -1,3 +1,21 @@ +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + import unittest import xtuml diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index 6f3b9b6..b180e51 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import unittest import xtuml diff --git a/tests/test_xtuml/test_sort.py b/tests/test_xtuml/test_sort.py index 9186174..75b523d 100644 --- a/tests/test_xtuml/test_sort.py +++ b/tests/test_xtuml/test_sort.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import unittest import xtuml diff --git a/tests/test_xtuml/test_tools.py b/tests/test_xtuml/test_tools.py index 4f28c81..496935e 100644 --- a/tests/test_xtuml/test_tools.py +++ b/tests/test_xtuml/test_tools.py @@ -1,5 +1,21 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + import sys import unittest diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 6974cc9..9de4e44 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' pyxtuml is a python library for parsing, manipulating, and generating BridgePoint xtUML models. diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 578f133..4727946 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Check an xtuml model for association constraint violations in its metamodel. ''' diff --git a/xtuml/load.py b/xtuml/load.py index ef73e7d..6b3d5de 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Loading support for xtUML models (based on sql). diff --git a/xtuml/meta.py b/xtuml/meta.py index 8650658..3837dc8 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Perform various xtUML meta operations, e.g. create new metamodels and metaclasses, relate instances and perform navigations and queries. diff --git a/xtuml/persist.py b/xtuml/persist.py index b762468..6c64477 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2015 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . ''' Serialize xtuml models and its schema to an sql-based file format and persist to disk. diff --git a/xtuml/tools.py b/xtuml/tools.py index 9b6b9ab..a5eb631 100644 --- a/xtuml/tools.py +++ b/xtuml/tools.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . import collections import uuid diff --git a/xtuml/version.py b/xtuml/version.py index 6defe27..1541659 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -1,5 +1,20 @@ # encoding: utf-8 -# Copyright (C) 2016 John Törnblom +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . name = 'pyxtuml' date = '2016-11-19' From be5ae169f19d8c1d1397dd63629b9b99826c384c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 21 Feb 2017 21:44:51 +0100 Subject: [PATCH 104/216] bump version to 0.9.5 --- xtuml/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/version.py b/xtuml/version.py index 1541659..17500a0 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -17,8 +17,8 @@ # License along with pyxtuml. If not, see . name = 'pyxtuml' -date = '2016-11-19' +date = '2016-02-21' version = '0.9' -release = '0.9.4' +release = '0.9.5' complete_string = '%s v%s (%s)' % (name, release, date) From 8b62e1e7f6ae3f17fc2589b9922c5df14b76c4b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 21 Feb 2017 21:47:28 +0100 Subject: [PATCH 105/216] readme: update license information --- README.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 73dc225..5c91ad2 100644 --- a/README.rst +++ b/README.rst @@ -27,7 +27,8 @@ effort. License ======= -pyxtuml is licensed under the GPLv3, see LICENSE for more information. +pyxtuml is licensed under the LGPLv3+, see COPYING and COPYING.LESSER +for more information. .. |Build Status| image:: https://travis-ci.org/xtuml/pyxtuml.svg?branch=master :target: https://travis-ci.org/xtuml/pyxtuml From 6c66a36cff36fcdc4cf3c5cc45cfac7cc311aaa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 21 Feb 2017 21:48:44 +0100 Subject: [PATCH 106/216] manifest: include COPYING and COPYING.LESSER instead of LICENSE --- MANIFEST.in | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index a581012..7fc21b9 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,5 @@ -include LICENSE +include COPYING +include COPYING.LESSER include AUTHORS include README.rst -include requirements.txt \ No newline at end of file +include requirements.txt From eca29affee16e5dc8878ea4b716d3abd4a8a6a62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 21 Feb 2017 21:53:27 +0100 Subject: [PATCH 107/216] version: use correct year in date --- xtuml/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/version.py b/xtuml/version.py index 17500a0..0867211 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -17,7 +17,7 @@ # License along with pyxtuml. If not, see . name = 'pyxtuml' -date = '2016-02-21' +date = '2017-02-21' version = '0.9' release = '0.9.5' From eb6e83f604826a3882058a2ec29d10976098f481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 8 Jan 2017 10:56:39 +0100 Subject: [PATCH 108/216] cosmetics --- xtuml/load.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index 6b3d5de..d687503 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -105,6 +105,7 @@ def __init__(self, kind, values, names): self.values = values self.names = names + class CreateClassStmt(object): def __init__(self, kind, attributes): @@ -157,23 +158,24 @@ class ModelLoader(object): ''' reserved = ( 'CREATE', + 'FALSE', + 'FROM', + 'INDEX', 'INSERT', 'INTO', - 'VALUES', - 'TABLE', - 'ROP', + 'ON', + 'PHRASE', 'REF_ID', - 'FROM', + 'ROP', + 'TABLE', 'TO', - 'PHRASE', - 'UNIQUE', - 'INDEX', - 'ON', 'TRUE', - 'FALSE' + 'UNIQUE', + 'VALUES' ) tokens = reserved + ( + 'CARDINALITY', 'COMMA', 'FRACTION', 'GUID', @@ -184,8 +186,7 @@ class ModelLoader(object): 'RPAREN', 'RELID', 'SEMICOLON', - 'STRING', - 'CARDINALITY', + 'STRING' ) # A string containing ignored characters (spaces and tabs). From 2be09f24ce81dd73a614257ec3d61f7902aef17f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 8 Jan 2017 12:29:14 +0100 Subject: [PATCH 109/216] meta: preserve order of attributes in indices --- xtuml/meta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 3837dc8..0e19a87 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -1058,7 +1058,7 @@ def define_unique_identifier(self, kind, name, *named_attributes): name = 'I%d' % name metaclass = self.find_metaclass(kind) - metaclass.indices[name] = set(named_attributes) + metaclass.indices[name] = tuple(named_attributes) def select_many(self, kind, where_clause=None): ''' From 7e0f993a0ecac28d5c3e61f64660b4668c76d9d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 8 Jan 2017 12:31:07 +0100 Subject: [PATCH 110/216] meta: add convenient method for obtaining the type of an attribute --- xtuml/meta.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/xtuml/meta.py b/xtuml/meta.py index 0e19a87..6669cc1 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -379,6 +379,15 @@ def attribute_names(self): Obtain an ordered list of all attribute names. ''' return [name for name, _ in self.attributes] + + def attribute_type(self, attribute_name): + ''' + Obtain the type of an attribute. + ''' + attribute_name = attribute_name.upper() + for name, ty in self.attributes: + if name.upper() == attribute_name: + return ty def add_link(self, metaclass, rel_id, key_map, phrase, conditional, many, reverse=False): From 9511ea5523460538769b0bf7355f4ab33a8025c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 8 Jan 2017 12:31:28 +0100 Subject: [PATCH 111/216] cosmetics --- xtuml/meta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 6669cc1..b6bd1d7 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -63,7 +63,7 @@ class UnrelateException(MetaException): class UnknownLinkException(MetaException): ''' - An exception that may be thrown when an link is not found. + An exception that may be thrown when a link is not found. ''' def __init__(self, from_kind, to_kind, rel_id, phrase): if phrase: From 722a93272662cc7f64fe3a15a1f1d99ef7526dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 28 May 2017 13:19:36 +0200 Subject: [PATCH 112/216] setup: add install_requires to setup() --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index fc23f83..96b43e4 100755 --- a/setup.py +++ b/setup.py @@ -86,6 +86,7 @@ def run(self): keywords='xtuml bridgepoint', packages=['xtuml', 'bridgepoint'], requires=['ply'], + install_requires=['ply'], cmdclass={'build_py': BuildCommand, 'test': TestCommand} ) From 3733e79110bea52d24140439bc042eaf0af54f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 28 May 2017 13:51:21 +0200 Subject: [PATCH 113/216] bump version --- xtuml/version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/version.py b/xtuml/version.py index 0867211..6985c1d 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -17,8 +17,8 @@ # License along with pyxtuml. If not, see . name = 'pyxtuml' -date = '2017-02-21' +date = '2017-05-28' version = '0.9' -release = '0.9.5' +release = '0.9.6' complete_string = '%s v%s (%s)' % (name, release, date) From 91717ab7b38113239142b6fcb4dd276ccea3a289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 28 May 2017 14:04:45 +0200 Subject: [PATCH 114/216] setup: add ply to setup_requires --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 96b43e4..b96e807 100755 --- a/setup.py +++ b/setup.py @@ -87,6 +87,7 @@ def run(self): packages=['xtuml', 'bridgepoint'], requires=['ply'], install_requires=['ply'], + setup_requires=['ply'], cmdclass={'build_py': BuildCommand, 'test': TestCommand} ) From 4a5fb83371872e2523cc036ada526b926930db73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 28 May 2017 14:05:22 +0200 Subject: [PATCH 115/216] bump version --- xtuml/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/version.py b/xtuml/version.py index 6985c1d..0c95e73 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -19,6 +19,6 @@ name = 'pyxtuml' date = '2017-05-28' version = '0.9' -release = '0.9.6' +release = '0.9.7' complete_string = '%s v%s (%s)' % (name, release, date) From 1c8efadd6c14acafc24e15f1d1d2cfd679bb788f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 28 May 2017 14:08:26 +0200 Subject: [PATCH 116/216] setup: ensure that ply is not imported until the build command is executed --- setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index b96e807..f4c0354 100755 --- a/setup.py +++ b/setup.py @@ -29,9 +29,6 @@ from distutils.core import Command from distutils.command.build_py import build_py -import xtuml -from bridgepoint import oal - logging.basicConfig(level=logging.DEBUG) @@ -39,6 +36,9 @@ class BuildCommand(build_py): def run(self): + import xtuml + from bridgepoint import oal + l = xtuml.ModelLoader() l.input('', name='') l.build_metamodel() From 1cec159b6c8385b2e931529c4a92a0ec76c507c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 28 May 2017 14:08:38 +0200 Subject: [PATCH 117/216] bump version --- xtuml/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/version.py b/xtuml/version.py index 0c95e73..f5b03f5 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -19,6 +19,6 @@ name = 'pyxtuml' date = '2017-05-28' version = '0.9' -release = '0.9.7' +release = '0.9.8' complete_string = '%s v%s (%s)' % (name, release, date) From 5eb461cfda3436b5442cdda389565a72535ddd0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 28 May 2017 14:21:15 +0200 Subject: [PATCH 118/216] setup: remove import dependency to ply --- setup.py | 2 +- xtuml/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index f4c0354..d7e9f06 100755 --- a/setup.py +++ b/setup.py @@ -69,7 +69,7 @@ def run(self): setup(name='pyxtuml', - version=xtuml.version.release, + version='0.9.9', # ensure that this is the same as in xtuml.version description='Library for parsing, manipulating, and generating BridgePoint xtUML models', author='John Törnblom', author_email='john.tornblom@gmail.com', diff --git a/xtuml/version.py b/xtuml/version.py index f5b03f5..6bb4ab1 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -19,6 +19,6 @@ name = 'pyxtuml' date = '2017-05-28' version = '0.9' -release = '0.9.8' +release = '0.9.9' # ensure that this is the same as in setup.py complete_string = '%s v%s (%s)' % (name, release, date) From a19c67d9efcabbcdcda4089bc30d4e5af7f5e8c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 01:15:11 +0200 Subject: [PATCH 119/216] update ooaofooa to version 5.2 --- bridgepoint/ooaofooa.py | 6189 ++++++++++++++++++--------------------- 1 file changed, 2812 insertions(+), 3377 deletions(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 41384b8..3b6e66f 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -29,3434 +29,2869 @@ logger = logging.getLogger(__name__) -__version__ = 4.2 +__version__ = 5.2 schema = ''' -CREATE TABLE S_AW ( - Brg_ID UNIQUE_ID, - Sync_ID UNIQUE_ID ); -CREATE TABLE V_LOC ( - Id UNIQUE_ID, - LineNumber INTEGER, - StartPosition INTEGER, - EndPosition INTEGER, - Var_ID UNIQUE_ID ); -CREATE TABLE V_VAR ( - Var_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Name STRING, - Declared BOOLEAN, - DT_ID UNIQUE_ID ); -CREATE TABLE V_VAL ( - Value_ID UNIQUE_ID, - isLValue BOOLEAN, - isImplicit BOOLEAN, - LineNumber INTEGER, - StartPosition INTEGER, - EndPosition INTEGER, - firstParameterLabelLineNumber INTEGER, - firstParameterLabelColumn INTEGER, - currentLaterParameterLabelLineNumber INTEGER, - currentLaterParameterLabelColumn INTEGER, - DT_ID UNIQUE_ID, - Block_ID UNIQUE_ID ); -CREATE TABLE V_UNY ( - Value_ID UNIQUE_ID, - Operand_Value_ID UNIQUE_ID, - Operator STRING ); -CREATE TABLE V_TRN ( - Var_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - Dimensions STRING ); -CREATE TABLE V_TVL ( - Value_ID UNIQUE_ID, - Var_ID UNIQUE_ID ); -CREATE TABLE V_SCV ( - Value_ID UNIQUE_ID, - Const_ID UNIQUE_ID, - DT_ID UNIQUE_ID ); -CREATE TABLE V_SLR ( - Value_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - Op_Value_ID UNIQUE_ID ); -CREATE TABLE V_PVL ( - Value_ID UNIQUE_ID, - BParm_ID UNIQUE_ID, - SParm_ID UNIQUE_ID, - TParm_ID UNIQUE_ID, - PP_Id UNIQUE_ID ); -CREATE TABLE V_TRV ( - Value_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - ParmListOK BOOLEAN, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER ); -CREATE TABLE V_MSV ( - Value_ID UNIQUE_ID, - PEP_Id UNIQUE_ID, - REP_Id UNIQUE_ID, - ParmListOK BOOLEAN, - ownerNameLineNumber INTEGER, - ownerNameColumn INTEGER, - Target_Value_ID UNIQUE_ID ); -CREATE TABLE V_MVL ( - Value_ID UNIQUE_ID, - Root_Value_ID UNIQUE_ID, - Member_ID UNIQUE_ID, - DT_DT_ID UNIQUE_ID ); -CREATE TABLE V_LST ( - Value_ID UNIQUE_ID, - Value STRING ); -CREATE TABLE V_LRL ( - Value_ID UNIQUE_ID, - Value STRING ); -CREATE TABLE V_LIN ( - Value_ID UNIQUE_ID, - Value STRING ); -CREATE TABLE V_LEN ( - Value_ID UNIQUE_ID, - Enum_ID UNIQUE_ID, - dataTypeNameLineNumber INTEGER, - dataTypeNameColumn INTEGER ); -CREATE TABLE V_LBO ( - Value_ID UNIQUE_ID, - Value STRING ); -CREATE TABLE V_ISR ( - Value_ID UNIQUE_ID, - Var_ID UNIQUE_ID ); -CREATE TABLE V_INS ( - Var_ID UNIQUE_ID, - Obj_ID UNIQUE_ID ); -CREATE TABLE V_IRF ( - Value_ID UNIQUE_ID, - Var_ID UNIQUE_ID ); -CREATE TABLE V_INT ( - Var_ID UNIQUE_ID, - IsImplicitInFor BOOLEAN, - Obj_ID UNIQUE_ID ); -CREATE TABLE V_FNV ( - Value_ID UNIQUE_ID, - Sync_ID UNIQUE_ID, - ParmListOK BOOLEAN ); -CREATE TABLE V_EPR ( - Value_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMedi_ID UNIQUE_ID, - PP_Id UNIQUE_ID ); -CREATE TABLE V_EDV ( - Value_ID UNIQUE_ID ); -CREATE TABLE V_BRV ( - Value_ID UNIQUE_ID, - Brg_ID UNIQUE_ID, - ParmListOK BOOLEAN, - externalEntityKeyLettersLineNumber INTEGER, - externalEntityKeyLettersColumn INTEGER ); -CREATE TABLE V_BIN ( - Value_ID UNIQUE_ID, - Right_Value_ID UNIQUE_ID, - Left_Value_ID UNIQUE_ID, - Operator STRING ); -CREATE TABLE V_AVL ( - Value_ID UNIQUE_ID, - Root_Value_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID ); -CREATE TABLE V_ALV ( - Value_ID UNIQUE_ID, - Array_Value_ID UNIQUE_ID ); -CREATE TABLE V_AER ( - Value_ID UNIQUE_ID, - Root_Value_ID UNIQUE_ID, - Index_Value_ID UNIQUE_ID ); -CREATE TABLE V_PAR ( - Value_ID UNIQUE_ID, - Statement_ID UNIQUE_ID, - Invocation_Value_ID UNIQUE_ID, - Name STRING, - Next_Value_ID UNIQUE_ID, - labelLineNumber INTEGER, - labelColumn INTEGER ); -CREATE TABLE UC_UIU ( - Package_ID UNIQUE_ID ); -CREATE TABLE UC_UCC ( - Package_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - SS_ID UNIQUE_ID, - Parent_Package_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Sys_ID UNIQUE_ID, - Component_Package_ID UNIQUE_ID, - Component_Id UNIQUE_ID ); -CREATE TABLE UC_UCA ( - Assoc_ID UNIQUE_ID, - Source_Part_ID UNIQUE_ID, - Destination_Part_ID UNIQUE_ID ); -CREATE TABLE UC_PIUC ( - Package_ID UNIQUE_ID, - Part_ID UNIQUE_ID ); -CREATE TABLE UC_I ( - Assoc_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE UC_G ( - Assoc_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE UC_E ( - Assoc_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE UC_BA ( - Assoc_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE UC_AIUC ( - Assoc_ID UNIQUE_ID, - Package_ID UNIQUE_ID ); -CREATE TABLE SLD_SDP ( - Sys_ID UNIQUE_ID, - Package_ID UNIQUE_ID ); -CREATE TABLE SLD_SDINP ( - Package_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - Sys_ID UNIQUE_ID ); -CREATE TABLE SLD_SCINP ( - Sys_ID UNIQUE_ID, - Package_ID UNIQUE_ID, - Constant_Spec_ID UNIQUE_ID ); -CREATE TABLE O_RTIDA ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Oid_ID INTEGER, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID ); -CREATE TABLE O_RATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - BAttr_ID UNIQUE_ID, - BObj_ID UNIQUE_ID, - Ref_Mode INTEGER, - BaseAttrName STRING ); -CREATE TABLE O_TPARM ( - TParm_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID, - Name STRING, - DT_ID UNIQUE_ID, - By_Ref INTEGER, - Dimensions STRING, - Previous_TParm_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE O_TFR ( - Tfr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID, - Instance_Based INTEGER, - Action_Semantics_internal STRING, - Suc_Pars INTEGER, - Return_Dimensions STRING, - Previous_Tfr_ID UNIQUE_ID ); +CREATE TABLE ACT_ACT ( + Action_ID UNIQUE_ID, + Type STRING, + LoopLevel INTEGER, + Block_ID UNIQUE_ID, + CurrentScope_ID UNIQUE_ID, + return_value INTEGER, + Label STRING, + Parsed_Block_ID UNIQUE_ID +); +CREATE TABLE ACT_AI ( + Statement_ID UNIQUE_ID, + r_Value_ID UNIQUE_ID, + l_Value_ID UNIQUE_ID, + attributeLineNumber INTEGER, + attributeColumn INTEGER +); +CREATE TABLE ACT_BLK ( + Block_ID UNIQUE_ID, + WhereSpecOK BOOLEAN, + InWhereSpec BOOLEAN, + SelectedFound BOOLEAN, + TempBuffer STRING, + SupData1 STRING, + SupData2 STRING, + CurrentLine INTEGER, + CurrentCol INTEGER, + currentKeyLettersLineNumber INTEGER, + currentKeyLettersColumn INTEGER, + currentParameterAssignmentNameLineNumber INTEGER, + currentParameterAssignmentNameColumn INTEGER, + currentAssociationNumberLineNumber INTEGER, + currentAssociationNumberColumn INTEGER, + currentAssociationPhraseLineNumber INTEGER, + currentAssociationPhraseColumn INTEGER, + currentDataTypeNameLineNumber INTEGER, + currentDataTypeNameColumn INTEGER, + blockInStackFrameCreated BOOLEAN, + Action_ID UNIQUE_ID, + Parsed_Action_ID UNIQUE_ID +); +CREATE TABLE ACT_BRB ( + Action_ID UNIQUE_ID, + Brg_ID UNIQUE_ID +); +CREATE TABLE ACT_BRG ( + Statement_ID UNIQUE_ID, + Brg_ID UNIQUE_ID, + bridgeNameLineNumber INTEGER, + bridgeNameColumn INTEGER, + externalEntityKeyLettersLineNumber INTEGER, + externalEntityKeyLettersColumn INTEGER +); +CREATE TABLE ACT_BRK ( + Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_CNV ( + Statement_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER +); +CREATE TABLE ACT_CON ( + Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_CR ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + is_implicit BOOLEAN, + Obj_ID UNIQUE_ID, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER +); +CREATE TABLE ACT_CTL ( + Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_DAB ( + Action_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + AttributeWritten BOOLEAN +); +CREATE TABLE ACT_DEL ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE ACT_E ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + If_Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_EL ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + If_Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_FIO ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + is_implicit BOOLEAN, + cardinality STRING, + Obj_ID UNIQUE_ID, + extentLineNumber INTEGER, + extentColumn INTEGER +); +CREATE TABLE ACT_FIW ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + is_implicit BOOLEAN, + cardinality STRING, + Where_Clause_Value_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + extentLineNumber INTEGER, + extentColumn INTEGER +); +CREATE TABLE ACT_FNB ( + Action_ID UNIQUE_ID, + Sync_ID UNIQUE_ID +); +CREATE TABLE ACT_FNC ( + Statement_ID UNIQUE_ID, + Sync_ID UNIQUE_ID, + functionNameLineNumber INTEGER, + functionNameColumn INTEGER +); +CREATE TABLE ACT_FOR ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + is_implicit BOOLEAN, + Loop_Var_ID UNIQUE_ID, + Set_Var_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE ACT_IF ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + Elif_Statement_ID UNIQUE_ID, + Else_Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_IOP ( + Statement_ID UNIQUE_ID, + opNameLineNumber INTEGER, + opNameColumn INTEGER, + ownerNameLineNumber INTEGER, + ownerNameColumn INTEGER, + ProvidedOp_Id UNIQUE_ID, + RequiredOp_Id UNIQUE_ID, + Value_ID UNIQUE_ID +); +CREATE TABLE ACT_LNK ( + Link_ID UNIQUE_ID, + Rel_Phrase STRING, + Statement_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + Next_Link_ID UNIQUE_ID, + Mult INTEGER, + Obj_ID UNIQUE_ID, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + phraseLineNumber INTEGER, + phraseColumn INTEGER +); +CREATE TABLE ACT_OPB ( + Action_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID +); +CREATE TABLE ACT_POB ( + Action_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE ACT_PSB ( + Action_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE ACT_REL ( + Statement_ID UNIQUE_ID, + One_Side_Var_ID UNIQUE_ID, + Other_Side_Var_ID UNIQUE_ID, + relationship_phrase STRING, + Rel_ID UNIQUE_ID, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + associationPhraseLineNumber INTEGER, + associationPhraseColumn INTEGER +); +CREATE TABLE ACT_RET ( + Statement_ID UNIQUE_ID, + Value_ID UNIQUE_ID +); +CREATE TABLE ACT_ROB ( + Action_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE ACT_RSB ( + Action_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE ACT_RU ( + Statement_ID UNIQUE_ID, + One_Side_Var_ID UNIQUE_ID, + Other_Side_Var_ID UNIQUE_ID, + Associative_Var_ID UNIQUE_ID, + relationship_phrase STRING, + Rel_ID UNIQUE_ID, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + associationPhraseLineNumber INTEGER, + associationPhraseColumn INTEGER +); +CREATE TABLE ACT_SAB ( + Action_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Act_ID UNIQUE_ID +); +CREATE TABLE ACT_SEL ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + is_implicit BOOLEAN, + cardinality STRING, + Value_ID UNIQUE_ID +); +CREATE TABLE ACT_SGN ( + Statement_ID UNIQUE_ID, + sigNameLineNumber INTEGER, + sigNameColumn INTEGER, + ownerNameLineNumber INTEGER, + ownerNameColumn INTEGER, + ProvidedSig_Id UNIQUE_ID, + RequiredSig_Id UNIQUE_ID, + Value_ID UNIQUE_ID +); +CREATE TABLE ACT_SMT ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Previous_Statement_ID UNIQUE_ID, + LineNumber INTEGER, + StartPosition INTEGER, + Label STRING +); +CREATE TABLE ACT_SR ( + Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_SRW ( + Statement_ID UNIQUE_ID, + Where_Clause_Value_ID UNIQUE_ID +); +CREATE TABLE ACT_TAB ( + Action_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Act_ID UNIQUE_ID +); +CREATE TABLE ACT_TFM ( + Statement_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + operationNameLineNumber INTEGER, + operationNameColumn INTEGER, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER +); +CREATE TABLE ACT_UNR ( + Statement_ID UNIQUE_ID, + One_Side_Var_ID UNIQUE_ID, + Other_Side_Var_ID UNIQUE_ID, + relationship_phrase STRING, + Rel_ID UNIQUE_ID, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + associationPhraseLineNumber INTEGER, + associationPhraseColumn INTEGER +); +CREATE TABLE ACT_URU ( + Statement_ID UNIQUE_ID, + One_Side_Var_ID UNIQUE_ID, + Other_Side_Var_ID UNIQUE_ID, + Associative_Var_ID UNIQUE_ID, + relationship_phrase STRING, + Rel_ID UNIQUE_ID, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + associationPhraseLineNumber INTEGER, + associationPhraseColumn INTEGER +); +CREATE TABLE ACT_WHL ( + Statement_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + Block_ID UNIQUE_ID +); +CREATE TABLE A_ACT ( + Id UNIQUE_ID +); +CREATE TABLE A_AE ( + Id UNIQUE_ID +); +CREATE TABLE A_AEA ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_AF ( + Id UNIQUE_ID, + Descrip STRING +); +CREATE TABLE A_AP ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_ATE ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_CTL ( + Id UNIQUE_ID +); +CREATE TABLE A_DM ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_E ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID, + Guard STRING, + Descrip STRING, + TargetId UNIQUE_ID, + SourceId UNIQUE_ID +); +CREATE TABLE A_FF ( + Id UNIQUE_ID, + Descrip STRING +); +CREATE TABLE A_FJ ( + Id UNIQUE_ID, + Descrip STRING, + GuardCondition STRING +); +CREATE TABLE A_GA ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_INI ( + Id UNIQUE_ID, + Descrip STRING +); +CREATE TABLE A_N ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID +); +CREATE TABLE A_OBJ ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_SS ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE BP_BP ( + Breakpoint_ID UNIQUE_ID, + enabled BOOLEAN, + condition_enabled BOOLEAN, + hit_count INTEGER, + target_hit_count INTEGER, + for_step BOOLEAN +); +CREATE TABLE BP_CON ( + Breakpoint_ID UNIQUE_ID, + Expression STRING +); +CREATE TABLE BP_EV ( + Breakpoint_ID UNIQUE_ID, + onEnqueue BOOLEAN, + onDequeue BOOLEAN, + onEventIgnored BOOLEAN, + onCantHappen BOOLEAN, + SMevt_ID UNIQUE_ID +); +CREATE TABLE BP_OAL ( + Statement_ID UNIQUE_ID, + Breakpoint_ID UNIQUE_ID +); +CREATE TABLE BP_ST ( + Breakpoint_ID UNIQUE_ID, + onEntry BOOLEAN, + onExit BOOLEAN, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID +); +CREATE TABLE CA_ACC ( + APath_ID UNIQUE_ID, + SS_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + IObj_ID UNIQUE_ID +); +CREATE TABLE CA_COMM ( + CPath_ID UNIQUE_ID, + SS_ID UNIQUE_ID +); +CREATE TABLE CA_EESMC ( + CPath_ID UNIQUE_ID, + EEmod_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + SM_ID UNIQUE_ID +); +CREATE TABLE CA_EESME ( + CPath_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE CA_SMEEA ( + APath_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEmod_ID UNIQUE_ID +); +CREATE TABLE CA_SMEEC ( + CPath_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEmod_ID UNIQUE_ID +); +CREATE TABLE CA_SMEED ( + APath_ID UNIQUE_ID, + EEdi_ID UNIQUE_ID, + EE_ID UNIQUE_ID +); +CREATE TABLE CA_SMEEE ( + CPath_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEevt_ID UNIQUE_ID +); +CREATE TABLE CA_SMOA ( + APath_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + IObj_ID UNIQUE_ID +); +CREATE TABLE CA_SMOAA ( + APath_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE CA_SMSMC ( + CPath_ID UNIQUE_ID, + OSM_ID UNIQUE_ID, + DSM_ID UNIQUE_ID, + OIObj_ID UNIQUE_ID, + DIObj_ID UNIQUE_ID +); +CREATE TABLE CA_SMSME ( + CPath_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE CL_IC ( + Id UNIQUE_ID, + AssignedComp_Id UNIQUE_ID, + ParentComp_Id UNIQUE_ID, + Component_Package_ID UNIQUE_ID, + Mult INTEGER, + ClassifierName STRING, + Name STRING, + Descrip STRING +); +CREATE TABLE CL_IIR ( + Id UNIQUE_ID, + Ref_Id UNIQUE_ID, + CL_POR_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE CL_IP ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE CL_IPINS ( + Satisfaction_Id UNIQUE_ID, + ImportedProvision_Id UNIQUE_ID +); +CREATE TABLE CL_IR ( + Id UNIQUE_ID, + Satisfaction_Element_Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE CL_POR ( + CL_IC_Id UNIQUE_ID, + C_PO_Id UNIQUE_ID, + Name STRING, + Id UNIQUE_ID +); +CREATE TABLE CNST_CSP ( + Constant_Spec_ID UNIQUE_ID, + InformalGroupName STRING, + Descrip STRING +); +CREATE TABLE CNST_LFSC ( + Const_ID UNIQUE_ID, + DT_ID UNIQUE_ID +); +CREATE TABLE CNST_LSC ( + Const_ID UNIQUE_ID, + DT_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE CNST_SYC ( + Const_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID, + Constant_Spec_ID UNIQUE_ID, + Previous_Const_ID UNIQUE_ID, + Previous_DT_DT_ID UNIQUE_ID +); +CREATE TABLE COMM_LNK ( + Link_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + Numb STRING, + Descrip STRING, + StartText STRING, + EndText STRING, + isFormal BOOLEAN, + StartVisibility INTEGER, + EndVisibility INTEGER, + Start_Part_ID UNIQUE_ID, + Destination_Part_ID UNIQUE_ID +); +CREATE TABLE CSME_CIE ( + CIE_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Package_ID UNIQUE_ID, + Label STRING +); +CREATE TABLE C_AS ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Direction INTEGER, + Previous_Id UNIQUE_ID +); +CREATE TABLE C_C ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID, + NestedComponent_Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Mult INTEGER, + Root_Package_ID UNIQUE_ID, + isRealized BOOLEAN, + Realized_Class_Path STRING +); +CREATE TABLE C_DG ( + Id UNIQUE_ID, + Name STRING +); +CREATE TABLE C_EP ( + Id UNIQUE_ID, + Interface_Id UNIQUE_ID, + Direction INTEGER, + Name STRING, + Descrip STRING +); +CREATE TABLE C_I ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE C_IO ( + Id UNIQUE_ID, + DT_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Direction INTEGER, + Return_Dimensions STRING, + Previous_Id UNIQUE_ID +); +CREATE TABLE C_IR ( + Id UNIQUE_ID, + Formal_Interface_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID, + Port_Id UNIQUE_ID +); +CREATE TABLE C_P ( + Provision_Id UNIQUE_ID, + Name STRING, + InformalName STRING, + Descrip STRING, + pathFromComponent STRING +); +CREATE TABLE C_PO ( + Id UNIQUE_ID, + Component_Id UNIQUE_ID, + Name STRING, + Mult INTEGER, + DoNotShowPortOnCanvas BOOLEAN +); +CREATE TABLE C_PP ( + PP_Id UNIQUE_ID, + Signal_Id UNIQUE_ID, + DT_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + By_Ref INTEGER, + Dimensions STRING, + Previous_PP_Id UNIQUE_ID +); +CREATE TABLE C_R ( + Requirement_Id UNIQUE_ID, + Name STRING, + Descrip STRING, + InformalName STRING, + reversePathFromComponent STRING +); +CREATE TABLE C_RID ( + Reference_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID +); +CREATE TABLE C_SF ( + Id UNIQUE_ID, + Requirement_Id UNIQUE_ID, + Provision_Id UNIQUE_ID, + Descrip STRING, + Label STRING +); +CREATE TABLE EP_PKG ( + Package_ID UNIQUE_ID, + Sys_ID UNIQUE_ID, + Direct_Sys_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Num_Rng INTEGER +); +CREATE TABLE E_CEA ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_CEC ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_CEE ( + Statement_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEevt_ID UNIQUE_ID +); +CREATE TABLE E_CEI ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE E_CES ( + Statement_ID UNIQUE_ID, + is_implicit BOOLEAN, + Var_ID UNIQUE_ID +); +CREATE TABLE E_CSME ( + Statement_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE E_ESS ( + Statement_ID UNIQUE_ID, + ParmListOK BOOLEAN, + PEIndicated BOOLEAN, + eventDerivedLabelLineNumber INTEGER, + eventDerivedLabelColumn INTEGER, + eventMeaningLineNumber INTEGER, + eventMeaningColumn INTEGER, + eventTargetKeyLettersLineNumber INTEGER, + eventTargetKeyLettersColumn INTEGER, + firstEventDataItemNameLineNumber INTEGER, + firstEventDataItemNameColumn INTEGER, + currentLaterEventDataItemNameLineNumber INTEGER, + currentLaterEventDataItemNameColumn INTEGER +); +CREATE TABLE E_GAR ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_GEC ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_GEE ( + Statement_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEevt_ID UNIQUE_ID +); +CREATE TABLE E_GEN ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE E_GES ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_GPR ( + Statement_ID UNIQUE_ID, + Value_ID UNIQUE_ID +); +CREATE TABLE E_GSME ( + Statement_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE G_EIS ( + Element_ID UNIQUE_ID, + Sys_ID UNIQUE_ID +); +CREATE TABLE IA_UCP ( + Part_ID UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE I_AVL ( + Inst_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + Value STRING, + Label STRING, + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE I_BSF ( + Block_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID, + Statement_ID UNIQUE_ID, + isExecuting BOOLEAN +); +CREATE TABLE I_CIN ( + Container_ID UNIQUE_ID +); +CREATE TABLE I_DIV ( + DIV_ID UNIQUE_ID, + Event_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMedi_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE I_EQE ( + Event_Queue_Entry_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Event_ID UNIQUE_ID, + Next_Event_Queue_Entry_ID UNIQUE_ID +); +CREATE TABLE I_EVI ( + Event_ID UNIQUE_ID, + isExecuting BOOLEAN, + isCreation BOOLEAN, + SMevt_ID UNIQUE_ID, + Target_Inst_ID UNIQUE_ID, + nextEvent_ID UNIQUE_ID, + Sent_By_Inst_ID UNIQUE_ID, + next_self_Event_ID UNIQUE_ID, + Sent_By_CIE_ID UNIQUE_ID, + CIE_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Originating_Execution_Engine_ID UNIQUE_ID, + Label STRING +); +CREATE TABLE I_EXE ( + Running BOOLEAN, + Execution_Engine_ID UNIQUE_ID, + Dom_ID UNIQUE_ID, + Component_Id UNIQUE_ID, + Package_ID UNIQUE_ID, + Next_Unique_ID INTEGER, + Next_Instance_ID INTEGER, + ImportedComponent_Id UNIQUE_ID, + Label STRING, + Container_ID UNIQUE_ID +); +CREATE TABLE I_ICQE ( + Stack_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID +); +CREATE TABLE I_INS ( + Inst_ID UNIQUE_ID, + Name STRING, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Trans_ID UNIQUE_ID, + CIE_ID UNIQUE_ID, + Label STRING, + Default_Name STRING +); +CREATE TABLE I_LIP ( + Participation_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + Inst_ID UNIQUE_ID, + Label STRING +); +CREATE TABLE I_LNK ( + Link_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + Participation_ID UNIQUE_ID, + Formalizing_Participation_ID UNIQUE_ID, + Associator_Participation_ID UNIQUE_ID +); +CREATE TABLE I_MON ( + Execution_Engine_ID UNIQUE_ID, + Inst_ID UNIQUE_ID, + enabled BOOLEAN +); +CREATE TABLE I_RCH ( + Channel_Id UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + other_Execution_Engine_ID UNIQUE_ID, + Satisfaction_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID, + Next_provider_Channel_Id UNIQUE_ID +); +CREATE TABLE I_SQE ( + Self_Queue_Entry_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Event_ID UNIQUE_ID, + Next_Self_Queue_Entry_ID UNIQUE_ID +); +CREATE TABLE I_STACK ( + Stack_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + runState INTEGER, + suspendReason STRING +); +CREATE TABLE I_STF ( + Stack_Frame_ID UNIQUE_ID, + Created_For_Wired_Bridge BOOLEAN, + readyForInterrupt BOOLEAN, + Bridge_Caller_Stack_Frame_ID UNIQUE_ID, + Child_Stack_Frame_ID UNIQUE_ID, + Top_Stack_Frame_Stack_ID UNIQUE_ID, + Stack_ID UNIQUE_ID, + Inst_ID UNIQUE_ID, + Value_Q_Stack_ID UNIQUE_ID, + Blocking_Stack_Frame_ID UNIQUE_ID +); +CREATE TABLE I_TIM ( + Timer_ID UNIQUE_ID, + delay INTEGER, + running BOOLEAN, + recurring BOOLEAN, + Event_ID UNIQUE_ID, + Label STRING +); +CREATE TABLE I_VSF ( + ValueInStackFrame_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID +); +CREATE TABLE L_IIR ( + Inst_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID, + Next_Inst_ID UNIQUE_ID +); +CREATE TABLE L_IWC ( + Local_ID UNIQUE_ID, + Inst_ID UNIQUE_ID, + Next_Inst_ID UNIQUE_ID +); +CREATE TABLE L_LCL ( + Local_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID, + TParm_ID UNIQUE_ID, + BParm_ID UNIQUE_ID, + SParm_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE L_LCR ( + Local_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID, + Inst_ID UNIQUE_ID +); +CREATE TABLE L_LSR ( + Local_ID UNIQUE_ID +); +CREATE TABLE L_LVL ( + Local_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE MSG_A ( + Arg_ID UNIQUE_ID, + Informal_Msg_ID UNIQUE_ID, + Formal_Msg_ID UNIQUE_ID, + Label STRING, + Value STRING, + InformalName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE MSG_AM ( + Msg_ID UNIQUE_ID, + InformalName STRING, + Descrip STRING, + GuardCondition STRING, + DurationObservation STRING, + DurationConstraint STRING, + isFormal BOOLEAN, + Label STRING, + SequenceNumb STRING +); +CREATE TABLE MSG_B ( + Msg_ID UNIQUE_ID, + Brg_ID UNIQUE_ID +); +CREATE TABLE MSG_BA ( + Arg_ID UNIQUE_ID, + BParm_ID UNIQUE_ID +); +CREATE TABLE MSG_E ( + Msg_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE MSG_EA ( + Arg_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMedi_ID UNIQUE_ID +); +CREATE TABLE MSG_EPA ( + Arg_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE MSG_F ( + Msg_ID UNIQUE_ID, + Sync_ID UNIQUE_ID +); +CREATE TABLE MSG_FA ( + Arg_ID UNIQUE_ID, + SParm_ID UNIQUE_ID +); +CREATE TABLE MSG_IA ( + Arg_ID UNIQUE_ID +); +CREATE TABLE MSG_IAM ( + Msg_ID UNIQUE_ID +); +CREATE TABLE MSG_IOP ( + Msg_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE MSG_ISM ( + Msg_ID UNIQUE_ID +); +CREATE TABLE MSG_M ( + Msg_ID UNIQUE_ID, + Receiver_Part_ID UNIQUE_ID, + Sender_Part_ID UNIQUE_ID +); +CREATE TABLE MSG_O ( + Msg_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID +); +CREATE TABLE MSG_OA ( + Arg_ID UNIQUE_ID, + TParm_ID UNIQUE_ID +); +CREATE TABLE MSG_R ( + Msg_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + GuardCondition STRING, + ResultTarget STRING, + ReturnValue STRING, + SequenceNumb STRING +); +CREATE TABLE MSG_SIG ( + Msg_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE MSG_SM ( + Msg_ID UNIQUE_ID, + InformalName STRING, + Descrip STRING, + GuardCondition STRING, + ResultTarget STRING, + ReturnValue STRING, + isFormal BOOLEAN, + Label STRING, + SequenceNumb STRING +); +CREATE TABLE O_ATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + PAttr_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Prefix STRING, + Root_Nam STRING, + Pfx_Mode INTEGER, + DT_ID UNIQUE_ID, + Dimensions STRING, + DefaultValue STRING +); +CREATE TABLE O_BATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE O_DBATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE O_ID ( + Oid_ID INTEGER, + Obj_ID UNIQUE_ID +); +CREATE TABLE O_IOBJ ( + IObj_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Modl_Typ INTEGER, + SS_ID UNIQUE_ID, + Obj_Name STRING, + Obj_KL STRING +); CREATE TABLE O_NBATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID ); + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); CREATE TABLE O_OBJ ( - Obj_ID UNIQUE_ID, - Name STRING, - Numb INTEGER, - Key_Lett STRING, - Descrip STRING, - SS_ID UNIQUE_ID ); -CREATE TABLE O_IOBJ ( - IObj_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Modl_Typ INTEGER, - SS_ID UNIQUE_ID, - Obj_Name STRING, - Obj_KL STRING ); -CREATE TABLE O_DBATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Action_Semantics_internal STRING, - Suc_Pars INTEGER ); + Obj_ID UNIQUE_ID, + Name STRING, + Numb INTEGER, + Key_Lett STRING, + Descrip STRING, + SS_ID UNIQUE_ID +); CREATE TABLE O_OIDA ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Oid_ID INTEGER, - localAttributeName STRING ); -CREATE TABLE O_ID ( - Oid_ID INTEGER, - Obj_ID UNIQUE_ID ); -CREATE TABLE O_BATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID ); + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Oid_ID INTEGER, + localAttributeName STRING +); +CREATE TABLE O_RATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + BAttr_ID UNIQUE_ID, + BObj_ID UNIQUE_ID, + Ref_Mode INTEGER, + BaseAttrName STRING +); CREATE TABLE O_REF ( - Obj_ID UNIQUE_ID, - RObj_ID UNIQUE_ID, - ROid_ID INTEGER, - RAttr_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - ROIR_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - ARef_ID UNIQUE_ID, - PARef_ID UNIQUE_ID, - Is_Cstrd BOOLEAN, - Descrip STRING, - RObj_Name STRING, - RAttr_Name STRING, - Rel_Name STRING ); -CREATE TABLE O_ATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - PAttr_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Prefix STRING, - Root_Nam STRING, - Pfx_Mode INTEGER, - DT_ID UNIQUE_ID, - Dimensions STRING, - DefaultValue STRING ); -CREATE TABLE SM_TAH ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Trans_ID UNIQUE_ID ); -CREATE TABLE SM_TXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID ); -CREATE TABLE SM_SDI ( - SMedi_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - SM_ID UNIQUE_ID ); -CREATE TABLE SM_STATE ( - SMstt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Name STRING, - Numb INTEGER, - Final INTEGER ); -CREATE TABLE SM_EVTDI ( - SMedi_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID, - Dimensions STRING, - SMevt_ID UNIQUE_ID, - Previous_SMedi_ID UNIQUE_ID ); + Obj_ID UNIQUE_ID, + RObj_ID UNIQUE_ID, + ROid_ID INTEGER, + RAttr_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + ROIR_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + ARef_ID UNIQUE_ID, + PARef_ID UNIQUE_ID, + Is_Cstrd BOOLEAN, + Descrip STRING, + RObj_Name STRING, + RAttr_Name STRING, + Rel_Name STRING +); +CREATE TABLE O_RTIDA ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Oid_ID INTEGER, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID +); +CREATE TABLE O_TFR ( + Tfr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID, + Instance_Based INTEGER, + Action_Semantics_internal STRING, + Suc_Pars INTEGER, + Return_Dimensions STRING, + Previous_Tfr_ID UNIQUE_ID +); +CREATE TABLE O_TPARM ( + TParm_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID, + Name STRING, + DT_ID UNIQUE_ID, + By_Ref INTEGER, + Dimensions STRING, + Previous_TParm_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE PA_DIC ( + Component_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID +); +CREATE TABLE PA_SIC ( + Component_Id UNIQUE_ID, + Satisfaction_Id UNIQUE_ID +); +CREATE TABLE PE_PE ( + Element_ID UNIQUE_ID, + Visibility INTEGER, + Package_ID UNIQUE_ID, + Component_ID UNIQUE_ID, + type INTEGER +); +CREATE TABLE RV_AVL ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_CRV ( + RuntimeValue_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID +); +CREATE TABLE RV_IRV ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_RVL ( + RuntimeValue_ID UNIQUE_ID, + Label STRING, + DT_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID +); +CREATE TABLE RV_SCV ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_SMV ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_SVL ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_VIA ( + RuntimeValue_ID UNIQUE_ID, + ContainedRuntimeValue_ID UNIQUE_ID, + Index INTEGER +); +CREATE TABLE RV_VIS ( + RuntimeValue_ID UNIQUE_ID, + ContainedRuntimeValue_ID UNIQUE_ID, + Name STRING +); +CREATE TABLE R_AONE ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_AOTH ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_ASSOC ( + Rel_ID UNIQUE_ID +); +CREATE TABLE R_ASSR ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER +); +CREATE TABLE R_COMP ( + Rel_ID UNIQUE_ID, + Rel_Chn STRING +); +CREATE TABLE R_CONE ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_COTH ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_FORM ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_OIR ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + IObj_ID UNIQUE_ID +); +CREATE TABLE R_PART ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_REL ( + Rel_ID UNIQUE_ID, + Numb INTEGER, + Descrip STRING, + SS_ID UNIQUE_ID +); +CREATE TABLE R_RGO ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID +); +CREATE TABLE R_RTO ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Oid_ID INTEGER +); +CREATE TABLE R_SIMP ( + Rel_ID UNIQUE_ID +); +CREATE TABLE R_SUB ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID +); +CREATE TABLE R_SUBSUP ( + Rel_ID UNIQUE_ID +); +CREATE TABLE R_SUPER ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID +); +CREATE TABLE SM_ACT ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Suc_Pars INTEGER, + Action_Semantics_internal STRING, + Descrip STRING +); +CREATE TABLE SM_AH ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID +); +CREATE TABLE SM_ASM ( + SM_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE SM_CH ( + SMstt_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE SM_CRTXN ( + Trans_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_EIGN ( + SMstt_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Descrip STRING +); CREATE TABLE SM_EVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Numb INTEGER, - Mning STRING, - Is_Lbl_U INTEGER, - Unq_Lbl STRING, - Drv_Lbl STRING, - Descrip STRING ); -CREATE TABLE SM_SM ( - SM_ID UNIQUE_ID, - Descrip STRING, - Config_ID INTEGER ); -CREATE TABLE SM_SEME ( - SMstt_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID ); -CREATE TABLE SM_SGEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Provided_Signal_Id UNIQUE_ID, - Required_Signal_Id UNIQUE_ID, - signal_name STRING ); -CREATE TABLE SM_SEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID ); -CREATE TABLE SM_PEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - localClassName STRING, - localClassKL STRING, - localEventMning STRING ); -CREATE TABLE SM_NLEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - polySMevt_ID UNIQUE_ID, - polySM_ID UNIQUE_ID, - polySMspd_ID UNIQUE_ID, - Local_Meaning STRING ); + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Numb INTEGER, + Mning STRING, + Is_Lbl_U INTEGER, + Unq_Lbl STRING, + Drv_Lbl STRING, + Descrip STRING +); +CREATE TABLE SM_EVTDI ( + SMedi_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID, + Dimensions STRING, + SMevt_ID UNIQUE_ID, + Previous_SMedi_ID UNIQUE_ID +); +CREATE TABLE SM_ISM ( + SM_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE SM_LEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_MEAH ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Trans_ID UNIQUE_ID +); +CREATE TABLE SM_MEALY ( + SM_ID UNIQUE_ID +); +CREATE TABLE SM_MOAH ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID +); +CREATE TABLE SM_MOORE ( + SM_ID UNIQUE_ID +); CREATE TABLE SM_NETXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID ); + Trans_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_NLEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + polySMevt_ID UNIQUE_ID, + polySM_ID UNIQUE_ID, + polySMspd_ID UNIQUE_ID, + Local_Meaning STRING +); CREATE TABLE SM_NSTXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID ); -CREATE TABLE SM_MOORE ( - SM_ID UNIQUE_ID ); -CREATE TABLE SM_MOAH ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID ); -CREATE TABLE SM_MEALY ( - SM_ID UNIQUE_ID ); -CREATE TABLE SM_MEAH ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Trans_ID UNIQUE_ID ); -CREATE TABLE SM_LEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID ); -CREATE TABLE SM_ISM ( - SM_ID UNIQUE_ID, - Obj_ID UNIQUE_ID ); + Trans_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_PEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + localClassName STRING, + localClassKL STRING, + localEventMning STRING +); +CREATE TABLE SM_SDI ( + SMedi_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + SM_ID UNIQUE_ID +); +CREATE TABLE SM_SEME ( + SMstt_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_SEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_SGEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Provided_Signal_Id UNIQUE_ID, + Required_Signal_Id UNIQUE_ID, + signal_name STRING +); +CREATE TABLE SM_SM ( + SM_ID UNIQUE_ID, + Descrip STRING, + Config_ID INTEGER +); +CREATE TABLE SM_STATE ( + SMstt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Name STRING, + Numb INTEGER, + Final INTEGER +); CREATE TABLE SM_SUPDT ( - SMspd_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Non_Local BOOLEAN ); -CREATE TABLE SM_EIGN ( - SMstt_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE SM_CRTXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID ); -CREATE TABLE SM_ASM ( - SM_ID UNIQUE_ID, - Obj_ID UNIQUE_ID ); -CREATE TABLE SM_CH ( - SMstt_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE SM_AH ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID ); -CREATE TABLE SM_ACT ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Suc_Pars INTEGER, - Action_Semantics_internal STRING, - Descrip STRING ); -CREATE TABLE SQ_SIS ( - Package_ID UNIQUE_ID ); -CREATE TABLE SQ_S ( - Package_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - Name STRING, - SS_ID UNIQUE_ID, - Prev_Package_ID UNIQUE_ID, - Descrip STRING, - Sys_ID UNIQUE_ID, - Component_Package_ID UNIQUE_ID, - Component_Id UNIQUE_ID ); -CREATE TABLE SQ_MIS ( - Msg_ID UNIQUE_ID, - Package_ID UNIQUE_ID ); -CREATE TABLE ACT_SRW ( - Statement_ID UNIQUE_ID, - Where_Clause_Value_ID UNIQUE_ID ); -CREATE TABLE ACT_SR ( - Statement_ID UNIQUE_ID ); -CREATE TABLE ACT_FIW ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - is_implicit BOOLEAN, - cardinality STRING, - Where_Clause_Value_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - extentLineNumber INTEGER, - extentColumn INTEGER ); -CREATE TABLE ACT_FIO ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - is_implicit BOOLEAN, - cardinality STRING, - Obj_ID UNIQUE_ID, - extentLineNumber INTEGER, - extentColumn INTEGER ); -CREATE TABLE ACT_SEL ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - is_implicit BOOLEAN, - cardinality STRING, - Value_ID UNIQUE_ID ); -CREATE TABLE ACT_LNK ( - Link_ID UNIQUE_ID, - Rel_Phrase STRING, - Statement_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - Next_Link_ID UNIQUE_ID, - Mult INTEGER, - Obj_ID UNIQUE_ID, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - phraseLineNumber INTEGER, - phraseColumn INTEGER ); -CREATE TABLE SR_SR ( - Id UNIQUE_ID, - Engine_Id UNIQUE_ID, - MatchedParticipant_Id UNIQUE_ID ); -CREATE TABLE SR_NM ( - Id UNIQUE_ID, - Unnamed_Attribute INTEGER ); -CREATE TABLE SR_M ( - Id UNIQUE_ID, - Result_Id UNIQUE_ID ); -CREATE TABLE SR_CMR ( - Id UNIQUE_ID, - startPosition INTEGER, - length INTEGER ); -CREATE TABLE SR_CM ( - Id UNIQUE_ID, - startPosition INTEGER, - matchLength INTEGER ); -CREATE TABLE SQU_R ( - Id UNIQUE_ID ); -CREATE TABLE SQU_Q ( - Id UNIQUE_ID, - Engine_Id UNIQUE_ID, - pattern STRING, - regEx BOOLEAN, - caseSensitive BOOLEAN, - scope INTEGER ); -CREATE TABLE SQU_DE ( - Id UNIQUE_ID ); -CREATE TABLE SQU_D ( - Id UNIQUE_ID ); -CREATE TABLE SQU_A ( - Id UNIQUE_ID ); -CREATE TABLE SP_SE ( - Id UNIQUE_ID, - Participant_Id UNIQUE_ID, - modelRootId STRING, - className STRING, - elementId INTEGER ); -CREATE TABLE SP_SP ( - Id UNIQUE_ID, - Engine_Id UNIQUE_ID ); -CREATE TABLE SP_NS ( - Id UNIQUE_ID, - searchableValue STRING ); -CREATE TABLE SP_DS ( - Id UNIQUE_ID, - searchableValue STRING ); -CREATE TABLE SP_ALS ( - Id UNIQUE_ID, - searchableValue STRING ); -CREATE TABLE SEN_E ( - Id UNIQUE_ID ); -CREATE TABLE SEN_RE ( - Id UNIQUE_ID ); -CREATE TABLE SEN_DE ( - Id UNIQUE_ID ); -CREATE TABLE SEN_DCE ( - Id UNIQUE_ID ); -CREATE TABLE SEN_ALE ( - Id UNIQUE_ID ); -CREATE TABLE ACT_URU ( - Statement_ID UNIQUE_ID, - One_Side_Var_ID UNIQUE_ID, - Other_Side_Var_ID UNIQUE_ID, - Associative_Var_ID UNIQUE_ID, - relationship_phrase STRING, - Rel_ID UNIQUE_ID, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - associationPhraseLineNumber INTEGER, - associationPhraseColumn INTEGER ); -CREATE TABLE ACT_UNR ( - Statement_ID UNIQUE_ID, - One_Side_Var_ID UNIQUE_ID, - Other_Side_Var_ID UNIQUE_ID, - relationship_phrase STRING, - Rel_ID UNIQUE_ID, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - associationPhraseLineNumber INTEGER, - associationPhraseColumn INTEGER ); -CREATE TABLE ACT_RU ( - Statement_ID UNIQUE_ID, - One_Side_Var_ID UNIQUE_ID, - Other_Side_Var_ID UNIQUE_ID, - Associative_Var_ID UNIQUE_ID, - relationship_phrase STRING, - Rel_ID UNIQUE_ID, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - associationPhraseLineNumber INTEGER, - associationPhraseColumn INTEGER ); -CREATE TABLE ACT_REL ( - Statement_ID UNIQUE_ID, - One_Side_Var_ID UNIQUE_ID, - Other_Side_Var_ID UNIQUE_ID, - relationship_phrase STRING, - Rel_ID UNIQUE_ID, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - associationPhraseLineNumber INTEGER, - associationPhraseColumn INTEGER ); -CREATE TABLE PA_SICP ( - ComponentPackage_ID UNIQUE_ID, - Satisfaction_Id UNIQUE_ID ); -CREATE TABLE PA_SIC ( - Component_Id UNIQUE_ID, - Satisfaction_Id UNIQUE_ID ); -CREATE TABLE PA_DIC ( - Component_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID ); -CREATE TABLE PE_PE ( - Element_ID UNIQUE_ID, - Visibility INTEGER, - Package_ID UNIQUE_ID, - Component_ID UNIQUE_ID, - type INTEGER ); -CREATE TABLE MSG_SM ( - Msg_ID UNIQUE_ID, - InformalName STRING, - Descrip STRING, - GuardCondition STRING, - ResultTarget STRING, - ReturnValue STRING, - isFormal BOOLEAN, - Label STRING, - SequenceNumb STRING ); -CREATE TABLE MSG_SIG ( - Msg_ID UNIQUE_ID, - Id UNIQUE_ID ); -CREATE TABLE MSG_R ( - Msg_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - GuardCondition STRING, - ResultTarget STRING, - ReturnValue STRING, - SequenceNumb STRING ); -CREATE TABLE MSG_O ( - Msg_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID ); -CREATE TABLE MSG_OA ( - Arg_ID UNIQUE_ID, - TParm_ID UNIQUE_ID ); -CREATE TABLE MSG_A ( - Arg_ID UNIQUE_ID, - Informal_Msg_ID UNIQUE_ID, - Formal_Msg_ID UNIQUE_ID, - Label STRING, - Value STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN ); -CREATE TABLE MSG_M ( - Msg_ID UNIQUE_ID, - Receiver_Part_ID UNIQUE_ID, - Sender_Part_ID UNIQUE_ID, - participatesInCommunication BOOLEAN ); -CREATE TABLE MSG_IOP ( - Msg_ID UNIQUE_ID, - Id UNIQUE_ID ); -CREATE TABLE MSG_ISM ( - Msg_ID UNIQUE_ID ); -CREATE TABLE MSG_IAM ( - Msg_ID UNIQUE_ID ); -CREATE TABLE MSG_IA ( - Arg_ID UNIQUE_ID ); -CREATE TABLE MSG_F ( - Msg_ID UNIQUE_ID, - Sync_ID UNIQUE_ID ); -CREATE TABLE MSG_FA ( - Arg_ID UNIQUE_ID, - SParm_ID UNIQUE_ID ); -CREATE TABLE MSG_EPA ( - Arg_ID UNIQUE_ID, - PP_Id UNIQUE_ID ); -CREATE TABLE MSG_E ( - Msg_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID ); -CREATE TABLE MSG_EA ( - Arg_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMedi_ID UNIQUE_ID ); -CREATE TABLE MSG_B ( - Msg_ID UNIQUE_ID, - Brg_ID UNIQUE_ID ); -CREATE TABLE MSG_BA ( - Arg_ID UNIQUE_ID, - BParm_ID UNIQUE_ID ); -CREATE TABLE MSG_AM ( - Msg_ID UNIQUE_ID, - InformalName STRING, - Descrip STRING, - GuardCondition STRING, - DurationObservation STRING, - DurationConstraint STRING, - isFormal BOOLEAN, - Label STRING, - SequenceNumb STRING ); -CREATE TABLE ACT_SGN ( - Statement_ID UNIQUE_ID, - sigNameLineNumber INTEGER, - sigNameColumn INTEGER, - ownerNameLineNumber INTEGER, - ownerNameColumn INTEGER, - ProvidedSig_Id UNIQUE_ID, - RequiredSig_Id UNIQUE_ID, - Value_ID UNIQUE_ID ); -CREATE TABLE ACT_RET ( - Statement_ID UNIQUE_ID, - Value_ID UNIQUE_ID ); -CREATE TABLE ACT_TFM ( - Statement_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - operationNameLineNumber INTEGER, - operationNameColumn INTEGER, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER ); -CREATE TABLE ACT_IOP ( - Statement_ID UNIQUE_ID, - opNameLineNumber INTEGER, - opNameColumn INTEGER, - ownerNameLineNumber INTEGER, - ownerNameColumn INTEGER, - ProvidedOp_Id UNIQUE_ID, - RequiredOp_Id UNIQUE_ID, - Value_ID UNIQUE_ID ); -CREATE TABLE ACT_FNC ( - Statement_ID UNIQUE_ID, - Sync_ID UNIQUE_ID, - functionNameLineNumber INTEGER, - functionNameColumn INTEGER ); -CREATE TABLE ACT_BRG ( - Statement_ID UNIQUE_ID, - Brg_ID UNIQUE_ID, - bridgeNameLineNumber INTEGER, - bridgeNameColumn INTEGER, - externalEntityKeyLettersLineNumber INTEGER, - externalEntityKeyLettersColumn INTEGER ); -CREATE TABLE IP_IPINIP ( - Package_ID UNIQUE_ID ); -CREATE TABLE IP_IP ( - Package_ID UNIQUE_ID, - Parent_Package_ID UNIQUE_ID, - Direct_Sys_ID UNIQUE_ID, - Sys_ID UNIQUE_ID, - Component_Id UNIQUE_ID, - Component_Package_ID UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE IA_UCP ( - Part_ID UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE SQ_TM ( - Mark_ID UNIQUE_ID, - Name STRING, - Part_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE SQ_TS ( - Span_ID UNIQUE_ID, - Mark_ID UNIQUE_ID, - Prev_Mark_ID UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE SQ_PP ( - Part_ID UNIQUE_ID, - Package_ID UNIQUE_ID, - Label STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN ); -CREATE TABLE SQ_LS ( - Part_ID UNIQUE_ID, - Source_Part_ID UNIQUE_ID, - Descrip STRING, - Destroyed BOOLEAN ); -CREATE TABLE SQ_P ( - Part_ID UNIQUE_ID, - Sequence_Package_ID UNIQUE_ID ); + SMspd_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Non_Local BOOLEAN +); +CREATE TABLE SM_TAH ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Trans_ID UNIQUE_ID +); +CREATE TABLE SM_TXN ( + Trans_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SPR_PEP ( + Id UNIQUE_ID, + ExecutableProperty_Id UNIQUE_ID, + Provision_Id UNIQUE_ID +); +CREATE TABLE SPR_PO ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE SPR_PS ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE SPR_REP ( + Id UNIQUE_ID, + ExecutableProperty_Id UNIQUE_ID, + Requirement_Id UNIQUE_ID +); +CREATE TABLE SPR_RO ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE SPR_RS ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE SQ_AP ( + Part_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + LS_Part_ID UNIQUE_ID +); CREATE TABLE SQ_AV ( - Av_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - Label STRING, - Value STRING, - InformalName STRING, - Informal_Part_ID UNIQUE_ID, - Formal_Part_ID UNIQUE_ID, - Descrip STRING, - isFormal BOOLEAN ); -CREATE TABLE SQ_IAV ( - Av_ID UNIQUE_ID ); -CREATE TABLE SQ_IA ( - Ia_ID UNIQUE_ID ); -CREATE TABLE SQ_FPP ( - Part_ID UNIQUE_ID, - FunPack_ID UNIQUE_ID, - Label STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN ); -CREATE TABLE SQ_FAV ( - Av_ID UNIQUE_ID ); -CREATE TABLE SQ_FA ( - Ia_ID UNIQUE_ID ); -CREATE TABLE SQ_EEP ( - Part_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Label STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN ); + Av_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + Label STRING, + Value STRING, + InformalName STRING, + Informal_Part_ID UNIQUE_ID, + Formal_Part_ID UNIQUE_ID, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_CIP ( + Part_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Name STRING, + InformalClassName STRING, + Label STRING, + Descrip STRING, + isFormal BOOLEAN +); CREATE TABLE SQ_COP ( - Part_ID UNIQUE_ID, - Component_Id UNIQUE_ID, - Label STRING, - InformalComponentName STRING, - Descrip STRING, - isFormal BOOLEAN ); -CREATE TABLE SQ_CPA ( - Ia_ID UNIQUE_ID, - Name STRING, - Type STRING, - Part_ID UNIQUE_ID, - Descrip STRING ); + Part_ID UNIQUE_ID, + Component_Id UNIQUE_ID, + Label STRING, + InformalComponentName STRING, + Descrip STRING, + isFormal BOOLEAN +); CREATE TABLE SQ_CP ( - Part_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Label STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN ); -CREATE TABLE SQ_CIP ( - Part_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Name STRING, - InformalClassName STRING, - Label STRING, - Descrip STRING, - isFormal BOOLEAN ); -CREATE TABLE SQ_AP ( - Part_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - LS_Part_ID UNIQUE_ID ); -CREATE TABLE ACT_DEL ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID ); -CREATE TABLE ACT_CNV ( - Statement_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER ); -CREATE TABLE ACT_CR ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - is_implicit BOOLEAN, - Obj_ID UNIQUE_ID, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER ); -CREATE TABLE ACT_AI ( - Statement_ID UNIQUE_ID, - r_Value_ID UNIQUE_ID, - l_Value_ID UNIQUE_ID, - attributeLineNumber INTEGER, - attributeColumn INTEGER ); -CREATE TABLE I_TIM ( - Timer_ID UNIQUE_ID, - delay INTEGER, - running BOOLEAN, - recurring BOOLEAN, - Event_ID UNIQUE_ID, - Label STRING, - expiration STRING ); -CREATE TABLE I_EVI ( - Event_ID UNIQUE_ID, - isExecuting BOOLEAN, - isCreation BOOLEAN, - SMevt_ID UNIQUE_ID, - Target_Inst_ID UNIQUE_ID, - nextEvent_ID UNIQUE_ID, - Sent_By_Inst_ID UNIQUE_ID, - next_self_Event_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - Originating_Execution_Engine_ID UNIQUE_ID, - Label STRING ); -CREATE TABLE I_LIP ( - Participation_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - Inst_ID UNIQUE_ID, - Label STRING ); -CREATE TABLE I_LNK ( - Link_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - Participation_ID UNIQUE_ID, - Formalizing_Participation_ID UNIQUE_ID, - Associator_Participation_ID UNIQUE_ID ); -CREATE TABLE I_INS ( - Inst_ID UNIQUE_ID, - Name STRING, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - Trans_ID UNIQUE_ID, - Label STRING, - Default_Name STRING ); -CREATE TABLE I_DIV ( - DIV_ID UNIQUE_ID, - Event_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMedi_ID UNIQUE_ID, - PP_Id UNIQUE_ID ); -CREATE TABLE I_CIN ( - Container_ID UNIQUE_ID ); -CREATE TABLE I_EXE ( - Running BOOLEAN, - Execution_Engine_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - Component_Id UNIQUE_ID, - Package_ID UNIQUE_ID, - Next_Unique_ID INTEGER, - Next_Instance_ID INTEGER, - ImportedComponent_Id UNIQUE_ID, - Label STRING, - EQE_Lock INTEGER, - SQE_Lock INTEGER, - Container_ID UNIQUE_ID, - RealizedBy INTEGER ); -CREATE TABLE I_AVL ( - Inst_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - Value STRING, - Label STRING ); -CREATE TABLE G_EIS ( - Element_ID UNIQUE_ID, - Sys_ID UNIQUE_ID ); -CREATE TABLE E_GEE ( - Statement_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEevt_ID UNIQUE_ID ); -CREATE TABLE E_GEC ( - Statement_ID UNIQUE_ID ); -CREATE TABLE E_GAR ( - Statement_ID UNIQUE_ID ); -CREATE TABLE E_GSME ( - Statement_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID ); -CREATE TABLE E_GPR ( - Statement_ID UNIQUE_ID, - Value_ID UNIQUE_ID ); -CREATE TABLE E_GES ( - Statement_ID UNIQUE_ID ); -CREATE TABLE E_GEN ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID ); -CREATE TABLE E_ESS ( - Statement_ID UNIQUE_ID, - ParmListOK BOOLEAN, - PEIndicated BOOLEAN, - eventDerivedLabelLineNumber INTEGER, - eventDerivedLabelColumn INTEGER, - eventMeaningLineNumber INTEGER, - eventMeaningColumn INTEGER, - eventTargetKeyLettersLineNumber INTEGER, - eventTargetKeyLettersColumn INTEGER, - firstEventDataItemNameLineNumber INTEGER, - firstEventDataItemNameColumn INTEGER, - currentLaterEventDataItemNameLineNumber INTEGER, - currentLaterEventDataItemNameColumn INTEGER ); -CREATE TABLE E_CSME ( - Statement_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID ); -CREATE TABLE E_CEI ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID ); -CREATE TABLE E_CEE ( - Statement_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEevt_ID UNIQUE_ID ); -CREATE TABLE E_CEC ( - Statement_ID UNIQUE_ID ); -CREATE TABLE E_CEA ( - Statement_ID UNIQUE_ID ); -CREATE TABLE E_CES ( - Statement_ID UNIQUE_ID, - is_implicit BOOLEAN, - Var_ID UNIQUE_ID ); -CREATE TABLE EP_SPKG ( - Package_ID UNIQUE_ID, - Container_Package_ID UNIQUE_ID ); -CREATE TABLE EP_PIP ( - Parent_Package_ID UNIQUE_ID, - Child_Package_ID UNIQUE_ID ); -CREATE TABLE EP_PKG ( - Package_ID UNIQUE_ID, - Sys_ID UNIQUE_ID, - Direct_Sys_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Num_Rng INTEGER ); -CREATE TABLE S_UDT ( - DT_ID UNIQUE_ID, - CDT_DT_ID UNIQUE_ID, - Gen_Type INTEGER ); -CREATE TABLE S_SYS ( - Sys_ID UNIQUE_ID, - Name STRING, - useGlobals BOOLEAN ); -CREATE TABLE S_SIS ( - Parent_SS_ID UNIQUE_ID, - Child_SS_ID UNIQUE_ID ); -CREATE TABLE S_SID ( - Dom_ID UNIQUE_ID, - SS_ID UNIQUE_ID ); -CREATE TABLE S_SS ( - SS_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Prefix STRING, - Num_Rng INTEGER, - Dom_ID UNIQUE_ID, - Config_ID UNIQUE_ID ); -CREATE TABLE S_SDT ( - DT_ID UNIQUE_ID ); -CREATE TABLE S_MBR ( - Member_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Parent_DT_DT_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - Previous_Member_ID UNIQUE_ID, - Dimensions STRING ); -CREATE TABLE PL_FPID ( - FunPack_ID UNIQUE_ID, - Dom_ID UNIQUE_ID ); -CREATE TABLE PL_EEPID ( - Dom_ID UNIQUE_ID, - EEPack_ID UNIQUE_ID ); -CREATE TABLE S_IRDT ( - DT_ID UNIQUE_ID, - isSet BOOLEAN, - Obj_ID UNIQUE_ID ); -CREATE TABLE S_SPARM ( - SParm_ID UNIQUE_ID, - Sync_ID UNIQUE_ID, - Name STRING, - DT_ID UNIQUE_ID, - By_Ref INTEGER, - Dimensions STRING, - Previous_SParm_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE S_FPIP ( - FunPack_ID UNIQUE_ID ); -CREATE TABLE S_FPK ( - FunPack_ID UNIQUE_ID, - Name STRING, - Dom_ID UNIQUE_ID, - Parent_FunPack_ID UNIQUE_ID ); -CREATE TABLE S_FIP ( - FunPack_ID UNIQUE_ID, - Sync_ID UNIQUE_ID ); -CREATE TABLE S_SYNC ( - Sync_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - DT_ID UNIQUE_ID, - Suc_Pars INTEGER, - Return_Dimensions STRING ); -CREATE TABLE S_EEPK ( - EEPack_ID UNIQUE_ID, - Name STRING, - Dom_ID UNIQUE_ID, - Parent_EEPack_ID UNIQUE_ID ); -CREATE TABLE S_EEIP ( - EEPack_ID UNIQUE_ID, - EE_ID UNIQUE_ID ); -CREATE TABLE S_EEM ( - EEmod_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Modl_Typ INTEGER, - SS_ID UNIQUE_ID ); + Part_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Label STRING, + InformalName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_CPA ( + Ia_ID UNIQUE_ID, + Name STRING, + Type STRING, + Part_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE SQ_EEP ( + Part_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Label STRING, + InformalName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_FA ( + Ia_ID UNIQUE_ID +); +CREATE TABLE SQ_FAV ( + Av_ID UNIQUE_ID +); +CREATE TABLE SQ_IA ( + Ia_ID UNIQUE_ID +); +CREATE TABLE SQ_IAV ( + Av_ID UNIQUE_ID +); +CREATE TABLE SQ_LS ( + Part_ID UNIQUE_ID, + Source_Part_ID UNIQUE_ID, + Descrip STRING, + Destroyed BOOLEAN +); +CREATE TABLE SQ_P ( + Part_ID UNIQUE_ID, + Sequence_Package_ID UNIQUE_ID +); +CREATE TABLE SQ_PP ( + Part_ID UNIQUE_ID, + Package_ID UNIQUE_ID, + Label STRING, + InformalName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_TM ( + Mark_ID UNIQUE_ID, + Name STRING, + Part_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE SQ_TS ( + Span_ID UNIQUE_ID, + Mark_ID UNIQUE_ID, + Prev_Mark_ID UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE S_AW ( + Brg_ID UNIQUE_ID, + Sync_ID UNIQUE_ID +); +CREATE TABLE S_BPARM ( + BParm_ID UNIQUE_ID, + Brg_ID UNIQUE_ID, + Name STRING, + DT_ID UNIQUE_ID, + By_Ref INTEGER, + Dimensions STRING, + Previous_BParm_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE S_BRG ( + Brg_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Brg_Typ INTEGER, + DT_ID UNIQUE_ID, + Action_Semantics_internal STRING, + Suc_Pars INTEGER, + Return_Dimensions STRING +); +CREATE TABLE S_CDT ( + DT_ID UNIQUE_ID, + Core_Typ INTEGER +); +CREATE TABLE S_DIM ( + elementCount INTEGER, + dimensionCount INTEGER, + Sync_ID UNIQUE_ID, + SParm_ID UNIQUE_ID, + BParm_ID UNIQUE_ID, + Brg_ID UNIQUE_ID, + Id UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + TParm_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID, + Member_ID UNIQUE_ID, + DT_ID UNIQUE_ID, + PP_Id UNIQUE_ID, + SM_ID UNIQUE_ID, + SMedi_ID UNIQUE_ID, + DIM_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE S_DT ( + DT_ID UNIQUE_ID, + Dom_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DefaultValue STRING +); +CREATE TABLE S_EDT ( + DT_ID UNIQUE_ID +); +CREATE TABLE S_EE ( + EE_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Key_Lett STRING, + Dom_ID UNIQUE_ID, + Realized_Class_Path STRING, + Label STRING, + isRealized BOOLEAN +); +CREATE TABLE S_EEDI ( + EEdi_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID +); CREATE TABLE S_EEEDI ( - EEedi_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID ); + EEedi_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID +); CREATE TABLE S_EEEDT ( - EE_ID UNIQUE_ID, - EEevt_ID UNIQUE_ID, - EEedi_ID UNIQUE_ID ); + EE_ID UNIQUE_ID, + EEevt_ID UNIQUE_ID, + EEedi_ID UNIQUE_ID +); CREATE TABLE S_EEEVT ( - EEevt_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Numb INTEGER, - Mning STRING, - Is_Lbl_U INTEGER, - Unq_Lbl STRING, - Drv_Lbl STRING, - Descrip STRING ); -CREATE TABLE S_EEDI ( - EEdi_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID ); -CREATE TABLE S_EE ( - EE_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Key_Lett STRING, - Dom_ID UNIQUE_ID, - Realized_Class_Path STRING, - Label STRING, - isRealized BOOLEAN ); + EEevt_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Numb INTEGER, + Mning STRING, + Is_Lbl_U INTEGER, + Unq_Lbl STRING, + Drv_Lbl STRING, + Descrip STRING +); +CREATE TABLE S_EEM ( + EEmod_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Modl_Typ INTEGER, + SS_ID UNIQUE_ID +); CREATE TABLE S_ENUM ( - Enum_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - EDT_DT_ID UNIQUE_ID, - Previous_Enum_ID UNIQUE_ID ); -CREATE TABLE S_EDT ( - DT_ID UNIQUE_ID ); -CREATE TABLE S_EEPIP ( - EEPack_ID UNIQUE_ID ); -CREATE TABLE S_DOM ( - Dom_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Full_Der INTEGER, - Config_ID UNIQUE_ID, - Sys_ID UNIQUE_ID ); -CREATE TABLE S_DIM ( - elementCount INTEGER, - dimensionCount INTEGER, - Sync_ID UNIQUE_ID, - SParm_ID UNIQUE_ID, - BParm_ID UNIQUE_ID, - Brg_ID UNIQUE_ID, - Id UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - TParm_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID, - Member_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - PP_Id UNIQUE_ID, - SM_ID UNIQUE_ID, - SMedi_ID UNIQUE_ID, - DIM_ID UNIQUE_ID, - Var_ID UNIQUE_ID ); -CREATE TABLE S_DIS ( - Dom_ID UNIQUE_ID, - DT_ID UNIQUE_ID ); -CREATE TABLE S_DPIP ( - Package_ID UNIQUE_ID ); -CREATE TABLE S_DPK ( - Package_ID UNIQUE_ID, - Name STRING, - Dom_ID UNIQUE_ID, - Parent_Package_ID UNIQUE_ID ); -CREATE TABLE S_DIP ( - Package_ID UNIQUE_ID, - DT_ID UNIQUE_ID ); -CREATE TABLE S_DT ( - DT_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DefaultValue STRING ); -CREATE TABLE S_CDT ( - DT_ID UNIQUE_ID, - Core_Typ INTEGER ); -CREATE TABLE S_BPARM ( - BParm_ID UNIQUE_ID, - Brg_ID UNIQUE_ID, - Name STRING, - DT_ID UNIQUE_ID, - By_Ref INTEGER, - Dimensions STRING, - Previous_BParm_ID UNIQUE_ID, - Descrip STRING ); -CREATE TABLE S_BRG ( - Brg_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Brg_Typ INTEGER, - DT_ID UNIQUE_ID, - Action_Semantics_internal STRING, - Suc_Pars INTEGER, - Return_Dimensions STRING ); -CREATE TABLE CNST_SYC ( - Const_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID, - Constant_Spec_ID UNIQUE_ID, - Previous_Const_ID UNIQUE_ID, - Previous_DT_DT_ID UNIQUE_ID ); -CREATE TABLE CNST_LSC ( - Const_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - Value STRING ); -CREATE TABLE CNST_LFSC ( - Const_ID UNIQUE_ID, - DT_ID UNIQUE_ID ); -CREATE TABLE CNST_CSP ( - Constant_Spec_ID UNIQUE_ID, - InformalGroupName STRING, - Descrip STRING ); -CREATE TABLE CNST_CIP ( - Constant_Spec_ID UNIQUE_ID, - Package_ID UNIQUE_ID ); -CREATE TABLE SPR_RS ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - Suc_Pars INTEGER ); -CREATE TABLE SPR_RO ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - Suc_Pars INTEGER ); -CREATE TABLE SPR_REP ( - Id UNIQUE_ID, - ExecutableProperty_Id UNIQUE_ID, - Requirement_Id UNIQUE_ID ); -CREATE TABLE SPR_PS ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - Suc_Pars INTEGER ); -CREATE TABLE SPR_PO ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - Suc_Pars INTEGER ); -CREATE TABLE SPR_PEP ( - Id UNIQUE_ID, - ExecutableProperty_Id UNIQUE_ID, - Provision_Id UNIQUE_ID ); -CREATE TABLE C_SF ( - Id UNIQUE_ID, - Requirement_Id UNIQUE_ID, - Provision_Id UNIQUE_ID, - Descrip STRING, - Label STRING ); -CREATE TABLE C_R ( - Requirement_Id UNIQUE_ID, - Name STRING, - Descrip STRING, - InformalName STRING, - reversePathFromComponent STRING ); -CREATE TABLE C_P ( - Provision_Id UNIQUE_ID, - Name STRING, - InformalName STRING, - Descrip STRING, - pathFromComponent STRING ); -CREATE TABLE C_PP ( - PP_Id UNIQUE_ID, - Signal_Id UNIQUE_ID, - DT_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - By_Ref INTEGER, - Dimensions STRING, - Previous_PP_Id UNIQUE_ID ); -CREATE TABLE C_PO ( - Id UNIQUE_ID, - Component_Id UNIQUE_ID, - Name STRING, - Mult INTEGER, - DoNotShowPortOnCanvas BOOLEAN ); -CREATE TABLE C_AS ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Direction INTEGER, - Previous_Id UNIQUE_ID ); -CREATE TABLE C_RID ( - Reference_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID ); -CREATE TABLE C_IR ( - Id UNIQUE_ID, - Formal_Interface_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID, - Port_Id UNIQUE_ID ); -CREATE TABLE C_IO ( - Id UNIQUE_ID, - DT_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Direction INTEGER, - Return_Dimensions STRING, - Previous_Id UNIQUE_ID ); -CREATE TABLE C_I ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE C_EP ( - Id UNIQUE_ID, - Interface_Id UNIQUE_ID, - Direction INTEGER, - Name STRING, - Descrip STRING ); -CREATE TABLE C_DG ( - Id UNIQUE_ID, - Name STRING ); -CREATE TABLE CP_CPINP ( - Id UNIQUE_ID, - Parent_Package_ID UNIQUE_ID ); -CREATE TABLE CP_CP ( - Package_ID UNIQUE_ID, - ParentLink_Id UNIQUE_ID, - Sys_ID UNIQUE_ID, - Containing_Sys_ID UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE CN_DC ( - Id UNIQUE_ID, - Dom_ID UNIQUE_ID ); -CREATE TABLE CN_CIC ( - Id UNIQUE_ID, - Parent_Id UNIQUE_ID ); -CREATE TABLE CL_IR ( - Id UNIQUE_ID, - Satisfaction_Element_Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE CL_IIR ( - Id UNIQUE_ID, - Ref_Id UNIQUE_ID, - ImportedComp_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE CL_IPINS ( - Satisfaction_Id UNIQUE_ID, - ImportedProvision_Id UNIQUE_ID ); -CREATE TABLE CL_IP ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE CL_IC ( - Id UNIQUE_ID, - AssignedComp_Id UNIQUE_ID, - ParentComp_Id UNIQUE_ID, - Component_Package_ID UNIQUE_ID, - Mult INTEGER, - ClassifierName STRING, - Name STRING, - Descrip STRING ); -CREATE TABLE C_C ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID, - NestedComponent_Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Mult INTEGER, - Root_Package_ID UNIQUE_ID, - isRealized BOOLEAN, - Realized_Class_Path STRING ); -CREATE TABLE CA_SMSME ( - CPath_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID ); -CREATE TABLE CA_SMSMC ( - CPath_ID UNIQUE_ID, - OSM_ID UNIQUE_ID, - DSM_ID UNIQUE_ID, - OIObj_ID UNIQUE_ID, - DIObj_ID UNIQUE_ID ); -CREATE TABLE CA_SMOAA ( - APath_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID ); -CREATE TABLE CA_SMOA ( - APath_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - IObj_ID UNIQUE_ID ); -CREATE TABLE CA_SMEEE ( - CPath_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEevt_ID UNIQUE_ID ); -CREATE TABLE CA_SMEED ( - APath_ID UNIQUE_ID, - EEdi_ID UNIQUE_ID, - EE_ID UNIQUE_ID ); -CREATE TABLE CA_SMEEC ( - CPath_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEmod_ID UNIQUE_ID ); -CREATE TABLE CA_SMEEA ( - APath_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEmod_ID UNIQUE_ID ); -CREATE TABLE CA_EESME ( - CPath_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID ); -CREATE TABLE CA_EESMC ( - CPath_ID UNIQUE_ID, - EEmod_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - SM_ID UNIQUE_ID ); -CREATE TABLE CA_COMM ( - CPath_ID UNIQUE_ID, - SS_ID UNIQUE_ID ); -CREATE TABLE CA_ACC ( - APath_ID UNIQUE_ID, - SS_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - IObj_ID UNIQUE_ID ); -CREATE TABLE COMM_PIC ( - Package_ID UNIQUE_ID, - Part_ID UNIQUE_ID ); -CREATE TABLE COMM_MIC ( - Package_ID UNIQUE_ID, - Msg_ID UNIQUE_ID ); -CREATE TABLE COMM_LNK ( - Link_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - Numb STRING, - Descrip STRING, - StartText STRING, - EndText STRING, - isFormal BOOLEAN, - StartVisibility INTEGER, - EndVisibility INTEGER, - Start_Part_ID UNIQUE_ID, - Destination_Part_ID UNIQUE_ID ); -CREATE TABLE COMM_CIC ( - Package_ID UNIQUE_ID ); -CREATE TABLE COMM_COMM ( - Package_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - SS_ID UNIQUE_ID, - CIC_Package_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Sys_ID UNIQUE_ID, - Component_Package_ID UNIQUE_ID, - Component_Id UNIQUE_ID ); -CREATE TABLE ACT_WHL ( - Statement_ID UNIQUE_ID, - Value_ID UNIQUE_ID, - Block_ID UNIQUE_ID ); -CREATE TABLE ACT_TAB ( - Action_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Act_ID UNIQUE_ID ); -CREATE TABLE ACT_SMT ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Previous_Statement_ID UNIQUE_ID, - LineNumber INTEGER, - StartPosition INTEGER, - Label STRING ); -CREATE TABLE ACT_SAB ( - Action_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Act_ID UNIQUE_ID ); -CREATE TABLE ACT_RSB ( - Action_ID UNIQUE_ID, - Id UNIQUE_ID ); -CREATE TABLE ACT_ROB ( - Action_ID UNIQUE_ID, - Id UNIQUE_ID ); -CREATE TABLE ACT_PSB ( - Action_ID UNIQUE_ID, - Id UNIQUE_ID ); -CREATE TABLE ACT_POB ( - Action_ID UNIQUE_ID, - Id UNIQUE_ID ); -CREATE TABLE ACT_OPB ( - Action_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID ); -CREATE TABLE ACT_IF ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Value_ID UNIQUE_ID, - Elif_Statement_ID UNIQUE_ID, - Else_Statement_ID UNIQUE_ID ); -CREATE TABLE ACT_FNB ( - Action_ID UNIQUE_ID, - Sync_ID UNIQUE_ID ); -CREATE TABLE ACT_FOR ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - is_implicit BOOLEAN, - Loop_Var_ID UNIQUE_ID, - Set_Var_ID UNIQUE_ID, - Obj_ID UNIQUE_ID ); -CREATE TABLE ACT_EL ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Value_ID UNIQUE_ID, - If_Statement_ID UNIQUE_ID ); -CREATE TABLE ACT_E ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - If_Statement_ID UNIQUE_ID ); -CREATE TABLE ACT_DAB ( - Action_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - AttributeWritten BOOLEAN ); -CREATE TABLE ACT_CTL ( - Statement_ID UNIQUE_ID ); -CREATE TABLE ACT_CON ( - Statement_ID UNIQUE_ID ); -CREATE TABLE ACT_BRB ( - Action_ID UNIQUE_ID, - Brg_ID UNIQUE_ID ); -CREATE TABLE ACT_BRK ( - Statement_ID UNIQUE_ID ); -CREATE TABLE ACT_ACT ( - Action_ID UNIQUE_ID, - Type STRING, - LoopLevel INTEGER, - Block_ID UNIQUE_ID, - CurrentScope_ID UNIQUE_ID, - return_value INTEGER, - Label STRING, - Parsed_Block_ID UNIQUE_ID ); -CREATE TABLE ACT_BLK ( - Block_ID UNIQUE_ID, - WhereSpecOK BOOLEAN, - InWhereSpec BOOLEAN, - SelectedFound BOOLEAN, - TempBuffer STRING, - SupData1 STRING, - SupData2 STRING, - CurrentLine INTEGER, - CurrentCol INTEGER, - currentKeyLettersLineNumber INTEGER, - currentKeyLettersColumn INTEGER, - currentParameterAssignmentNameLineNumber INTEGER, - currentParameterAssignmentNameColumn INTEGER, - currentAssociationNumberLineNumber INTEGER, - currentAssociationNumberColumn INTEGER, - currentAssociationPhraseLineNumber INTEGER, - currentAssociationPhraseColumn INTEGER, - currentDataTypeNameLineNumber INTEGER, - currentDataTypeNameColumn INTEGER, - blockInStackFrameCreated BOOLEAN, - Action_ID UNIQUE_ID, - Parsed_Action_ID UNIQUE_ID ); -CREATE TABLE R_SUBSUP ( - Rel_ID UNIQUE_ID ); -CREATE TABLE R_SIMP ( - Rel_ID UNIQUE_ID ); -CREATE TABLE R_RGO ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID ); -CREATE TABLE R_RTO ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Oid_ID INTEGER ); -CREATE TABLE R_ASSOC ( - Rel_ID UNIQUE_ID ); -CREATE TABLE R_COMP ( - Rel_ID UNIQUE_ID, - Rel_Chn STRING ); -CREATE TABLE R_OIR ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - IObj_ID UNIQUE_ID ); -CREATE TABLE R_SUPER ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID ); -CREATE TABLE R_SUB ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID ); -CREATE TABLE R_PART ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING ); -CREATE TABLE R_FORM ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING ); -CREATE TABLE R_ASSR ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER ); -CREATE TABLE R_COTH ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING ); -CREATE TABLE R_CONE ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING ); -CREATE TABLE R_AOTH ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING ); -CREATE TABLE R_AONE ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING ); -CREATE TABLE R_REL ( - Rel_ID UNIQUE_ID, - Numb INTEGER, - Descrip STRING, - SS_ID UNIQUE_ID ); -CREATE TABLE A_SS ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE A_OBJ ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE A_INI ( - Id UNIQUE_ID, - Descrip STRING ); -CREATE TABLE A_FJ ( - Id UNIQUE_ID, - Descrip STRING, - GuardCondition STRING ); -CREATE TABLE A_FF ( - Id UNIQUE_ID, - Descrip STRING ); -CREATE TABLE A_DM ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE A_CTL ( - Id UNIQUE_ID ); -CREATE TABLE A_AP ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE A_N ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID ); -CREATE TABLE A_AIA ( - Package_ID UNIQUE_ID ); -CREATE TABLE A_AF ( - Id UNIQUE_ID, - Descrip STRING ); -CREATE TABLE A_E ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID, - Guard STRING, - Descrip STRING, - TargetId UNIQUE_ID, - SourceId UNIQUE_ID ); -CREATE TABLE A_GA ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE A_A ( - Package_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Dom_ID UNIQUE_ID, - SS_ID UNIQUE_ID, - Parent_Package_ID UNIQUE_ID, - Sys_ID UNIQUE_ID, - Component_Package_ID UNIQUE_ID, - Component_Id UNIQUE_ID ); -CREATE TABLE A_ACT ( - Id UNIQUE_ID ); -CREATE TABLE A_ATE ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE A_AEA ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING ); -CREATE TABLE A_AE ( - Id UNIQUE_ID ); + Enum_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + EDT_DT_ID UNIQUE_ID, + Previous_Enum_ID UNIQUE_ID +); +CREATE TABLE S_IRDT ( + DT_ID UNIQUE_ID, + isSet BOOLEAN, + Obj_ID UNIQUE_ID +); +CREATE TABLE S_MBR ( + Member_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Parent_DT_DT_ID UNIQUE_ID, + DT_ID UNIQUE_ID, + Previous_Member_ID UNIQUE_ID, + Dimensions STRING +); +CREATE TABLE S_SDT ( + DT_ID UNIQUE_ID +); +CREATE TABLE S_SPARM ( + SParm_ID UNIQUE_ID, + Sync_ID UNIQUE_ID, + Name STRING, + DT_ID UNIQUE_ID, + By_Ref INTEGER, + Dimensions STRING, + Previous_SParm_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE S_SYNC ( + Sync_ID UNIQUE_ID, + Dom_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + DT_ID UNIQUE_ID, + Suc_Pars INTEGER, + Return_Dimensions STRING +); +CREATE TABLE S_SYS ( + Sys_ID UNIQUE_ID, + Name STRING, + useGlobals BOOLEAN +); +CREATE TABLE S_UDT ( + DT_ID UNIQUE_ID, + CDT_DT_ID UNIQUE_ID, + Gen_Type INTEGER +); +CREATE TABLE UC_BA ( + Assoc_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE UC_E ( + Assoc_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE UC_G ( + Assoc_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE UC_I ( + Assoc_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE UC_UCA ( + Assoc_ID UNIQUE_ID, + Source_Part_ID UNIQUE_ID, + Destination_Part_ID UNIQUE_ID +); +CREATE TABLE V_AER ( + Value_ID UNIQUE_ID, + Root_Value_ID UNIQUE_ID, + Index_Value_ID UNIQUE_ID +); +CREATE TABLE V_ALV ( + Value_ID UNIQUE_ID, + Array_Value_ID UNIQUE_ID +); +CREATE TABLE V_AVL ( + Value_ID UNIQUE_ID, + Root_Value_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID +); +CREATE TABLE V_BIN ( + Value_ID UNIQUE_ID, + Right_Value_ID UNIQUE_ID, + Left_Value_ID UNIQUE_ID, + Operator STRING +); +CREATE TABLE V_BRV ( + Value_ID UNIQUE_ID, + Brg_ID UNIQUE_ID, + ParmListOK BOOLEAN, + externalEntityKeyLettersLineNumber INTEGER, + externalEntityKeyLettersColumn INTEGER +); +CREATE TABLE V_EDV ( + Value_ID UNIQUE_ID +); +CREATE TABLE V_EPR ( + Value_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMedi_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE V_FNV ( + Value_ID UNIQUE_ID, + Sync_ID UNIQUE_ID, + ParmListOK BOOLEAN +); +CREATE TABLE V_INS ( + Var_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE V_INT ( + Var_ID UNIQUE_ID, + IsImplicitInFor BOOLEAN, + Obj_ID UNIQUE_ID +); +CREATE TABLE V_IRF ( + Value_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE V_ISR ( + Value_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE V_LBO ( + Value_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE V_LEN ( + Value_ID UNIQUE_ID, + Enum_ID UNIQUE_ID, + dataTypeNameLineNumber INTEGER, + dataTypeNameColumn INTEGER +); +CREATE TABLE V_LIN ( + Value_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE V_LOC ( + Id UNIQUE_ID, + LineNumber INTEGER, + StartPosition INTEGER, + EndPosition INTEGER, + Var_ID UNIQUE_ID +); +CREATE TABLE V_LRL ( + Value_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE V_LST ( + Value_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE V_MSV ( + Value_ID UNIQUE_ID, + PEP_Id UNIQUE_ID, + REP_Id UNIQUE_ID, + ParmListOK BOOLEAN, + ownerNameLineNumber INTEGER, + ownerNameColumn INTEGER, + Target_Value_ID UNIQUE_ID +); +CREATE TABLE V_MVL ( + Value_ID UNIQUE_ID, + Root_Value_ID UNIQUE_ID, + Member_ID UNIQUE_ID, + DT_DT_ID UNIQUE_ID +); +CREATE TABLE V_PAR ( + Value_ID UNIQUE_ID, + Statement_ID UNIQUE_ID, + Invocation_Value_ID UNIQUE_ID, + Name STRING, + Next_Value_ID UNIQUE_ID, + labelLineNumber INTEGER, + labelColumn INTEGER +); +CREATE TABLE V_PVL ( + Value_ID UNIQUE_ID, + BParm_ID UNIQUE_ID, + SParm_ID UNIQUE_ID, + TParm_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE V_SCV ( + Value_ID UNIQUE_ID, + Const_ID UNIQUE_ID, + DT_ID UNIQUE_ID +); +CREATE TABLE V_SLR ( + Value_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + Op_Value_ID UNIQUE_ID +); +CREATE TABLE V_TRN ( + Var_ID UNIQUE_ID, + DT_ID UNIQUE_ID, + Dimensions STRING +); +CREATE TABLE V_TRV ( + Value_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + ParmListOK BOOLEAN, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER +); +CREATE TABLE V_TVL ( + Value_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE V_UNY ( + Value_ID UNIQUE_ID, + Operand_Value_ID UNIQUE_ID, + Operator STRING +); +CREATE TABLE V_VAL ( + Value_ID UNIQUE_ID, + isLValue BOOLEAN, + isImplicit BOOLEAN, + LineNumber INTEGER, + StartPosition INTEGER, + EndPosition INTEGER, + firstParameterLabelLineNumber INTEGER, + firstParameterLabelColumn INTEGER, + currentLaterParameterLabelLineNumber INTEGER, + currentLaterParameterLabelColumn INTEGER, + DT_ID UNIQUE_ID, + Block_ID UNIQUE_ID +); +CREATE TABLE V_VAR ( + Var_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Name STRING, + Declared BOOLEAN, + DT_ID UNIQUE_ID +); +CREATE ROP REF_ID R10 FROM MC S_EEEVT (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R1000 FROM MC MSG_A (Informal_Msg_ID) TO 1C MSG_M (Msg_ID); +CREATE ROP REF_ID R1001 FROM MC MSG_A (Formal_Msg_ID) TO 1C MSG_M (Msg_ID); +CREATE ROP REF_ID R1007 FROM MC MSG_M (Sender_Part_ID) TO 1C SQ_P (Part_ID); +CREATE ROP REF_ID R1008 FROM MC MSG_M (Receiver_Part_ID) TO 1C SQ_P (Part_ID); +CREATE ROP REF_ID R1009 FROM MC MSG_E (SMevt_ID) TO 1C SM_EVT (SMevt_ID); +CREATE ROP REF_ID R101 FROM MC O_IOBJ (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R1010 FROM MC MSG_F (Sync_ID) TO 1C S_SYNC (Sync_ID); +CREATE ROP REF_ID R1011 FROM MC MSG_O (Tfr_ID) TO 1C O_TFR (Tfr_ID); +CREATE ROP REF_ID R1012 FROM MC MSG_B (Brg_ID) TO 1C S_BRG (Brg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_BA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_OA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_FA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_EA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_IA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_EPA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1014 FROM MC MSG_BA (BParm_ID) TO 1C S_BPARM (BParm_ID); +CREATE ROP REF_ID R1015 FROM MC MSG_OA (TParm_ID) TO 1C O_TPARM (TParm_ID); +CREATE ROP REF_ID R1016 FROM MC MSG_FA (SParm_ID) TO 1C S_SPARM (SParm_ID); +CREATE ROP REF_ID R1017 FROM MC MSG_EA (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R1018 FROM 1C MSG_AM (Msg_ID) TO 1 MSG_M (Msg_ID); +CREATE ROP REF_ID R1018 FROM 1C MSG_SM (Msg_ID) TO 1 MSG_M (Msg_ID); +CREATE ROP REF_ID R1018 FROM 1C MSG_R (Msg_ID) TO 1 MSG_M (Msg_ID); +CREATE ROP REF_ID R1019 FROM 1C MSG_E (Msg_ID) TO 1 MSG_AM (Msg_ID); +CREATE ROP REF_ID R1019 FROM 1C MSG_IAM (Msg_ID) TO 1 MSG_AM (Msg_ID); +CREATE ROP REF_ID R1019 FROM 1C MSG_SIG (Msg_ID) TO 1 MSG_AM (Msg_ID); +CREATE ROP REF_ID R102 FROM MC O_ATTR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_F (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_O (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_B (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_ISM (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_IOP (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1021 FROM MC MSG_SIG (Id) TO 1C C_AS (Id); +CREATE ROP REF_ID R1022 FROM MC MSG_IOP (Id) TO 1C C_IO (Id); +CREATE ROP REF_ID R1023 FROM MC MSG_EPA (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R103 FROM 1C O_ATTR (PAttr_ID, Obj_ID) PHRASE 'succeeds' TO 1C O_ATTR (Attr_ID, Obj_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R104 FROM MC O_ID (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R105 FROM MC O_OIDA (Oid_ID, Obj_ID) TO 1 O_ID (Oid_ID, Obj_ID); +CREATE ROP REF_ID R105 FROM MC O_OIDA (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R106 FROM 1C O_BATTR (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R106 FROM 1C O_RATTR (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R107 FROM 1C O_DBATTR (Attr_ID, Obj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R107 FROM 1C O_NBATTR (Attr_ID, Obj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R108 FROM M O_REF (Attr_ID, Obj_ID) TO 1 O_RATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R109 FROM MC R_RTO (Oid_ID, Obj_ID) TO 1C O_ID (Oid_ID, Obj_ID); +CREATE ROP REF_ID R11 FROM MC S_EEDI (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R110 FROM M O_RTIDA (OIR_ID, Rel_ID, Oid_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Oid_ID, Obj_ID); +CREATE ROP REF_ID R110 FROM MC O_RTIDA (Attr_ID, Oid_ID, Obj_ID) TO 1 O_OIDA (Attr_ID, Oid_ID, Obj_ID); +CREATE ROP REF_ID R1103 FROM MC A_E (TargetId) TO 1 A_N (Id); +CREATE ROP REF_ID R1104 FROM MC A_E (SourceId) TO 1 A_N (Id); +CREATE ROP REF_ID R1105 FROM 1C A_ACT (Id) TO 1 A_N (Id); +CREATE ROP REF_ID R1105 FROM 1C A_OBJ (Id) TO 1 A_N (Id); +CREATE ROP REF_ID R1105 FROM 1C A_CTL (Id) TO 1 A_N (Id); +CREATE ROP REF_ID R1106 FROM 1C A_FF (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1106 FROM 1C A_AF (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1106 FROM 1C A_INI (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1106 FROM 1C A_DM (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1106 FROM 1C A_FJ (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1107 FROM 1C A_AE (Id) TO 1 A_ACT (Id); +CREATE ROP REF_ID R1107 FROM 1C A_GA (Id) TO 1 A_ACT (Id); +CREATE ROP REF_ID R1107 FROM 1C A_SS (Id) TO 1 A_ACT (Id); +CREATE ROP REF_ID R111 FROM MC O_REF (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R111 FROM MC O_REF (RAttr_ID, ROIR_ID, RObj_ID, ROid_ID, Rel_ID) TO 1 O_RTIDA (Attr_ID, OIR_ID, Obj_ID, Oid_ID, Rel_ID); +CREATE ROP REF_ID R1112 FROM 1C A_ATE (Id) TO 1 A_AE (Id); +CREATE ROP REF_ID R1112 FROM 1C A_AEA (Id) TO 1 A_AE (Id); +CREATE ROP REF_ID R112 FROM 1C O_REF (PARef_ID) PHRASE 'succeeds' TO 1C O_REF (ARef_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R1128 FROM MC COMM_LNK (Rel_ID) TO 1C R_REL (Rel_ID); +CREATE ROP REF_ID R113 FROM MC O_RATTR (BAttr_ID, BObj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R1133 FROM MC COMM_LNK (Start_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R1134 FROM MC COMM_LNK (Destination_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R114 FROM MC O_ATTR (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R115 FROM MC O_TFR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R116 FROM MC O_TFR (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R117 FROM MC O_TPARM (Tfr_ID) TO 1 O_TFR (Tfr_ID); +CREATE ROP REF_ID R118 FROM MC O_TPARM (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R12 FROM MC S_EEEDI (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R120 FROM MC S_DIM (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R1206 FROM MC UC_UCA (Source_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R1207 FROM MC UC_UCA (Destination_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R121 FROM MC S_DIM (TParm_ID) TO 1C O_TPARM (TParm_ID); +CREATE ROP REF_ID R1210 FROM 1C UC_E (Assoc_ID) TO 1 UC_UCA (Assoc_ID); +CREATE ROP REF_ID R1210 FROM 1C UC_G (Assoc_ID) TO 1 UC_UCA (Assoc_ID); +CREATE ROP REF_ID R1210 FROM 1C UC_I (Assoc_ID) TO 1 UC_UCA (Assoc_ID); +CREATE ROP REF_ID R1210 FROM 1C UC_BA (Assoc_ID) TO 1 UC_UCA (Assoc_ID); +CREATE ROP REF_ID R122 FROM MC S_DIM (Tfr_ID) TO 1C O_TFR (Tfr_ID); +CREATE ROP REF_ID R123 FROM MC S_IRDT (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R124 FROM 1C O_TPARM (Previous_TParm_ID) PHRASE 'succeeds' TO 1C O_TPARM (TParm_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R125 FROM 1C O_TFR (Previous_Tfr_ID) PHRASE 'succeeds' TO 1C O_TFR (Tfr_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R13 FROM MC S_EEEDT (EEedi_ID, EE_ID) TO 1 S_EEEDI (EEedi_ID, EE_ID); +CREATE ROP REF_ID R13 FROM MC S_EEEDT (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); +CREATE ROP REF_ID R1401 FROM MC EP_PKG (Sys_ID) TO 1C S_SYS (Sys_ID); +CREATE ROP REF_ID R1405 FROM MC EP_PKG (Direct_Sys_ID) TO 1 S_SYS (Sys_ID); +CREATE ROP REF_ID R15 FROM MC S_EEDI (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R1500 FROM MC CNST_SYC (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R1502 FROM 1C CNST_LFSC (Const_ID, DT_ID) TO 1 CNST_SYC (Const_ID, DT_ID); +CREATE ROP REF_ID R1503 FROM 1C CNST_LSC (Const_ID, DT_ID) TO 1 CNST_LFSC (Const_ID, DT_ID); +CREATE ROP REF_ID R1504 FROM MC CNST_SYC (Constant_Spec_ID) TO 1 CNST_CSP (Constant_Spec_ID); +CREATE ROP REF_ID R1505 FROM 1C CNST_SYC (Previous_Const_ID, Previous_DT_DT_ID) PHRASE 'succeeds' TO 1C CNST_SYC (Const_ID, DT_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R16 FROM MC S_EEEDI (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_CDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_UDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_EDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_SDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_IRDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R18 FROM MC S_UDT (CDT_DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R19 FROM MC S_BRG (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R20 FROM MC S_BRG (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R201 FROM M R_OIR (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R201 FROM MC R_OIR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R202 FROM MC R_OIR (IObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R203 FROM 1C R_RTO (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R203 FROM 1C R_RGO (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R203 FROM 1C R_CONE (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R203 FROM 1C R_COTH (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R204 FROM 1C R_SUPER (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R204 FROM 1C R_PART (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R204 FROM 1C R_AONE (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R204 FROM 1C R_AOTH (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R205 FROM 1C R_SUB (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R205 FROM 1C R_FORM (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R205 FROM 1C R_ASSR (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R206 FROM 1C R_SIMP (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R206 FROM 1C R_COMP (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R206 FROM 1C R_ASSOC (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R206 FROM 1C R_SUBSUP (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R207 FROM M R_PART (Rel_ID) TO 1 R_SIMP (Rel_ID); +CREATE ROP REF_ID R208 FROM 1C R_FORM (Rel_ID) TO 1 R_SIMP (Rel_ID); +CREATE ROP REF_ID R209 FROM 1 R_AONE (Rel_ID) TO 1 R_ASSOC (Rel_ID); +CREATE ROP REF_ID R21 FROM MC S_BPARM (Brg_ID) TO 1 S_BRG (Brg_ID); +CREATE ROP REF_ID R210 FROM 1 R_AOTH (Rel_ID) TO 1 R_ASSOC (Rel_ID); +CREATE ROP REF_ID R211 FROM 1 R_ASSR (Rel_ID) TO 1 R_ASSOC (Rel_ID); +CREATE ROP REF_ID R212 FROM 1 R_SUPER (Rel_ID) TO 1 R_SUBSUP (Rel_ID); +CREATE ROP REF_ID R213 FROM MC R_SUB (Rel_ID) TO 1 R_SUBSUP (Rel_ID); +CREATE ROP REF_ID R214 FROM 1 R_CONE (Rel_ID) TO 1 R_COMP (Rel_ID); +CREATE ROP REF_ID R215 FROM 1 R_COTH (Rel_ID) TO 1 R_COMP (Rel_ID); +CREATE ROP REF_ID R22 FROM MC S_BPARM (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R24 FROM MC S_SPARM (Sync_ID) TO 1 S_SYNC (Sync_ID); +CREATE ROP REF_ID R25 FROM MC S_SYNC (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R26 FROM MC S_SPARM (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R27 FROM MC S_ENUM (EDT_DT_ID) TO 1 S_EDT (DT_ID); +CREATE ROP REF_ID R2901 FROM 1C I_LNK (Rel_ID, Participation_ID) TO 1 I_LIP (Rel_ID, Participation_ID); +CREATE ROP REF_ID R2902 FROM 1C I_LNK (Rel_ID, Formalizing_Participation_ID) TO 1 I_LIP (Rel_ID, Participation_ID); +CREATE ROP REF_ID R2903 FROM 1C I_LNK (Rel_ID, Associator_Participation_ID) TO 1C I_LIP (Rel_ID, Participation_ID); +CREATE ROP REF_ID R2904 FROM MC I_LNK (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R2906 FROM MC I_EVI (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R2907 FROM MC I_EVI (Target_Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R2908 FROM 1C I_EVI (nextEvent_ID) PHRASE 'will be processed after' TO 1C I_EVI (Event_ID) PHRASE 'will be processed before'; +CREATE ROP REF_ID R2909 FROM MC I_AVL (Inst_ID) TO 1 I_INS (Inst_ID); +CREATE ROP REF_ID R2910 FROM MC I_AVL (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R2915 FROM MC I_INS (SM_ID, SMstt_ID) TO 1C SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R2923 FROM MC I_BSF (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R2923 FROM MC I_BSF (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); +CREATE ROP REF_ID R2928 FROM 1C I_STF (Child_Stack_Frame_ID) PHRASE 'next context' TO 1C I_STF (Stack_Frame_ID) PHRASE 'previous context'; +CREATE ROP REF_ID R2929 FROM 1C I_STF (Top_Stack_Frame_Stack_ID) TO 1C I_STACK (Stack_ID); +CREATE ROP REF_ID R2930 FROM 1 I_STACK (Execution_Engine_ID) TO 1C I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2931 FROM MC I_EVI (Sent_By_CIE_ID) TO 1C CSME_CIE (CIE_ID); +CREATE ROP REF_ID R2933 FROM MC I_DIV (Event_ID) TO 1 I_EVI (Event_ID); +CREATE ROP REF_ID R2934 FROM MC I_DIV (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R2935 FROM MC I_EVI (Target_Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R2937 FROM MC I_EVI (Sent_By_Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R2938 FROM MC I_EVI (CIE_ID) TO 1C CSME_CIE (CIE_ID); +CREATE ROP REF_ID R2939 FROM 1C I_EVI (next_self_Event_ID) PHRASE 'will be processed before' TO 1C I_EVI (Event_ID) PHRASE 'will be processed after'; +CREATE ROP REF_ID R2940 FROM 1C I_TIM (Event_ID) TO 1C I_EVI (Event_ID); +CREATE ROP REF_ID R2941 FROM MC I_BSF (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R2943 FROM MC I_STF (Stack_ID) TO 1C I_STACK (Stack_ID); +CREATE ROP REF_ID R2944 FROM MC I_EQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2944 FROM 1C I_EQE (Event_ID) TO 1 I_EVI (Event_ID); +CREATE ROP REF_ID R2945 FROM 1C I_EQE (Next_Event_Queue_Entry_ID) PHRASE 'follows' TO 1C I_EQE (Event_Queue_Entry_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R2946 FROM MC I_SQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2946 FROM 1C I_SQE (Event_ID) TO 1 I_EVI (Event_ID); +CREATE ROP REF_ID R2947 FROM 1C I_SQE (Next_Self_Queue_Entry_ID) PHRASE 'follows' TO 1C I_SQE (Self_Queue_Entry_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R2949 FROM 1C I_MON (Inst_ID) TO 1 I_INS (Inst_ID); +CREATE ROP REF_ID R2949 FROM MC I_MON (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2951 FROM MC I_VSF (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); +CREATE ROP REF_ID R2953 FROM MC I_INS (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R2954 FROM MC I_STF (Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R2955 FROM MC I_EXE (Component_Id) TO 1C C_C (Id); +CREATE ROP REF_ID R2956 FROM MC I_DIV (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R2957 FROM MC I_INS (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2958 FROM MC I_LIP (Inst_ID) TO 1 I_INS (Inst_ID); +CREATE ROP REF_ID R2959 FROM MC I_LIP (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R2960 FROM MC CSME_CIE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2961 FROM MC CSME_CIE (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R2962 FROM MC I_INS (CIE_ID) TO 1 CSME_CIE (CIE_ID); +CREATE ROP REF_ID R2963 FROM MC I_EXE (ImportedComponent_Id) TO 1C CL_IC (Id); +CREATE ROP REF_ID R2964 FROM MC I_EVI (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2965 FROM 1C I_STF (Blocking_Stack_Frame_ID) PHRASE 'blocked by' TO 1C I_STF (Stack_Frame_ID) PHRASE 'blocks'; +CREATE ROP REF_ID R2966 FROM MC I_ICQE (Stack_ID) TO 1 I_STACK (Stack_ID); +CREATE ROP REF_ID R2966 FROM 1C I_ICQE (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); +CREATE ROP REF_ID R2967 FROM MC I_STF (Value_Q_Stack_ID) TO 1C I_STACK (Stack_ID); +CREATE ROP REF_ID R2968 FROM MC I_RCH (Execution_Engine_ID) PHRASE 'is interface provider to' TO 1 I_EXE (Execution_Engine_ID) PHRASE 'is interface requirer of'; +CREATE ROP REF_ID R2968 FROM MC I_RCH (other_Execution_Engine_ID) PHRASE 'is interface requirer of' TO 1 I_EXE (Execution_Engine_ID) PHRASE 'is interface provider to'; +CREATE ROP REF_ID R2969 FROM MC I_RCH (Satisfaction_Id) TO 1C C_SF (Id); +CREATE ROP REF_ID R2970 FROM 1C I_EXE (Package_ID) TO 1C EP_PKG (Package_ID); +CREATE ROP REF_ID R2971 FROM MC CSME_CIE (Package_ID) TO 1C EP_PKG (Package_ID); +CREATE ROP REF_ID R2972 FROM MC I_RCH (Delegation_Id) TO 1C C_DG (Id); +CREATE ROP REF_ID R2973 FROM 1C I_RCH (Next_provider_Channel_Id) PHRASE 'requirer' TO 1C I_RCH (Channel_Id) PHRASE 'provider'; +CREATE ROP REF_ID R2974 FROM 1C I_CIN (Container_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2975 FROM MC I_EXE (Container_ID) TO 1C I_CIN (Container_ID); +CREATE ROP REF_ID R2976 FROM MC I_EVI (Originating_Execution_Engine_ID) TO 1C I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2977 FROM MC I_ICQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2978 FROM MC I_VSF (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R3000 FROM MC L_LCL (Stack_Frame_ID, Block_ID) TO 1 I_BSF (Stack_Frame_ID, Block_ID); +CREATE ROP REF_ID R3001 FROM 1C L_LCR (Local_ID) TO 1 L_LCL (Local_ID); +CREATE ROP REF_ID R3001 FROM 1C L_LSR (Local_ID) TO 1 L_LCL (Local_ID); +CREATE ROP REF_ID R3001 FROM 1C L_LVL (Local_ID) TO 1 L_LCL (Local_ID); +CREATE ROP REF_ID R3003 FROM MC L_LCR (Var_ID) TO 1C V_INS (Var_ID); +CREATE ROP REF_ID R3004 FROM MC L_LCR (Var_ID) TO 1C V_INT (Var_ID); +CREATE ROP REF_ID R3005 FROM MC L_LVL (Var_ID) TO 1C V_TRN (Var_ID); +CREATE ROP REF_ID R3006 FROM 1C L_IWC (Local_ID) TO 1 L_LSR (Local_ID); +CREATE ROP REF_ID R3007 FROM MC L_LCL (SParm_ID) TO 1C S_SPARM (SParm_ID); +CREATE ROP REF_ID R3008 FROM MC L_LCL (TParm_ID) TO 1C O_TPARM (TParm_ID); +CREATE ROP REF_ID R3009 FROM MC L_LCL (BParm_ID) TO 1C S_BPARM (BParm_ID); +CREATE ROP REF_ID R3010 FROM 1C L_LVL (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R3011 FROM 1C L_IIR (Next_Inst_ID, RuntimeValue_ID) PHRASE 'is before' TO 1C L_IIR (Inst_ID, RuntimeValue_ID) PHRASE 'is after'; +CREATE ROP REF_ID R3012 FROM MC L_LCR (RuntimeValue_ID, Inst_ID) TO 1C L_IIR (RuntimeValue_ID, Inst_ID); +CREATE ROP REF_ID R3013 FROM MC L_IIR (Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R3014 FROM MC L_IWC (Inst_ID) TO 1 I_INS (Inst_ID); +CREATE ROP REF_ID R3016 FROM 1C L_IWC (Next_Inst_ID, Local_ID) PHRASE 'is before' TO 1C L_IWC (Inst_ID, Local_ID) PHRASE 'is after'; +CREATE ROP REF_ID R3017 FROM MC L_LVL (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R3100 FROM 1C BP_CON (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); +CREATE ROP REF_ID R3101 FROM 1C BP_OAL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R3102 FROM 1C BP_OAL (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); +CREATE ROP REF_ID R3102 FROM 1C BP_EV (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); +CREATE ROP REF_ID R3102 FROM 1C BP_ST (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); +CREATE ROP REF_ID R3103 FROM 1C BP_EV (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R3104 FROM 1C BP_ST (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R3200 FROM 1C S_AW (Brg_ID) TO 1 S_BRG (Brg_ID); +CREATE ROP REF_ID R3201 FROM MC S_AW (Sync_ID) TO 1C S_SYNC (Sync_ID); +CREATE ROP REF_ID R3300 FROM 1C RV_SVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3300 FROM 1C RV_SMV (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3300 FROM 1C RV_AVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3301 FROM MC RV_VIS (RuntimeValue_ID) TO 1 RV_SVL (RuntimeValue_ID); +CREATE ROP REF_ID R3301 FROM 1C RV_VIS (ContainedRuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3302 FROM MC RV_VIA (RuntimeValue_ID) TO 1 RV_AVL (RuntimeValue_ID); +CREATE ROP REF_ID R3302 FROM 1C RV_VIA (ContainedRuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3303 FROM MC I_DIV (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3304 FROM MC I_AVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3305 FROM MC I_VSF (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3306 FROM MC L_LCL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3307 FROM MC RV_RVL (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R3308 FROM 1C RV_SCV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); +CREATE ROP REF_ID R3308 FROM 1C RV_CRV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); +CREATE ROP REF_ID R3308 FROM 1C RV_IRV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); +CREATE ROP REF_ID R3309 FROM MC RV_CRV (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R3310 FROM MC RV_RVL (Stack_Frame_ID) TO 1C I_STF (Stack_Frame_ID); +CREATE ROP REF_ID R3311 FROM MC L_IIR (RuntimeValue_ID) TO 1 RV_IRV (RuntimeValue_ID); +CREATE ROP REF_ID R4002 FROM MC C_SF (Requirement_Id) TO 1 C_R (Requirement_Id); +CREATE ROP REF_ID R4002 FROM MC C_SF (Provision_Id) TO 1 C_P (Provision_Id); +CREATE ROP REF_ID R4003 FROM MC C_EP (Interface_Id) TO 1 C_I (Id); +CREATE ROP REF_ID R4004 FROM 1C C_IO (Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4004 FROM 1C C_AS (Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4006 FROM MC C_PP (Signal_Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4007 FROM MC C_PP (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R4008 FROM MC C_IO (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R4009 FROM 1C C_R (Requirement_Id) TO 1 C_IR (Id); +CREATE ROP REF_ID R4009 FROM 1C C_P (Provision_Id) TO 1 C_IR (Id); +CREATE ROP REF_ID R401 FROM 1C CA_EESMC (CPath_ID) TO 1 CA_COMM (CPath_ID); +CREATE ROP REF_ID R401 FROM 1C CA_SMEEC (CPath_ID) TO 1 CA_COMM (CPath_ID); +CREATE ROP REF_ID R401 FROM 1C CA_SMSMC (CPath_ID) TO 1 CA_COMM (CPath_ID); +CREATE ROP REF_ID R4010 FROM MC C_PO (Component_Id) TO 1 C_C (Id); +CREATE ROP REF_ID R4012 FROM MC C_IR (Formal_Interface_Id) TO 1C C_I (Id); +CREATE ROP REF_ID R4013 FROM MC C_RID (Reference_Id) TO 1 C_IR (Id); +CREATE ROP REF_ID R4013 FROM MC C_RID (Delegation_Id) TO 1 C_DG (Id); +CREATE ROP REF_ID R4014 FROM MC C_IR (Delegation_Id) TO 1C C_DG (Id); +CREATE ROP REF_ID R4016 FROM MC C_IR (Port_Id) TO 1 C_PO (Id); +CREATE ROP REF_ID R4017 FROM MC S_DIM (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R4018 FROM MC S_DIM (Id) TO 1C C_IO (Id); +CREATE ROP REF_ID R4019 FROM 1C C_IO (Previous_Id) PHRASE 'succeeds' TO 1C C_IO (Id) PHRASE 'precedes'; +CREATE ROP REF_ID R402 FROM MC CA_EESMC (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); +CREATE ROP REF_ID R4020 FROM 1C C_AS (Previous_Id) PHRASE 'succeeds' TO 1C C_AS (Id) PHRASE 'precedes'; +CREATE ROP REF_ID R4021 FROM 1C C_PP (Previous_PP_Id) PHRASE 'succeeds' TO 1C C_PP (PP_Id) PHRASE 'precedes'; +CREATE ROP REF_ID R403 FROM MC CA_EESMC (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R404 FROM MC CA_EESME (CPath_ID) TO 1 CA_EESMC (CPath_ID); +CREATE ROP REF_ID R405 FROM MC CA_EESME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R406 FROM MC CA_SMSMC (OSM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R407 FROM MC CA_SMSMC (DSM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R408 FROM MC CA_SMSME (CPath_ID) TO 1 CA_SMSMC (CPath_ID); +CREATE ROP REF_ID R409 FROM MC CA_SMSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R410 FROM MC CA_SMEEC (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R411 FROM MC CA_SMEEC (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); +CREATE ROP REF_ID R412 FROM MC CA_SMEEE (CPath_ID) TO 1 CA_SMEEC (CPath_ID); +CREATE ROP REF_ID R413 FROM MC CA_SMEEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); +CREATE ROP REF_ID R414 FROM MC CA_SMSMC (DIObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R415 FROM 1C CA_SMOA (APath_ID) TO 1 CA_ACC (APath_ID); +CREATE ROP REF_ID R415 FROM 1C CA_SMEEA (APath_ID) TO 1 CA_ACC (APath_ID); +CREATE ROP REF_ID R416 FROM MC CA_ACC (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R417 FROM MC CA_SMOA (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R418 FROM MC CA_SMOAA (APath_ID, Obj_ID) TO 1 CA_SMOA (APath_ID, Obj_ID); +CREATE ROP REF_ID R419 FROM MC CA_SMOAA (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R420 FROM MC CA_SMOA (IObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R4201 FROM MC CL_IC (AssignedComp_Id) TO 1C C_C (Id); +CREATE ROP REF_ID R421 FROM MC CA_SMEEA (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); +CREATE ROP REF_ID R422 FROM MC CA_SMEED (APath_ID, EE_ID) TO 1 CA_SMEEA (APath_ID, EE_ID); +CREATE ROP REF_ID R423 FROM MC CA_SMEED (EEdi_ID, EE_ID) TO 1 S_EEDI (EEdi_ID, EE_ID); +CREATE ROP REF_ID R424 FROM MC CA_SMSMC (OIObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R425 FROM MC CA_ACC (IObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R44 FROM MC S_MBR (Parent_DT_DT_ID) TO 1 S_SDT (DT_ID); +CREATE ROP REF_ID R45 FROM MC S_MBR (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R4500 FROM MC SPR_REP (ExecutableProperty_Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4500 FROM MC SPR_REP (Requirement_Id) TO 1 C_R (Requirement_Id); +CREATE ROP REF_ID R4501 FROM MC SPR_PEP (ExecutableProperty_Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4501 FROM MC SPR_PEP (Provision_Id) TO 1 C_P (Provision_Id); +CREATE ROP REF_ID R4502 FROM 1C SPR_RS (Id) TO 1 SPR_REP (Id); +CREATE ROP REF_ID R4502 FROM 1C SPR_RO (Id) TO 1 SPR_REP (Id); +CREATE ROP REF_ID R4503 FROM 1C SPR_PO (Id) TO 1 SPR_PEP (Id); +CREATE ROP REF_ID R4503 FROM 1C SPR_PS (Id) TO 1 SPR_PEP (Id); +CREATE ROP REF_ID R46 FROM 1C S_MBR (Previous_Member_ID, Parent_DT_DT_ID) PHRASE 'succeeds' TO 1C S_MBR (Member_ID, Parent_DT_DT_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R4701 FROM MC CL_IIR (Ref_Id) TO 1C C_IR (Id); +CREATE ROP REF_ID R4703 FROM 1C CL_IP (Id) TO 1 CL_IIR (Id); +CREATE ROP REF_ID R4703 FROM 1C CL_IR (Id) TO 1 CL_IIR (Id); +CREATE ROP REF_ID R4704 FROM 1C CL_IIR (Delegation_Id) TO 1C C_DG (Id); +CREATE ROP REF_ID R4705 FROM 1C CL_IPINS (Satisfaction_Id) TO 1 C_SF (Id); +CREATE ROP REF_ID R4705 FROM MC CL_IPINS (ImportedProvision_Id) TO 1 CL_IP (Id); +CREATE ROP REF_ID R4706 FROM 1C CL_IR (Satisfaction_Element_Id) TO 1C C_SF (Id); +CREATE ROP REF_ID R4707 FROM MC CL_POR (CL_IC_Id) TO 1 CL_IC (Id); +CREATE ROP REF_ID R4708 FROM MC CL_IIR (CL_POR_Id) TO 1 CL_POR (Id); +CREATE ROP REF_ID R4709 FROM MC CL_POR (C_PO_Id) TO 1C C_PO (Id); +CREATE ROP REF_ID R49 FROM MC S_DIM (BParm_ID) TO 1C S_BPARM (BParm_ID); +CREATE ROP REF_ID R50 FROM MC S_DIM (Brg_ID) TO 1C S_BRG (Brg_ID); +CREATE ROP REF_ID R501 FROM MC SM_STATE (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R502 FROM MC SM_EVT (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R503 FROM MC SM_SEME (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R503 FROM MC SM_SEME (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R504 FROM 1C SM_EIGN (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); +CREATE ROP REF_ID R504 FROM 1C SM_CH (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); +CREATE ROP REF_ID R504 FROM 1C SM_NSTXN (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); +CREATE ROP REF_ID R505 FROM MC SM_TXN (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R506 FROM MC SM_TXN (SMstt_ID, SM_ID) TO 1 SM_STATE (SMstt_ID, SM_ID); +CREATE ROP REF_ID R507 FROM 1C SM_NETXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R507 FROM 1C SM_CRTXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R507 FROM 1C SM_NSTXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R508 FROM MC SM_NETXN (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R509 FROM 1C SM_CRTXN (SM_ID, SMevt_ID) TO 1C SM_LEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R51 FROM MC S_DIM (Sync_ID) TO 1C S_SYNC (Sync_ID); +CREATE ROP REF_ID R510 FROM 1C SM_MEALY (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R510 FROM 1C SM_MOORE (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R511 FROM MC SM_MOAH (SM_ID) TO 1 SM_MOORE (SM_ID); +CREATE ROP REF_ID R511 FROM 1C SM_MOAH (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R512 FROM M SM_MEAH (SM_ID) TO 1 SM_MEALY (SM_ID); +CREATE ROP REF_ID R512 FROM 1C SM_MEAH (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R513 FROM 1C SM_MOAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); +CREATE ROP REF_ID R513 FROM 1C SM_MEAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); +CREATE ROP REF_ID R513 FROM 1C SM_TAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); +CREATE ROP REF_ID R514 FROM 1 SM_AH (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); +CREATE ROP REF_ID R515 FROM MC SM_ACT (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R516 FROM MC SM_EVTDI (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R517 FROM 1C SM_ISM (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R517 FROM 1C SM_ASM (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R518 FROM 1C SM_ISM (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R519 FROM 1C SM_ASM (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R52 FROM MC S_DIM (SParm_ID) TO 1C S_SPARM (SParm_ID); +CREATE ROP REF_ID R520 FROM M SM_EVT (SM_ID) TO 1C SM_SUPDT (SM_ID); +CREATE ROP REF_ID R521 FROM MC SM_STATE (SM_ID) TO 1C SM_SUPDT (SM_ID); +CREATE ROP REF_ID R522 FROM MC SM_SDI (SM_ID) TO 1 SM_SUPDT (SM_ID); +CREATE ROP REF_ID R522 FROM MC SM_SDI (SM_ID, SMedi_ID) TO 1 SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R523 FROM MC SM_SUPDT (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R524 FROM MC SM_EVTDI (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R525 FROM 1C SM_SEVT (SM_ID, SMevt_ID) TO 1 SM_EVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R525 FROM 1C SM_PEVT (SM_ID, SMevt_ID) TO 1 SM_EVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R526 FROM 1C SM_NLEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R526 FROM 1C SM_LEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R526 FROM 1C SM_SGEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R527 FROM MC SM_NLEVT (polySM_ID, polySMevt_ID) TO 1 SM_PEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R528 FROM 1C SM_SGEVT (Provided_Signal_Id) TO 1C SPR_PS (Id); +CREATE ROP REF_ID R529 FROM 1C SM_SGEVT (Required_Signal_Id) TO 1C SPR_RS (Id); +CREATE ROP REF_ID R53 FROM MC S_DIM (DT_ID, Member_ID) TO 1C S_MBR (Parent_DT_DT_ID, Member_ID); +CREATE ROP REF_ID R530 FROM 1C SM_TAH (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R531 FROM MC S_DIM (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R532 FROM MC SM_EVTDI (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R533 FROM 1C SM_EVTDI (SM_ID, Previous_SMedi_ID) PHRASE 'succeeds' TO 1C SM_EVTDI (SM_ID, SMedi_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R54 FROM 1C S_SPARM (Previous_SParm_ID) PHRASE 'succeeds' TO 1C S_SPARM (SParm_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R55 FROM 1C S_BPARM (Previous_BParm_ID) PHRASE 'succeeds' TO 1C S_BPARM (BParm_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R56 FROM 1C S_ENUM (Previous_Enum_ID) PHRASE 'succeeds' TO 1C S_ENUM (Enum_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R601 FROM MC ACT_BLK (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R602 FROM MC ACT_SMT (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_FOR (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_WHL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_IF (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_EL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_E (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_BRG (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_FNC (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_RET (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_TFM (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_AI (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_DEL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_CNV (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_CR (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_SEL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_FIO (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_FIW (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_URU (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_UNR (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_RU (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_REL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_CTL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_BRK (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_CON (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C E_ESS (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C E_GPR (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_IOP (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_SGN (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R604 FROM 1C ACT_LNK (Next_Link_ID) PHRASE 'precedes' TO 1C ACT_LNK (Link_ID) PHRASE 'succeeds'; +CREATE ROP REF_ID R605 FROM 1C ACT_FOR (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R606 FROM 1C ACT_E (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R607 FROM 1C ACT_IF (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R608 FROM 1C ACT_WHL (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R609 FROM 1C ACT_AI (r_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R610 FROM 1C ACT_FIW (Where_Clause_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R611 FROM 1C ACT_SRW (Where_Clause_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R613 FROM 1C ACT_SEL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R614 FROM MC ACT_FOR (Loop_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R615 FROM MC ACT_REL (One_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R616 FROM MC ACT_REL (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R617 FROM MC ACT_RU (One_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R618 FROM MC ACT_RU (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R619 FROM MC ACT_RU (Associative_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R620 FROM MC ACT_UNR (One_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R621 FROM MC ACT_UNR (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R622 FROM MC ACT_URU (One_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R623 FROM MC ACT_URU (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R624 FROM MC ACT_URU (Associative_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R625 FROM 1C ACT_IF (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R626 FROM 1C ACT_WHL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R627 FROM MC V_PAR (Statement_ID) TO 1C ACT_TFM (Statement_ID); +CREATE ROP REF_ID R628 FROM MC V_PAR (Statement_ID) TO 1C ACT_BRG (Statement_ID); +CREATE ROP REF_ID R629 FROM MC ACT_IOP (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R630 FROM MC ACT_SGN (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R633 FROM MC ACT_CR (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R634 FROM MC ACT_DEL (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R637 FROM 1 ACT_LNK (Statement_ID) TO 1C ACT_SEL (Statement_ID); +CREATE ROP REF_ID R638 FROM MC ACT_SEL (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R639 FROM MC ACT_FIO (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R652 FROM MC ACT_FOR (Set_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R653 FROM MC ACT_REL (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R654 FROM MC ACT_RU (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R655 FROM MC ACT_UNR (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R656 FROM MC ACT_URU (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R657 FROM MC ACT_IOP (RequiredOp_Id) TO 1C SPR_RO (Id); +CREATE ROP REF_ID R658 FROM 1C ACT_EL (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R659 FROM 1C ACT_EL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R660 FROM MC ACT_SGN (RequiredSig_Id) TO 1C SPR_RS (Id); +CREATE ROP REF_ID R661 FROM 1C ACT_SMT (Previous_Statement_ID, Block_ID) PHRASE 'succeeds' TO 1C ACT_SMT (Statement_ID, Block_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R662 FROM MC V_PAR (Statement_ID) TO 1C ACT_SGN (Statement_ID); +CREATE ROP REF_ID R663 FROM MC ACT_SGN (ProvidedSig_Id) TO 1C SPR_PS (Id); +CREATE ROP REF_ID R664 FROM 1C ACT_SRW (Statement_ID) TO 1 ACT_SEL (Statement_ID); +CREATE ROP REF_ID R664 FROM 1C ACT_SR (Statement_ID) TO 1 ACT_SEL (Statement_ID); +CREATE ROP REF_ID R665 FROM MC ACT_FIW (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R666 FROM 1C ACT_ACT (Block_ID) TO 1C ACT_BLK (Block_ID); +CREATE ROP REF_ID R667 FROM MC ACT_TFM (Var_ID) TO 1C V_VAR (Var_ID); +CREATE ROP REF_ID R668 FROM 1C ACT_RET (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R669 FROM MC V_PAR (Statement_ID) TO 1C ACT_FNC (Statement_ID); +CREATE ROP REF_ID R670 FROM MC ACT_FOR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R671 FROM MC ACT_CR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R672 FROM MC ACT_CNV (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R673 FROM MC ACT_TFM (Tfr_ID) TO 1C O_TFR (Tfr_ID); +CREATE ROP REF_ID R674 FROM MC ACT_BRG (Brg_ID) TO 1C S_BRG (Brg_ID); +CREATE ROP REF_ID R675 FROM MC ACT_FNC (Sync_ID) TO 1C S_SYNC (Sync_ID); +CREATE ROP REF_ID R676 FROM MC ACT_FIW (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R677 FROM MC ACT_FIO (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R678 FROM MC ACT_LNK (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R679 FROM MC V_PAR (Statement_ID) TO 1C ACT_IOP (Statement_ID); +CREATE ROP REF_ID R680 FROM MC ACT_IOP (ProvidedOp_Id) TO 1C SPR_PO (Id); +CREATE ROP REF_ID R681 FROM MC ACT_LNK (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R682 FROM MC ACT_EL (If_Statement_ID) TO 1 ACT_IF (Statement_ID); +CREATE ROP REF_ID R683 FROM 1C ACT_E (If_Statement_ID) TO 1 ACT_IF (Statement_ID); +CREATE ROP REF_ID R684 FROM 1C ACT_RSB (Id) TO 1 SPR_RS (Id); +CREATE ROP REF_ID R685 FROM 1C ACT_ROB (Id) TO 1 SPR_RO (Id); +CREATE ROP REF_ID R686 FROM 1C ACT_PSB (Id) TO 1 SPR_PS (Id); +CREATE ROP REF_ID R687 FROM 1C ACT_POB (Id) TO 1 SPR_PO (Id); +CREATE ROP REF_ID R688 FROM 1C ACT_TAB (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); +CREATE ROP REF_ID R689 FROM 1C ACT_AI (l_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R690 FROM 1C ACT_IF (Elif_Statement_ID) TO 1C ACT_EL (Statement_ID); +CREATE ROP REF_ID R691 FROM 1C ACT_SAB (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); +CREATE ROP REF_ID R692 FROM 1C ACT_IF (Else_Statement_ID) TO 1C ACT_E (Statement_ID); +CREATE ROP REF_ID R693 FROM 1C ACT_DAB (Attr_ID, Obj_ID) TO 1 O_DBATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R695 FROM 1C ACT_FNB (Sync_ID) TO 1 S_SYNC (Sync_ID); +CREATE ROP REF_ID R696 FROM 1C ACT_OPB (Tfr_ID) TO 1 O_TFR (Tfr_ID); +CREATE ROP REF_ID R697 FROM 1C ACT_BRB (Brg_ID) TO 1 S_BRG (Brg_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_SAB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_DAB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_FNB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_OPB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_BRB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_POB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_PSB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_ROB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_RSB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_TAB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R699 FROM 1C ACT_ACT (CurrentScope_ID) TO 1C ACT_BLK (Block_ID); +CREATE ROP REF_ID R700 FROM MC V_PAR (Statement_ID) TO 1C E_ESS (Statement_ID); +CREATE ROP REF_ID R701 FROM 1C E_CES (Statement_ID) TO 1 E_ESS (Statement_ID); +CREATE ROP REF_ID R701 FROM 1C E_GES (Statement_ID) TO 1 E_ESS (Statement_ID); +CREATE ROP REF_ID R702 FROM 1C E_CEE (Statement_ID) TO 1 E_CES (Statement_ID); +CREATE ROP REF_ID R702 FROM 1C E_CSME (Statement_ID) TO 1 E_CES (Statement_ID); +CREATE ROP REF_ID R703 FROM 1C E_GEE (Statement_ID) TO 1 E_GES (Statement_ID); +CREATE ROP REF_ID R703 FROM 1C E_GSME (Statement_ID) TO 1 E_GES (Statement_ID); +CREATE ROP REF_ID R704 FROM 1C E_CEI (Statement_ID) TO 1 E_CSME (Statement_ID); +CREATE ROP REF_ID R704 FROM 1C E_CEA (Statement_ID) TO 1 E_CSME (Statement_ID); +CREATE ROP REF_ID R704 FROM 1C E_CEC (Statement_ID) TO 1 E_CSME (Statement_ID); +CREATE ROP REF_ID R705 FROM 1C E_GEN (Statement_ID) TO 1 E_GSME (Statement_ID); +CREATE ROP REF_ID R705 FROM 1C E_GAR (Statement_ID) TO 1 E_GSME (Statement_ID); +CREATE ROP REF_ID R705 FROM 1C E_GEC (Statement_ID) TO 1 E_GSME (Statement_ID); +CREATE ROP REF_ID R706 FROM MC E_CSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R707 FROM MC E_GSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R708 FROM MC E_CEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); +CREATE ROP REF_ID R709 FROM MC E_GEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); +CREATE ROP REF_ID R710 FROM MC E_CES (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R711 FROM MC E_CEI (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R712 FROM MC E_GEN (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R714 FROM 1C E_GPR (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R800 FROM 1C V_PAR (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R8000 FROM MC PE_PE (Package_ID) TO 1C EP_PKG (Package_ID); +CREATE ROP REF_ID R8001 FROM 1C S_DT (DT_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C SQ_P (Part_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C UC_UCA (Assoc_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C A_N (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C O_OBJ (Obj_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C C_C (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C CL_IC (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C C_I (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C EP_PKG (Package_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C CNST_CSP (Constant_Spec_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C A_AP (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C A_E (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C MSG_M (Msg_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C O_IOBJ (IObj_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C R_REL (Rel_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C S_EE (EE_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C S_SYNC (Sync_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C C_SF (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C C_DG (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8003 FROM MC PE_PE (Component_ID) TO 1C C_C (Id); +CREATE ROP REF_ID R801 FROM 1C V_FNV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_PVL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_SLR (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_BRV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_IRF (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_AVL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LIN (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LST (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_UNY (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_TRV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_ISR (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_EDV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_TVL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LRL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LBO (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_BIN (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LEN (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_MVL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_AER (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_ALV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_MSV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_SCV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R802 FROM 1C V_BIN (Left_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R803 FROM 1C V_BIN (Right_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R804 FROM 1C V_UNY (Operand_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R805 FROM MC V_TVL (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R806 FROM MC V_AVL (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R807 FROM 1C V_AVL (Root_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R808 FROM MC V_IRF (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R809 FROM MC V_ISR (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R810 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_BRV (Value_ID); +CREATE ROP REF_ID R811 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_TRV (Value_ID); +CREATE ROP REF_ID R812 FROM MC V_SLR (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R814 FROM 1C V_INT (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R814 FROM 1C V_INS (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R814 FROM 1C V_TRN (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R816 FROM 1C V_PAR (Next_Value_ID) PHRASE 'precedes' TO 1C V_PAR (Value_ID) PHRASE 'succeeds'; +CREATE ROP REF_ID R817 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_FNV (Value_ID); +CREATE ROP REF_ID R818 FROM MC V_INT (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R819 FROM MC V_INS (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R820 FROM MC V_VAL (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R821 FROM MC V_TRN (DT_ID) TO 1C S_DT (DT_ID); +CREATE ROP REF_ID R823 FROM MC V_VAR (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R824 FROM MC V_LEN (Enum_ID) TO 1 S_ENUM (Enum_ID); +CREATE ROP REF_ID R825 FROM 1C V_SLR (Op_Value_ID) TO 1C V_TRV (Value_ID); +CREATE ROP REF_ID R826 FROM MC V_VAL (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R827 FROM MC V_FNV (Sync_ID) TO 1 S_SYNC (Sync_ID); +CREATE ROP REF_ID R828 FROM MC V_BRV (Brg_ID) TO 1 S_BRG (Brg_ID); +CREATE ROP REF_ID R829 FROM MC V_TRV (Tfr_ID) TO 1 O_TFR (Tfr_ID); +CREATE ROP REF_ID R830 FROM MC V_TRV (Var_ID) TO 1C V_VAR (Var_ID); +CREATE ROP REF_ID R831 FROM MC V_PVL (BParm_ID) TO 1C S_BPARM (BParm_ID); +CREATE ROP REF_ID R832 FROM MC V_PVL (SParm_ID) TO 1C S_SPARM (SParm_ID); +CREATE ROP REF_ID R833 FROM MC V_PVL (TParm_ID) TO 1C O_TPARM (TParm_ID); +CREATE ROP REF_ID R834 FROM MC V_EPR (Value_ID) TO 1 V_EDV (Value_ID); +CREATE ROP REF_ID R835 FROM M V_LOC (Var_ID) TO 1C V_VAR (Var_ID); +CREATE ROP REF_ID R836 FROM MC V_MVL (DT_DT_ID, Member_ID) TO 1 S_MBR (Parent_DT_DT_ID, Member_ID); +CREATE ROP REF_ID R837 FROM 1C V_MVL (Root_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R838 FROM 1C V_AER (Root_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R839 FROM 1C V_AER (Index_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R840 FROM 1C V_ALV (Array_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R841 FROM MC V_MSV (PEP_Id) TO 1C SPR_PEP (Id); +CREATE ROP REF_ID R842 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_MSV (Value_ID); +CREATE ROP REF_ID R843 FROM MC V_PVL (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R844 FROM MC S_DIM (Var_ID) TO 1C V_TRN (Var_ID); +CREATE ROP REF_ID R845 FROM MC V_MSV (REP_Id) TO 1C SPR_REP (Id); +CREATE ROP REF_ID R846 FROM MC V_EPR (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R847 FROM MC V_EPR (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R848 FROM MC V_VAR (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R849 FROM MC S_DIM (Var_ID) TO 1C V_VAR (Var_ID); +CREATE ROP REF_ID R850 FROM MC V_SCV (Const_ID, DT_ID) TO 1 CNST_SYC (Const_ID, DT_ID); +CREATE ROP REF_ID R851 FROM MC V_MSV (Target_Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R9 FROM MC S_EEM (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R9000 FROM MC PA_SIC (Component_Id) TO 1 C_C (Id); +CREATE ROP REF_ID R9000 FROM 1C PA_SIC (Satisfaction_Id) TO 1 C_SF (Id); +CREATE ROP REF_ID R9002 FROM MC PA_DIC (Component_Id) TO 1 C_C (Id); +CREATE ROP REF_ID R9002 FROM 1 PA_DIC (Delegation_Id) TO 1 C_DG (Id); +CREATE ROP REF_ID R9100 FROM MC G_EIS (Element_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R9100 FROM MC G_EIS (Sys_ID) TO 1 S_SYS (Sys_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_CIP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_EEP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_CP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_AP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_LS (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C IA_UCP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_COP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_PP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R931 FROM MC SQ_TM (Part_ID) TO 1 SQ_LS (Part_ID); +CREATE ROP REF_ID R933 FROM MC SQ_EEP (EE_ID) TO 1C S_EE (EE_ID); +CREATE ROP REF_ID R934 FROM MC SQ_CIP (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R935 FROM MC SQ_CPA (Part_ID) TO 1 SQ_CP (Part_ID); +CREATE ROP REF_ID R936 FROM MC SQ_AV (Informal_Part_ID) TO 1C SQ_CIP (Part_ID); +CREATE ROP REF_ID R937 FROM MC SQ_AV (Formal_Part_ID) TO 1C SQ_CIP (Part_ID); +CREATE ROP REF_ID R938 FROM MC SQ_AV (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R939 FROM MC SQ_CP (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R940 FROM 1C SQ_LS (Source_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R941 FROM MC SQ_TS (Prev_Mark_ID) TO 1 SQ_TM (Mark_ID); +CREATE ROP REF_ID R942 FROM MC SQ_TS (Mark_ID) TO 1 SQ_TM (Mark_ID); +CREATE ROP REF_ID R947 FROM 1C SQ_IA (Ia_ID) TO 1 SQ_CPA (Ia_ID); +CREATE ROP REF_ID R947 FROM 1C SQ_FA (Ia_ID) TO 1 SQ_CPA (Ia_ID); +CREATE ROP REF_ID R948 FROM 1C SQ_IAV (Av_ID) TO 1 SQ_AV (Av_ID); +CREATE ROP REF_ID R948 FROM 1C SQ_FAV (Av_ID) TO 1 SQ_AV (Av_ID); +CREATE ROP REF_ID R949 FROM 1C SQ_AP (LS_Part_ID) TO 1C SQ_LS (Part_ID); +CREATE ROP REF_ID R955 FROM MC SQ_COP (Component_Id) TO 1C C_C (Id); +CREATE ROP REF_ID R956 FROM MC SQ_PP (Package_ID) TO 1C EP_PKG (Package_ID); -CREATE ROP REF_ID R3201 FROM MC S_AW ( Sync_ID ) - TO 1C S_SYNC ( Sync_ID ); -CREATE ROP REF_ID R3200 FROM 1C S_AW ( Brg_ID ) - TO 1 S_BRG ( Brg_ID ); -CREATE ROP REF_ID R800 FROM 1C V_PAR ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R804 FROM 1C V_UNY ( Operand_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R803 FROM 1C V_BIN ( Right_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R802 FROM 1C V_BIN ( Left_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_FNV ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_PVL ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_SLR ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_BRV ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_IRF ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_AVL ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_LIN ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_LST ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_UNY ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_TRV ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_ISR ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_EDV ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_TVL ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_LRL ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_LBO ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_BIN ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_LEN ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_MVL ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_AER ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_ALV ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_MSV ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R801 FROM 1C V_SCV ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R814 FROM 1C V_INT ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R814 FROM 1C V_INS ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R814 FROM 1C V_TRN ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R805 FROM MC V_TVL ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R808 FROM MC V_IRF ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R809 FROM MC V_ISR ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R818 FROM MC V_INT ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R819 FROM MC V_INS ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R820 FROM MC V_VAL ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R821 FROM MC V_TRN ( DT_ID ) - TO 1C S_DT ( DT_ID ); -CREATE ROP REF_ID R823 FROM MC V_VAR ( Block_ID ) - TO 1 ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R806 FROM MC V_AVL ( Attr_ID , Obj_ID ) - TO 1 O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R824 FROM MC V_LEN ( Enum_ID ) - TO 1 S_ENUM ( Enum_ID ); -CREATE ROP REF_ID R825 FROM 1C V_SLR ( Op_Value_ID ) - TO 1C V_TRV ( Value_ID ); -CREATE ROP REF_ID R826 FROM MC V_VAL ( Block_ID ) - TO 1 ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R817 FROM MC V_PAR ( Invocation_Value_ID ) - TO 1C V_FNV ( Value_ID ); -CREATE ROP REF_ID R810 FROM MC V_PAR ( Invocation_Value_ID ) - TO 1C V_BRV ( Value_ID ); -CREATE ROP REF_ID R811 FROM MC V_PAR ( Invocation_Value_ID ) - TO 1C V_TRV ( Value_ID ); -CREATE ROP REF_ID R827 FROM MC V_FNV ( Sync_ID ) - TO 1 S_SYNC ( Sync_ID ); -CREATE ROP REF_ID R828 FROM MC V_BRV ( Brg_ID ) - TO 1 S_BRG ( Brg_ID ); -CREATE ROP REF_ID R829 FROM MC V_TRV ( Tfr_ID ) - TO 1 O_TFR ( Tfr_ID ); -CREATE ROP REF_ID R816 FROM 1C V_PAR ( Next_Value_ID ) PHRASE 'precedes' - TO 1C V_PAR ( Value_ID ) PHRASE 'succeeds'; -CREATE ROP REF_ID R830 FROM MC V_TRV ( Var_ID ) - TO 1C V_VAR ( Var_ID ); -CREATE ROP REF_ID R831 FROM MC V_PVL ( BParm_ID ) - TO 1C S_BPARM ( BParm_ID ); -CREATE ROP REF_ID R832 FROM MC V_PVL ( SParm_ID ) - TO 1C S_SPARM ( SParm_ID ); -CREATE ROP REF_ID R833 FROM MC V_PVL ( TParm_ID ) - TO 1C O_TPARM ( TParm_ID ); -CREATE ROP REF_ID R835 FROM M V_LOC ( Var_ID ) - TO 1C V_VAR ( Var_ID ); -CREATE ROP REF_ID R812 FROM MC V_SLR ( Attr_ID , Obj_ID ) - TO 1C O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R836 FROM MC V_MVL ( Member_ID , DT_DT_ID ) - TO 1 S_MBR ( Member_ID , Parent_DT_DT_ID ); -CREATE ROP REF_ID R837 FROM 1C V_MVL ( Root_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R807 FROM 1C V_AVL ( Root_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R838 FROM 1C V_AER ( Root_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R839 FROM 1C V_AER ( Index_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R840 FROM 1C V_ALV ( Array_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R842 FROM MC V_PAR ( Invocation_Value_ID ) - TO 1C V_MSV ( Value_ID ); -CREATE ROP REF_ID R843 FROM MC V_PVL ( PP_Id ) - TO 1C C_PP ( PP_Id ); -CREATE ROP REF_ID R844 FROM MC S_DIM ( Var_ID ) - TO 1C V_TRN ( Var_ID ); -CREATE ROP REF_ID R841 FROM MC V_MSV ( PEP_Id ) - TO 1C SPR_PEP ( Id ); -CREATE ROP REF_ID R845 FROM MC V_MSV ( REP_Id ) - TO 1C SPR_REP ( Id ); -CREATE ROP REF_ID R834 FROM MC V_EPR ( Value_ID ) - TO 1 V_EDV ( Value_ID ); -CREATE ROP REF_ID R846 FROM MC V_EPR ( SM_ID , SMedi_ID ) - TO 1C SM_EVTDI ( SM_ID , SMedi_ID ); -CREATE ROP REF_ID R847 FROM MC V_EPR ( PP_Id ) - TO 1C C_PP ( PP_Id ); -CREATE ROP REF_ID R848 FROM MC V_VAR ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R849 FROM MC S_DIM ( Var_ID ) - TO 1C V_VAR ( Var_ID ); -CREATE ROP REF_ID R850 FROM MC V_SCV ( Const_ID , DT_ID ) - TO 1 CNST_SYC ( Const_ID , DT_ID ); -CREATE ROP REF_ID R851 FROM MC V_MSV ( Target_Value_ID ) - TO 1C V_VAL ( Value_ID ); -CREATE ROP REF_ID R1201 FROM MC UC_UCC ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R1202 FROM MC UC_UCC ( SS_ID ) - TO 1C S_SS ( SS_ID ); -CREATE ROP REF_ID R1208 FROM 1C UC_UIU ( Package_ID ) - TO 1 UC_UCC ( Package_ID ); -CREATE ROP REF_ID R1209 FROM MC UC_UCC ( Parent_Package_ID ) - TO 1C UC_UIU ( Package_ID ); -CREATE ROP REF_ID R1210 FROM 1C UC_E ( Assoc_ID ) - TO 1 UC_UCA ( Assoc_ID ); -CREATE ROP REF_ID R1210 FROM 1C UC_G ( Assoc_ID ) - TO 1 UC_UCA ( Assoc_ID ); -CREATE ROP REF_ID R1210 FROM 1C UC_I ( Assoc_ID ) - TO 1 UC_UCA ( Assoc_ID ); -CREATE ROP REF_ID R1210 FROM 1C UC_BA ( Assoc_ID ) - TO 1 UC_UCA ( Assoc_ID ); -CREATE ROP REF_ID R1203 FROM MC UC_PIUC ( Package_ID ) - TO 1 UC_UCC ( Package_ID ); -CREATE ROP REF_ID R1203 FROM 1C UC_PIUC ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R1206 FROM MC UC_UCA ( Source_Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R1207 FROM MC UC_UCA ( Destination_Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R1211 FROM MC UC_UCC ( Sys_ID ) - TO 1C S_SYS ( Sys_ID ); -CREATE ROP REF_ID R1212 FROM MC UC_UCC ( Component_Package_ID ) - TO 1C CP_CP ( Package_ID ); -CREATE ROP REF_ID R1213 FROM MC UC_UCC ( Component_Id ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R1214 FROM MC UC_AIUC ( Package_ID ) - TO 1 UC_UCC ( Package_ID ); -CREATE ROP REF_ID R1215 FROM 1C UC_AIUC ( Assoc_ID ) - TO 1 UC_UCA ( Assoc_ID ); -CREATE ROP REF_ID R4400 FROM MC SLD_SDP ( Sys_ID ) - TO 1 S_SYS ( Sys_ID ); -CREATE ROP REF_ID R4400 FROM 1C SLD_SDP ( Package_ID ) - TO 1 S_DPK ( Package_ID ); -CREATE ROP REF_ID R4401 FROM MC SLD_SDINP ( Package_ID ) - TO 1 S_DPK ( Package_ID ); -CREATE ROP REF_ID R4401 FROM MC SLD_SDINP ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R4402 FROM MC SLD_SDINP ( Sys_ID ) - TO 1 S_SYS ( Sys_ID ); -CREATE ROP REF_ID R4404 FROM MC SLD_SCINP ( Sys_ID ) - TO 1 S_SYS ( Sys_ID ); -CREATE ROP REF_ID R4403 FROM MC SLD_SCINP ( Package_ID ) - TO 1 S_DPK ( Package_ID ); -CREATE ROP REF_ID R4403 FROM MC SLD_SCINP ( Constant_Spec_ID ) - TO 1 CNST_CSP ( Constant_Spec_ID ); -CREATE ROP REF_ID R117 FROM MC O_TPARM ( Tfr_ID ) - TO 1 O_TFR ( Tfr_ID ); -CREATE ROP REF_ID R118 FROM MC O_TPARM ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R116 FROM MC O_TFR ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R115 FROM MC O_TFR ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R102 FROM MC O_ATTR ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R103 FROM 1C O_ATTR ( PAttr_ID , Obj_ID ) PHRASE 'succeeds' - TO 1C O_ATTR ( Attr_ID , Obj_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R114 FROM MC O_ATTR ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R106 FROM 1C O_BATTR ( Attr_ID , Obj_ID ) - TO 1 O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R106 FROM 1C O_RATTR ( Attr_ID , Obj_ID ) - TO 1 O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R113 FROM MC O_RATTR ( BAttr_ID , BObj_ID ) - TO 1 O_BATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R107 FROM 1C O_DBATTR ( Attr_ID , Obj_ID ) - TO 1 O_BATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R107 FROM 1C O_NBATTR ( Attr_ID , Obj_ID ) - TO 1 O_BATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R108 FROM M O_REF ( Attr_ID , Obj_ID ) - TO 1 O_RATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R112 FROM 1C O_REF ( PARef_ID ) PHRASE 'succeeds' - TO 1C O_REF ( ARef_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R105 FROM MC O_OIDA ( Oid_ID , Obj_ID ) - TO 1 O_ID ( Oid_ID , Obj_ID ); -CREATE ROP REF_ID R105 FROM MC O_OIDA ( Attr_ID , Obj_ID ) - TO 1 O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R104 FROM MC O_ID ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R101 FROM MC O_IOBJ ( Obj_ID ) - TO 1C O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R110 FROM MC O_RTIDA ( Oid_ID , OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RTO ( Oid_ID , OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R110 FROM MC O_RTIDA ( Attr_ID , Oid_ID , Obj_ID ) - TO 1 O_OIDA ( Attr_ID , Oid_ID , Obj_ID ); -CREATE ROP REF_ID R109 FROM MC R_RTO ( Oid_ID , Obj_ID ) - TO 1C O_ID ( Oid_ID , Obj_ID ); -CREATE ROP REF_ID R111 FROM MC O_REF ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RGO ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R111 FROM MC O_REF ( RAttr_ID , ROIR_ID , ROid_ID , RObj_ID , Rel_ID ) - TO 1 O_RTIDA ( Attr_ID , OIR_ID , Oid_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R120 FROM MC S_DIM ( Attr_ID , Obj_ID ) - TO 1C O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R121 FROM MC S_DIM ( TParm_ID ) - TO 1C O_TPARM ( TParm_ID ); -CREATE ROP REF_ID R122 FROM MC S_DIM ( Tfr_ID ) - TO 1C O_TFR ( Tfr_ID ); -CREATE ROP REF_ID R123 FROM MC S_IRDT ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R124 FROM 1C O_TPARM ( Previous_TParm_ID ) PHRASE 'succeeds' - TO 1C O_TPARM ( TParm_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R125 FROM 1C O_TFR ( Previous_Tfr_ID ) PHRASE 'succeeds' - TO 1C O_TFR ( Tfr_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R502 FROM MC SM_EVT ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R501 FROM MC SM_STATE ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R504 FROM 1C SM_EIGN ( SMspd_ID , SMevt_ID , SM_ID , SMstt_ID ) - TO 1 SM_SEME ( SMspd_ID , SMevt_ID , SM_ID , SMstt_ID ); -CREATE ROP REF_ID R504 FROM 1C SM_CH ( SMspd_ID , SMevt_ID , SM_ID , SMstt_ID ) - TO 1 SM_SEME ( SMspd_ID , SMevt_ID , SM_ID , SMstt_ID ); -CREATE ROP REF_ID R504 FROM 1C SM_NSTXN ( SMspd_ID , SMevt_ID , SM_ID , SMstt_ID ) - TO 1 SM_SEME ( SMspd_ID , SMevt_ID , SM_ID , SMstt_ID ); -CREATE ROP REF_ID R507 FROM 1C SM_NETXN ( Trans_ID , SM_ID ) - TO 1 SM_TXN ( Trans_ID , SM_ID ); -CREATE ROP REF_ID R507 FROM 1C SM_CRTXN ( Trans_ID , SM_ID ) - TO 1 SM_TXN ( Trans_ID , SM_ID ); -CREATE ROP REF_ID R507 FROM 1C SM_NSTXN ( Trans_ID , SM_ID ) - TO 1 SM_TXN ( Trans_ID , SM_ID ); -CREATE ROP REF_ID R508 FROM MC SM_NETXN ( SM_ID , SMstt_ID ) - TO 1 SM_STATE ( SM_ID , SMstt_ID ); -CREATE ROP REF_ID R506 FROM MC SM_TXN ( SMspd_ID , SMstt_ID , SM_ID ) - TO 1 SM_STATE ( SMspd_ID , SMstt_ID , SM_ID ); -CREATE ROP REF_ID R505 FROM MC SM_TXN ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R510 FROM 1C SM_MEALY ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R510 FROM 1C SM_MOORE ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R511 FROM MC SM_MOAH ( SM_ID ) - TO 1 SM_MOORE ( SM_ID ); -CREATE ROP REF_ID R511 FROM 1C SM_MOAH ( SM_ID , SMstt_ID ) - TO 1 SM_STATE ( SM_ID , SMstt_ID ); -CREATE ROP REF_ID R512 FROM M SM_MEAH ( SM_ID ) - TO 1 SM_MEALY ( SM_ID ); -CREATE ROP REF_ID R512 FROM 1C SM_MEAH ( Trans_ID , SM_ID ) - TO 1 SM_TXN ( Trans_ID , SM_ID ); -CREATE ROP REF_ID R513 FROM 1C SM_MOAH ( Act_ID , SM_ID ) - TO 1 SM_AH ( Act_ID , SM_ID ); -CREATE ROP REF_ID R513 FROM 1C SM_MEAH ( Act_ID , SM_ID ) - TO 1 SM_AH ( Act_ID , SM_ID ); -CREATE ROP REF_ID R513 FROM 1C SM_TAH ( Act_ID , SM_ID ) - TO 1 SM_AH ( Act_ID , SM_ID ); -CREATE ROP REF_ID R514 FROM 1 SM_AH ( SM_ID , Act_ID ) - TO 1 SM_ACT ( SM_ID , Act_ID ); -CREATE ROP REF_ID R515 FROM MC SM_ACT ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R517 FROM 1C SM_ISM ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R517 FROM 1C SM_ASM ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R518 FROM 1C SM_ISM ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R519 FROM 1C SM_ASM ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R516 FROM MC SM_EVTDI ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R521 FROM MC SM_STATE ( SMspd_ID , SM_ID ) - TO 1C SM_SUPDT ( SMspd_ID , SM_ID ); -CREATE ROP REF_ID R520 FROM M SM_EVT ( SMspd_ID , SM_ID ) - TO 1C SM_SUPDT ( SMspd_ID , SM_ID ); -CREATE ROP REF_ID R522 FROM MC SM_SDI ( SMspd_ID , SM_ID ) - TO 1 SM_SUPDT ( SMspd_ID , SM_ID ); -CREATE ROP REF_ID R522 FROM MC SM_SDI ( SM_ID , SMedi_ID ) - TO 1 SM_EVTDI ( SM_ID , SMedi_ID ); -CREATE ROP REF_ID R523 FROM MC SM_SUPDT ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R524 FROM MC SM_EVTDI ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R525 FROM 1C SM_SEVT ( SM_ID , SMevt_ID , SMspd_ID ) - TO 1 SM_EVT ( SM_ID , SMevt_ID , SMspd_ID ); -CREATE ROP REF_ID R525 FROM 1C SM_PEVT ( SM_ID , SMevt_ID , SMspd_ID ) - TO 1 SM_EVT ( SM_ID , SMevt_ID , SMspd_ID ); -CREATE ROP REF_ID R503 FROM MC SM_SEME ( SM_ID , SMstt_ID ) - TO 1 SM_STATE ( SM_ID , SMstt_ID ); -CREATE ROP REF_ID R503 FROM MC SM_SEME ( SMevt_ID , SM_ID , SMspd_ID ) - TO 1 SM_SEVT ( SMevt_ID , SM_ID , SMspd_ID ); -CREATE ROP REF_ID R526 FROM 1C SM_NLEVT ( SMevt_ID , SM_ID , SMspd_ID ) - TO 1 SM_SEVT ( SMevt_ID , SM_ID , SMspd_ID ); -CREATE ROP REF_ID R526 FROM 1C SM_LEVT ( SMevt_ID , SM_ID , SMspd_ID ) - TO 1 SM_SEVT ( SMevt_ID , SM_ID , SMspd_ID ); -CREATE ROP REF_ID R526 FROM 1C SM_SGEVT ( SMevt_ID , SM_ID , SMspd_ID ) - TO 1 SM_SEVT ( SMevt_ID , SM_ID , SMspd_ID ); -CREATE ROP REF_ID R509 FROM 1C SM_CRTXN ( SM_ID , SMevt_ID ) - TO 1C SM_LEVT ( SM_ID , SMevt_ID ); -CREATE ROP REF_ID R527 FROM MC SM_NLEVT ( polySM_ID , polySMevt_ID ) - TO 1 SM_PEVT ( SM_ID , SMevt_ID ); -CREATE ROP REF_ID R528 FROM 1C SM_SGEVT ( Provided_Signal_Id ) - TO 1C SPR_PS ( Id ); -CREATE ROP REF_ID R529 FROM 1C SM_SGEVT ( Required_Signal_Id ) - TO 1C SPR_RS ( Id ); -CREATE ROP REF_ID R530 FROM 1C SM_TAH ( Trans_ID , SM_ID ) - TO 1 SM_TXN ( Trans_ID , SM_ID ); -CREATE ROP REF_ID R531 FROM MC S_DIM ( SM_ID , SMedi_ID ) - TO 1C SM_EVTDI ( SM_ID , SMedi_ID ); -CREATE ROP REF_ID R532 FROM MC SM_EVTDI ( SMevt_ID ) - TO 1 SM_EVT ( SMevt_ID ); -CREATE ROP REF_ID R533 FROM 1C SM_EVTDI ( SM_ID , Previous_SMedi_ID ) PHRASE 'succeeds' - TO 1C SM_EVTDI ( SM_ID , SMedi_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R913 FROM MC SQ_S ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R914 FROM MC SQ_S ( SS_ID ) - TO 1C S_SS ( SS_ID ); -CREATE ROP REF_ID R928 FROM MC SQ_S ( Prev_Package_ID ) - TO 1C SQ_SIS ( Package_ID ); -CREATE ROP REF_ID R911 FROM 1C SQ_SIS ( Package_ID ) - TO 1 SQ_S ( Package_ID ); -CREATE ROP REF_ID R929 FROM MC SQ_P ( Sequence_Package_ID ) - TO 1C SQ_S ( Package_ID ); -CREATE ROP REF_ID R950 FROM MC SQ_S ( Sys_ID ) - TO 1C S_SYS ( Sys_ID ); -CREATE ROP REF_ID R951 FROM MC SQ_S ( Component_Package_ID ) - TO 1C CP_CP ( Package_ID ); -CREATE ROP REF_ID R952 FROM MC SQ_S ( Component_Id ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R953 FROM MC SQ_MIS ( Package_ID ) - TO 1 SQ_S ( Package_ID ); -CREATE ROP REF_ID R954 FROM 1C SQ_MIS ( Msg_ID ) - TO 1 MSG_M ( Msg_ID ); -CREATE ROP REF_ID R604 FROM 1C ACT_LNK ( Next_Link_ID ) PHRASE 'precedes' - TO 1C ACT_LNK ( Link_ID ) PHRASE 'succeeds'; -CREATE ROP REF_ID R664 FROM 1C ACT_SRW ( Statement_ID ) - TO 1 ACT_SEL ( Statement_ID ); -CREATE ROP REF_ID R664 FROM 1C ACT_SR ( Statement_ID ) - TO 1 ACT_SEL ( Statement_ID ); -CREATE ROP REF_ID R610 FROM 1C ACT_FIW ( Where_Clause_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R611 FROM 1C ACT_SRW ( Where_Clause_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R665 FROM MC ACT_FIW ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R639 FROM MC ACT_FIO ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R638 FROM MC ACT_SEL ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R676 FROM MC ACT_FIW ( Obj_ID ) - TO 1C O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R677 FROM MC ACT_FIO ( Obj_ID ) - TO 1C O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R678 FROM MC ACT_LNK ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R681 FROM MC ACT_LNK ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R637 FROM 1 ACT_LNK ( Statement_ID ) - TO 1C ACT_SEL ( Statement_ID ); -CREATE ROP REF_ID R613 FROM 1C ACT_SEL ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R9800 FROM MC SR_M ( Result_Id ) - TO 1 SR_SR ( Id ); -CREATE ROP REF_ID R9801 FROM 1C SR_NM ( Id ) - TO 1 SR_M ( Id ); -CREATE ROP REF_ID R9801 FROM 1C SR_CM ( Id ) - TO 1 SR_M ( Id ); -CREATE ROP REF_ID R9802 FROM 1C SR_SR ( MatchedParticipant_Id ) - TO 1 SP_SP ( Id ); -CREATE ROP REF_ID R9600 FROM 1C SQU_D ( Id ) - TO 1 SQU_Q ( Id ); -CREATE ROP REF_ID R9600 FROM 1C SQU_R ( Id ) - TO 1 SQU_Q ( Id ); -CREATE ROP REF_ID R9600 FROM 1C SQU_DE ( Id ) - TO 1 SQU_Q ( Id ); -CREATE ROP REF_ID R9600 FROM 1C SQU_A ( Id ) - TO 1 SQU_Q ( Id ); -CREATE ROP REF_ID R9700 FROM 1 SP_SE ( Participant_Id ) - TO 1 SP_SP ( Id ); -CREATE ROP REF_ID R9702 FROM 1C SP_NS ( Id ) - TO 1 SP_SE ( Id ); -CREATE ROP REF_ID R9702 FROM 1C SP_ALS ( Id ) - TO 1 SP_SE ( Id ); -CREATE ROP REF_ID R9702 FROM 1C SP_DS ( Id ) - TO 1 SP_SE ( Id ); -CREATE ROP REF_ID R9500 FROM 1 SQU_Q ( Engine_Id ) - TO 1C SEN_E ( Id ); -CREATE ROP REF_ID R9501 FROM 1C SEN_ALE ( Id ) - TO 1 SEN_E ( Id ); -CREATE ROP REF_ID R9501 FROM 1C SEN_DE ( Id ) - TO 1 SEN_E ( Id ); -CREATE ROP REF_ID R9501 FROM 1C SEN_DCE ( Id ) - TO 1 SEN_E ( Id ); -CREATE ROP REF_ID R9501 FROM 1C SEN_RE ( Id ) - TO 1 SEN_E ( Id ); -CREATE ROP REF_ID R9502 FROM MC SP_SP ( Engine_Id ) - TO 1 SEN_E ( Id ); -CREATE ROP REF_ID R9503 FROM MC SR_SR ( Engine_Id ) - TO 1 SEN_E ( Id ); -CREATE ROP REF_ID R615 FROM MC ACT_REL ( One_Side_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R616 FROM MC ACT_REL ( Other_Side_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R617 FROM MC ACT_RU ( One_Side_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R618 FROM MC ACT_RU ( Other_Side_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R619 FROM MC ACT_RU ( Associative_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R620 FROM MC ACT_UNR ( One_Side_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R621 FROM MC ACT_UNR ( Other_Side_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R622 FROM MC ACT_URU ( One_Side_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R623 FROM MC ACT_URU ( Other_Side_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R624 FROM MC ACT_URU ( Associative_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R653 FROM MC ACT_REL ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R654 FROM MC ACT_RU ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R655 FROM MC ACT_UNR ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R656 FROM MC ACT_URU ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R9002 FROM MC PA_DIC ( Component_Id ) - TO 1 C_C ( Id ); -CREATE ROP REF_ID R9002 FROM 1 PA_DIC ( Delegation_Id ) - TO 1 C_DG ( Id ); -CREATE ROP REF_ID R9001 FROM 1C PA_SICP ( Satisfaction_Id ) - TO 1 C_SF ( Id ); -CREATE ROP REF_ID R9001 FROM MC PA_SICP ( ComponentPackage_ID ) - TO 1 CP_CP ( Package_ID ); -CREATE ROP REF_ID R9000 FROM MC PA_SIC ( Component_Id ) - TO 1 C_C ( Id ); -CREATE ROP REF_ID R9000 FROM 1C PA_SIC ( Satisfaction_Id ) - TO 1 C_SF ( Id ); -CREATE ROP REF_ID R8000 FROM MC PE_PE ( Package_ID ) - TO 1C EP_PKG ( Package_ID ); -CREATE ROP REF_ID R8001 FROM 1C S_DT ( DT_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C SQ_P ( Part_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C UC_UCA ( Assoc_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C A_N ( Id ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C O_OBJ ( Obj_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C C_C ( Id ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C CL_IC ( Id ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C C_I ( Id ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C EP_PKG ( Package_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C CNST_CSP ( Constant_Spec_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C A_AP ( Id ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C A_E ( Id ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C MSG_M ( Msg_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C O_IOBJ ( IObj_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C R_REL ( Rel_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C S_EE ( EE_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C S_SYNC ( Sync_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C C_SF ( Id ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8001 FROM 1C C_DG ( Id ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R8003 FROM MC PE_PE ( Component_ID ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R1000 FROM MC MSG_A ( Informal_Msg_ID ) - TO 1C MSG_M ( Msg_ID ); -CREATE ROP REF_ID R1001 FROM MC MSG_A ( Formal_Msg_ID ) - TO 1C MSG_M ( Msg_ID ); -CREATE ROP REF_ID R1007 FROM MC MSG_M ( Sender_Part_ID ) - TO 1C SQ_P ( Part_ID ); -CREATE ROP REF_ID R1008 FROM MC MSG_M ( Receiver_Part_ID ) - TO 1C SQ_P ( Part_ID ); -CREATE ROP REF_ID R1009 FROM MC MSG_E ( SMevt_ID ) - TO 1C SM_EVT ( SMevt_ID ); -CREATE ROP REF_ID R1010 FROM MC MSG_F ( Sync_ID ) - TO 1C S_SYNC ( Sync_ID ); -CREATE ROP REF_ID R1011 FROM MC MSG_O ( Tfr_ID ) - TO 1C O_TFR ( Tfr_ID ); -CREATE ROP REF_ID R1012 FROM MC MSG_B ( Brg_ID ) - TO 1C S_BRG ( Brg_ID ); -CREATE ROP REF_ID R1013 FROM 1C MSG_BA ( Arg_ID ) - TO 1 MSG_A ( Arg_ID ); -CREATE ROP REF_ID R1013 FROM 1C MSG_OA ( Arg_ID ) - TO 1 MSG_A ( Arg_ID ); -CREATE ROP REF_ID R1013 FROM 1C MSG_FA ( Arg_ID ) - TO 1 MSG_A ( Arg_ID ); -CREATE ROP REF_ID R1013 FROM 1C MSG_EA ( Arg_ID ) - TO 1 MSG_A ( Arg_ID ); -CREATE ROP REF_ID R1013 FROM 1C MSG_IA ( Arg_ID ) - TO 1 MSG_A ( Arg_ID ); -CREATE ROP REF_ID R1013 FROM 1C MSG_EPA ( Arg_ID ) - TO 1 MSG_A ( Arg_ID ); -CREATE ROP REF_ID R1014 FROM MC MSG_BA ( BParm_ID ) - TO 1C S_BPARM ( BParm_ID ); -CREATE ROP REF_ID R1015 FROM MC MSG_OA ( TParm_ID ) - TO 1C O_TPARM ( TParm_ID ); -CREATE ROP REF_ID R1016 FROM MC MSG_FA ( SParm_ID ) - TO 1C S_SPARM ( SParm_ID ); -CREATE ROP REF_ID R1017 FROM MC MSG_EA ( SM_ID , SMedi_ID ) - TO 1C SM_EVTDI ( SM_ID , SMedi_ID ); -CREATE ROP REF_ID R1018 FROM 1C MSG_AM ( Msg_ID ) - TO 1 MSG_M ( Msg_ID ); -CREATE ROP REF_ID R1018 FROM 1C MSG_SM ( Msg_ID ) - TO 1 MSG_M ( Msg_ID ); -CREATE ROP REF_ID R1018 FROM 1C MSG_R ( Msg_ID ) - TO 1 MSG_M ( Msg_ID ); -CREATE ROP REF_ID R1019 FROM 1C MSG_E ( Msg_ID ) - TO 1 MSG_AM ( Msg_ID ); -CREATE ROP REF_ID R1019 FROM 1C MSG_IAM ( Msg_ID ) - TO 1 MSG_AM ( Msg_ID ); -CREATE ROP REF_ID R1019 FROM 1C MSG_SIG ( Msg_ID ) - TO 1 MSG_AM ( Msg_ID ); -CREATE ROP REF_ID R1020 FROM 1C MSG_F ( Msg_ID ) - TO 1 MSG_SM ( Msg_ID ); -CREATE ROP REF_ID R1020 FROM 1C MSG_O ( Msg_ID ) - TO 1 MSG_SM ( Msg_ID ); -CREATE ROP REF_ID R1020 FROM 1C MSG_B ( Msg_ID ) - TO 1 MSG_SM ( Msg_ID ); -CREATE ROP REF_ID R1020 FROM 1C MSG_ISM ( Msg_ID ) - TO 1 MSG_SM ( Msg_ID ); -CREATE ROP REF_ID R1020 FROM 1C MSG_IOP ( Msg_ID ) - TO 1 MSG_SM ( Msg_ID ); -CREATE ROP REF_ID R1021 FROM MC MSG_SIG ( Id ) - TO 1C C_AS ( Id ); -CREATE ROP REF_ID R1022 FROM MC MSG_IOP ( Id ) - TO 1C C_IO ( Id ); -CREATE ROP REF_ID R1023 FROM MC MSG_EPA ( PP_Id ) - TO 1C C_PP ( PP_Id ); -CREATE ROP REF_ID R668 FROM 1C ACT_RET ( Value_ID ) - TO 1C V_VAL ( Value_ID ); -CREATE ROP REF_ID R669 FROM MC V_PAR ( Statement_ID ) - TO 1C ACT_FNC ( Statement_ID ); -CREATE ROP REF_ID R628 FROM MC V_PAR ( Statement_ID ) - TO 1C ACT_BRG ( Statement_ID ); -CREATE ROP REF_ID R627 FROM MC V_PAR ( Statement_ID ) - TO 1C ACT_TFM ( Statement_ID ); -CREATE ROP REF_ID R667 FROM MC ACT_TFM ( Var_ID ) - TO 1C V_VAR ( Var_ID ); -CREATE ROP REF_ID R673 FROM MC ACT_TFM ( Tfr_ID ) - TO 1C O_TFR ( Tfr_ID ); -CREATE ROP REF_ID R674 FROM MC ACT_BRG ( Brg_ID ) - TO 1C S_BRG ( Brg_ID ); -CREATE ROP REF_ID R675 FROM MC ACT_FNC ( Sync_ID ) - TO 1C S_SYNC ( Sync_ID ); -CREATE ROP REF_ID R679 FROM MC V_PAR ( Statement_ID ) - TO 1C ACT_IOP ( Statement_ID ); -CREATE ROP REF_ID R662 FROM MC V_PAR ( Statement_ID ) - TO 1C ACT_SGN ( Statement_ID ); -CREATE ROP REF_ID R663 FROM MC ACT_SGN ( ProvidedSig_Id ) - TO 1C SPR_PS ( Id ); -CREATE ROP REF_ID R660 FROM MC ACT_SGN ( RequiredSig_Id ) - TO 1C SPR_RS ( Id ); -CREATE ROP REF_ID R680 FROM MC ACT_IOP ( ProvidedOp_Id ) - TO 1C SPR_PO ( Id ); -CREATE ROP REF_ID R657 FROM MC ACT_IOP ( RequiredOp_Id ) - TO 1C SPR_RO ( Id ); -CREATE ROP REF_ID R630 FROM MC ACT_SGN ( Value_ID ) - TO 1C V_VAL ( Value_ID ); -CREATE ROP REF_ID R629 FROM MC ACT_IOP ( Value_ID ) - TO 1C V_VAL ( Value_ID ); -CREATE ROP REF_ID R4300 FROM 1C IP_IPINIP ( Package_ID ) - TO 1 IP_IP ( Package_ID ); -CREATE ROP REF_ID R4301 FROM MC IP_IP ( Parent_Package_ID ) - TO 1C IP_IPINIP ( Package_ID ); -CREATE ROP REF_ID R4302 FROM MC IP_IP ( Direct_Sys_ID ) - TO 1C S_SYS ( Sys_ID ); -CREATE ROP REF_ID R4303 FROM MC C_I ( Package_ID ) - TO 1C IP_IP ( Package_ID ); -CREATE ROP REF_ID R4304 FROM MC IP_IP ( Sys_ID ) - TO 1 S_SYS ( Sys_ID ); -CREATE ROP REF_ID R941 FROM MC SQ_TS ( Prev_Mark_ID ) - TO 1 SQ_TM ( Mark_ID ); -CREATE ROP REF_ID R931 FROM MC SQ_TM ( Part_ID ) - TO 1 SQ_LS ( Part_ID ); -CREATE ROP REF_ID R942 FROM MC SQ_TS ( Mark_ID ) - TO 1 SQ_TM ( Mark_ID ); -CREATE ROP REF_ID R930 FROM 1C SQ_CIP ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R930 FROM 1C SQ_EEP ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R930 FROM 1C SQ_FPP ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R930 FROM 1C SQ_CP ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R930 FROM 1C SQ_AP ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R930 FROM 1C SQ_LS ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R930 FROM 1C IA_UCP ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R930 FROM 1C SQ_COP ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R930 FROM 1C SQ_PP ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R932 FROM MC SQ_FPP ( FunPack_ID ) - TO 1C S_FPK ( FunPack_ID ); -CREATE ROP REF_ID R933 FROM MC SQ_EEP ( EE_ID ) - TO 1C S_EE ( EE_ID ); -CREATE ROP REF_ID R934 FROM MC SQ_CIP ( Obj_ID ) - TO 1C O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R935 FROM MC SQ_CPA ( Part_ID ) - TO 1 SQ_CP ( Part_ID ); -CREATE ROP REF_ID R936 FROM MC SQ_AV ( Informal_Part_ID ) - TO 1C SQ_CIP ( Part_ID ); -CREATE ROP REF_ID R937 FROM MC SQ_AV ( Formal_Part_ID ) - TO 1C SQ_CIP ( Part_ID ); -CREATE ROP REF_ID R938 FROM MC SQ_AV ( Attr_ID , Obj_ID ) - TO 1C O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R939 FROM MC SQ_CP ( Obj_ID ) - TO 1C O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R947 FROM 1C SQ_IA ( Ia_ID ) - TO 1 SQ_CPA ( Ia_ID ); -CREATE ROP REF_ID R947 FROM 1C SQ_FA ( Ia_ID ) - TO 1 SQ_CPA ( Ia_ID ); -CREATE ROP REF_ID R948 FROM 1C SQ_IAV ( Av_ID ) - TO 1 SQ_AV ( Av_ID ); -CREATE ROP REF_ID R948 FROM 1C SQ_FAV ( Av_ID ) - TO 1 SQ_AV ( Av_ID ); -CREATE ROP REF_ID R940 FROM 1C SQ_LS ( Source_Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R955 FROM MC SQ_COP ( Component_Id ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R949 FROM 1C SQ_AP ( LS_Part_ID ) - TO 1C SQ_LS ( Part_ID ); -CREATE ROP REF_ID R956 FROM MC SQ_PP ( Package_ID ) - TO 1C EP_PKG ( Package_ID ); -CREATE ROP REF_ID R609 FROM 1C ACT_AI ( r_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R633 FROM MC ACT_CR ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R634 FROM MC ACT_DEL ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R671 FROM MC ACT_CR ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R672 FROM MC ACT_CNV ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R689 FROM 1C ACT_AI ( l_Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R2904 FROM MC I_LNK ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R2906 FROM MC I_EVI ( SMevt_ID ) - TO 1 SM_EVT ( SMevt_ID ); -CREATE ROP REF_ID R2908 FROM 1C I_EVI ( nextEvent_ID ) PHRASE 'will_be_processed_after' - TO 1C I_EVI ( Event_ID ) PHRASE 'will_be_processed_before'; -CREATE ROP REF_ID R2910 FROM MC I_AVL ( Attr_ID , Obj_ID ) - TO 1 O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R2907 FROM MC I_EVI ( Target_Inst_ID ) - TO 1C I_INS ( Inst_ID ); -CREATE ROP REF_ID R2915 FROM MC I_INS ( SM_ID , SMstt_ID ) - TO 1C SM_STATE ( SM_ID , SMstt_ID ); -CREATE ROP REF_ID R2909 FROM MC I_AVL ( Inst_ID ) - TO 1 I_INS ( Inst_ID ); -CREATE ROP REF_ID R2933 FROM MC I_DIV ( Event_ID ) - TO 1 I_EVI ( Event_ID ); -CREATE ROP REF_ID R2934 FROM MC I_DIV ( SM_ID , SMedi_ID ) - TO 1C SM_EVTDI ( SM_ID , SMedi_ID ); -CREATE ROP REF_ID R2935 FROM MC I_EVI ( Target_Inst_ID ) - TO 1C I_INS ( Inst_ID ); -CREATE ROP REF_ID R2937 FROM MC I_EVI ( Sent_By_Inst_ID ) - TO 1C I_INS ( Inst_ID ); -CREATE ROP REF_ID R2939 FROM 1C I_EVI ( next_self_Event_ID ) PHRASE 'will_be_processed_before' - TO 1C I_EVI ( Event_ID ) PHRASE 'will_be_processed_after'; -CREATE ROP REF_ID R2940 FROM 1C I_TIM ( Event_ID ) - TO 1C I_EVI ( Event_ID ); -CREATE ROP REF_ID R2948 FROM 1C I_EXE ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R2953 FROM MC I_INS ( Trans_ID , SM_ID ) - TO 1 SM_TXN ( Trans_ID , SM_ID ); -CREATE ROP REF_ID R2955 FROM MC I_EXE ( Component_Id ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R2956 FROM MC I_DIV ( PP_Id ) - TO 1C C_PP ( PP_Id ); -CREATE ROP REF_ID R2957 FROM MC I_INS ( Execution_Engine_ID ) - TO 1 I_EXE ( Execution_Engine_ID ); -CREATE ROP REF_ID R2958 FROM MC I_LIP ( Inst_ID ) - TO 1 I_INS ( Inst_ID ); -CREATE ROP REF_ID R2959 FROM MC I_LIP ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R2901 FROM 1C I_LNK ( Rel_ID , Participation_ID ) - TO 1 I_LIP ( Rel_ID , Participation_ID ); -CREATE ROP REF_ID R2902 FROM 1C I_LNK ( Rel_ID , Formalizing_Participation_ID ) - TO 1 I_LIP ( Rel_ID , Participation_ID ); -CREATE ROP REF_ID R2903 FROM 1C I_LNK ( Rel_ID , Associator_Participation_ID ) - TO 1C I_LIP ( Rel_ID , Participation_ID ); -CREATE ROP REF_ID R2963 FROM MC I_EXE ( ImportedComponent_Id ) - TO 1C CL_IC ( Id ); -CREATE ROP REF_ID R2964 FROM MC I_EVI ( Execution_Engine_ID ) - TO 1 I_EXE ( Execution_Engine_ID ); -CREATE ROP REF_ID R2970 FROM 1C I_EXE ( Package_ID ) - TO 1C EP_PKG ( Package_ID ); -CREATE ROP REF_ID R2974 FROM 1C I_CIN ( Container_ID ) - TO 1 I_EXE ( Execution_Engine_ID ); -CREATE ROP REF_ID R2975 FROM MC I_EXE ( Container_ID ) - TO 1C I_CIN ( Container_ID ); -CREATE ROP REF_ID R2976 FROM MC I_EVI ( Originating_Execution_Engine_ID ) - TO 1C I_EXE ( Execution_Engine_ID ); -CREATE ROP REF_ID R9100 FROM MC G_EIS ( Element_ID ) - TO 1 PE_PE ( Element_ID ); -CREATE ROP REF_ID R9100 FROM MC G_EIS ( Sys_ID ) - TO 1 S_SYS ( Sys_ID ); -CREATE ROP REF_ID R712 FROM MC E_GEN ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R711 FROM MC E_CEI ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R708 FROM MC E_CEE ( EEevt_ID , EE_ID ) - TO 1 S_EEEVT ( EEevt_ID , EE_ID ); -CREATE ROP REF_ID R709 FROM MC E_GEE ( EEevt_ID , EE_ID ) - TO 1 S_EEEVT ( EEevt_ID , EE_ID ); -CREATE ROP REF_ID R701 FROM 1C E_CES ( Statement_ID ) - TO 1 E_ESS ( Statement_ID ); -CREATE ROP REF_ID R701 FROM 1C E_GES ( Statement_ID ) - TO 1 E_ESS ( Statement_ID ); -CREATE ROP REF_ID R710 FROM MC E_CES ( Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R702 FROM 1C E_CEE ( Statement_ID ) - TO 1 E_CES ( Statement_ID ); -CREATE ROP REF_ID R702 FROM 1C E_CSME ( Statement_ID ) - TO 1 E_CES ( Statement_ID ); -CREATE ROP REF_ID R703 FROM 1C E_GEE ( Statement_ID ) - TO 1 E_GES ( Statement_ID ); -CREATE ROP REF_ID R703 FROM 1C E_GSME ( Statement_ID ) - TO 1 E_GES ( Statement_ID ); -CREATE ROP REF_ID R706 FROM MC E_CSME ( SMevt_ID ) - TO 1 SM_EVT ( SMevt_ID ); -CREATE ROP REF_ID R704 FROM 1C E_CEI ( Statement_ID ) - TO 1 E_CSME ( Statement_ID ); -CREATE ROP REF_ID R704 FROM 1C E_CEA ( Statement_ID ) - TO 1 E_CSME ( Statement_ID ); -CREATE ROP REF_ID R704 FROM 1C E_CEC ( Statement_ID ) - TO 1 E_CSME ( Statement_ID ); -CREATE ROP REF_ID R705 FROM 1C E_GEN ( Statement_ID ) - TO 1 E_GSME ( Statement_ID ); -CREATE ROP REF_ID R705 FROM 1C E_GAR ( Statement_ID ) - TO 1 E_GSME ( Statement_ID ); -CREATE ROP REF_ID R705 FROM 1C E_GEC ( Statement_ID ) - TO 1 E_GSME ( Statement_ID ); -CREATE ROP REF_ID R707 FROM MC E_GSME ( SMevt_ID ) - TO 1 SM_EVT ( SMevt_ID ); -CREATE ROP REF_ID R700 FROM MC V_PAR ( Statement_ID ) - TO 1C E_ESS ( Statement_ID ); -CREATE ROP REF_ID R714 FROM 1C E_GPR ( Value_ID ) - TO 1C V_VAL ( Value_ID ); -CREATE ROP REF_ID R1402 FROM 1C A_A ( Package_ID ) - TO 1 EP_SPKG ( Package_ID ); -CREATE ROP REF_ID R1402 FROM 1C COMM_COMM ( Package_ID ) - TO 1 EP_SPKG ( Package_ID ); -CREATE ROP REF_ID R1402 FROM 1C CP_CP ( Package_ID ) - TO 1 EP_SPKG ( Package_ID ); -CREATE ROP REF_ID R1402 FROM 1C S_DPK ( Package_ID ) - TO 1 EP_SPKG ( Package_ID ); -CREATE ROP REF_ID R1402 FROM 1C IP_IP ( Package_ID ) - TO 1 EP_SPKG ( Package_ID ); -CREATE ROP REF_ID R1402 FROM 1C UC_UCC ( Package_ID ) - TO 1 EP_SPKG ( Package_ID ); -CREATE ROP REF_ID R1402 FROM 1C SQ_S ( Package_ID ) - TO 1 EP_SPKG ( Package_ID ); -CREATE ROP REF_ID R1401 FROM MC EP_PKG ( Sys_ID ) - TO 1C S_SYS ( Sys_ID ); -CREATE ROP REF_ID R1400 FROM MC EP_SPKG ( Container_Package_ID ) - TO 1C EP_PKG ( Package_ID ); -CREATE ROP REF_ID R1403 FROM MC EP_PIP ( Parent_Package_ID ) - TO 1 EP_PKG ( Package_ID ); -CREATE ROP REF_ID R1404 FROM 1C EP_PIP ( Child_Package_ID ) - TO 1 EP_PKG ( Package_ID ); -CREATE ROP REF_ID R1405 FROM MC EP_PKG ( Direct_Sys_ID ) - TO 1 S_SYS ( Sys_ID ); -CREATE ROP REF_ID R1 FROM MC S_SS ( Dom_ID ) - TO 1 S_DOM ( Dom_ID ); -CREATE ROP REF_ID R7 FROM MC S_EEM ( SS_ID ) - TO 1 S_SS ( SS_ID ); -CREATE ROP REF_ID R9 FROM MC S_EEM ( EE_ID ) - TO 1 S_EE ( EE_ID ); -CREATE ROP REF_ID R10 FROM MC S_EEEVT ( EE_ID ) - TO 1 S_EE ( EE_ID ); -CREATE ROP REF_ID R12 FROM MC S_EEEDI ( EE_ID ) - TO 1 S_EE ( EE_ID ); -CREATE ROP REF_ID R14 FROM MC S_DT ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R16 FROM MC S_EEEDI ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R8 FROM MC S_EE ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R17 FROM 1C S_CDT ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R17 FROM 1C S_UDT ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R17 FROM 1C S_EDT ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R17 FROM 1C S_SDT ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R17 FROM 1C S_IRDT ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R20 FROM MC S_BRG ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R21 FROM MC S_BPARM ( Brg_ID ) - TO 1 S_BRG ( Brg_ID ); -CREATE ROP REF_ID R19 FROM MC S_BRG ( EE_ID ) - TO 1 S_EE ( EE_ID ); -CREATE ROP REF_ID R15 FROM MC S_EEDI ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R22 FROM MC S_BPARM ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R11 FROM MC S_EEDI ( EE_ID ) - TO 1 S_EE ( EE_ID ); -CREATE ROP REF_ID R13 FROM MC S_EEEDT ( EEedi_ID , EE_ID ) - TO 1 S_EEEDI ( EEedi_ID , EE_ID ); -CREATE ROP REF_ID R13 FROM MC S_EEEDT ( EEevt_ID , EE_ID ) - TO 1 S_EEEVT ( EEevt_ID , EE_ID ); -CREATE ROP REF_ID R2 FROM MC O_OBJ ( SS_ID ) - TO 1C S_SS ( SS_ID ); -CREATE ROP REF_ID R4 FROM MC R_REL ( SS_ID ) - TO 1C S_SS ( SS_ID ); -CREATE ROP REF_ID R5 FROM MC CA_COMM ( SS_ID ) - TO 1 S_SS ( SS_ID ); -CREATE ROP REF_ID R6 FROM MC CA_ACC ( SS_ID ) - TO 1 S_SS ( SS_ID ); -CREATE ROP REF_ID R3 FROM MC O_IOBJ ( SS_ID ) - TO 1 S_SS ( SS_ID ); -CREATE ROP REF_ID R27 FROM MC S_ENUM ( EDT_DT_ID ) - TO 1 S_EDT ( DT_ID ); -CREATE ROP REF_ID R23 FROM MC S_SYNC ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R25 FROM MC S_SYNC ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R24 FROM MC S_SPARM ( Sync_ID ) - TO 1 S_SYNC ( Sync_ID ); -CREATE ROP REF_ID R26 FROM MC S_SPARM ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R28 FROM MC S_DOM ( Sys_ID ) - TO 1C S_SYS ( Sys_ID ); -CREATE ROP REF_ID R29 FROM MC S_FPK ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R31 FROM MC S_FIP ( FunPack_ID ) - TO 1 S_FPK ( FunPack_ID ); -CREATE ROP REF_ID R31 FROM 1C S_FIP ( Sync_ID ) - TO 1 S_SYNC ( Sync_ID ); -CREATE ROP REF_ID R30 FROM 1C S_FPIP ( FunPack_ID ) - TO 1 S_FPK ( FunPack_ID ); -CREATE ROP REF_ID R32 FROM MC S_FPK ( Parent_FunPack_ID ) - TO 1C S_FPIP ( FunPack_ID ); -CREATE ROP REF_ID R33 FROM MC S_EEIP ( EEPack_ID ) - TO 1 S_EEPK ( EEPack_ID ); -CREATE ROP REF_ID R33 FROM 1C S_EEIP ( EE_ID ) - TO 1 S_EE ( EE_ID ); -CREATE ROP REF_ID R34 FROM 1C S_EEPIP ( EEPack_ID ) - TO 1 S_EEPK ( EEPack_ID ); -CREATE ROP REF_ID R35 FROM MC S_EEPK ( Parent_EEPack_ID ) - TO 1C S_EEPIP ( EEPack_ID ); -CREATE ROP REF_ID R36 FROM MC S_EEPK ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R37 FROM 1C S_DPIP ( Package_ID ) - TO 1 S_DPK ( Package_ID ); -CREATE ROP REF_ID R38 FROM MC S_DPK ( Parent_Package_ID ) - TO 1C S_DPIP ( Package_ID ); -CREATE ROP REF_ID R39 FROM 1C S_DIP ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R39 FROM MC S_DIP ( Package_ID ) - TO 1 S_DPK ( Package_ID ); -CREATE ROP REF_ID R40 FROM MC S_DPK ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R42 FROM 1C S_SIS ( Child_SS_ID ) - TO 1 S_SS ( SS_ID ); -CREATE ROP REF_ID R41 FROM MC S_SIS ( Parent_SS_ID ) - TO 1 S_SS ( SS_ID ); -CREATE ROP REF_ID R43 FROM 1C S_SID ( SS_ID ) - TO 1 S_SS ( SS_ID ); -CREATE ROP REF_ID R43 FROM MC S_SID ( Dom_ID ) - TO 1 S_DOM ( Dom_ID ); -CREATE ROP REF_ID R44 FROM MC S_MBR ( Parent_DT_DT_ID ) - TO 1 S_SDT ( DT_ID ); -CREATE ROP REF_ID R45 FROM MC S_MBR ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R46 FROM 1C S_MBR ( Previous_Member_ID , Parent_DT_DT_ID ) PHRASE 'succeeds' - TO 1C S_MBR ( Member_ID , Parent_DT_DT_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R47 FROM MC S_DIS ( Dom_ID ) - TO 1 S_DOM ( Dom_ID ); -CREATE ROP REF_ID R47 FROM MC S_DIS ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R49 FROM MC S_DIM ( BParm_ID ) - TO 1C S_BPARM ( BParm_ID ); -CREATE ROP REF_ID R50 FROM MC S_DIM ( Brg_ID ) - TO 1C S_BRG ( Brg_ID ); -CREATE ROP REF_ID R51 FROM MC S_DIM ( Sync_ID ) - TO 1C S_SYNC ( Sync_ID ); -CREATE ROP REF_ID R52 FROM MC S_DIM ( SParm_ID ) - TO 1C S_SPARM ( SParm_ID ); -CREATE ROP REF_ID R53 FROM MC S_DIM ( Member_ID , DT_ID ) - TO 1C S_MBR ( Member_ID , Parent_DT_DT_ID ); -CREATE ROP REF_ID R54 FROM 1C S_SPARM ( Previous_SParm_ID ) PHRASE 'succeeds' - TO 1C S_SPARM ( SParm_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R55 FROM 1C S_BPARM ( Previous_BParm_ID ) PHRASE 'succeeds' - TO 1C S_BPARM ( BParm_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R56 FROM 1C S_ENUM ( Previous_Enum_ID ) PHRASE 'succeeds' - TO 1C S_ENUM ( Enum_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R18 FROM MC S_UDT ( CDT_DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R300 FROM MC PL_EEPID ( Dom_ID ) - TO 1 S_DOM ( Dom_ID ); -CREATE ROP REF_ID R300 FROM 1 PL_EEPID ( EEPack_ID ) - TO 1 S_EEPK ( EEPack_ID ); -CREATE ROP REF_ID R301 FROM 1 PL_FPID ( FunPack_ID ) - TO 1 S_FPK ( FunPack_ID ); -CREATE ROP REF_ID R301 FROM MC PL_FPID ( Dom_ID ) - TO 1 S_DOM ( Dom_ID ); -CREATE ROP REF_ID R1500 FROM MC CNST_SYC ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R1502 FROM 1C CNST_LFSC ( Const_ID , DT_ID ) - TO 1 CNST_SYC ( Const_ID , DT_ID ); -CREATE ROP REF_ID R1503 FROM 1C CNST_LSC ( Const_ID , DT_ID ) - TO 1 CNST_LFSC ( Const_ID , DT_ID ); -CREATE ROP REF_ID R1504 FROM MC CNST_SYC ( Constant_Spec_ID ) - TO 1 CNST_CSP ( Constant_Spec_ID ); -CREATE ROP REF_ID R1505 FROM 1C CNST_SYC ( Previous_Const_ID , Previous_DT_DT_ID ) PHRASE 'succeeds' - TO 1C CNST_SYC ( Const_ID , DT_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R1506 FROM 1C CNST_CIP ( Constant_Spec_ID ) - TO 1 CNST_CSP ( Constant_Spec_ID ); -CREATE ROP REF_ID R1506 FROM MC CNST_CIP ( Package_ID ) - TO 1 S_DPK ( Package_ID ); -CREATE ROP REF_ID R4002 FROM MC C_SF ( Requirement_Id ) - TO 1 C_R ( Requirement_Id ); -CREATE ROP REF_ID R4002 FROM MC C_SF ( Provision_Id ) - TO 1 C_P ( Provision_Id ); -CREATE ROP REF_ID R4003 FROM MC C_EP ( Interface_Id ) - TO 1 C_I ( Id ); -CREATE ROP REF_ID R4004 FROM 1C C_IO ( Id ) - TO 1 C_EP ( Id ); -CREATE ROP REF_ID R4004 FROM 1C C_AS ( Id ) - TO 1 C_EP ( Id ); -CREATE ROP REF_ID R4006 FROM MC C_PP ( Signal_Id ) - TO 1 C_EP ( Id ); -CREATE ROP REF_ID R4007 FROM MC C_PP ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R4008 FROM MC C_IO ( DT_ID ) - TO 1 S_DT ( DT_ID ); -CREATE ROP REF_ID R4009 FROM 1C C_R ( Requirement_Id ) - TO 1 C_IR ( Id ); -CREATE ROP REF_ID R4009 FROM 1C C_P ( Provision_Id ) - TO 1 C_IR ( Id ); -CREATE ROP REF_ID R4012 FROM MC C_IR ( Formal_Interface_Id ) - TO 1C C_I ( Id ); -CREATE ROP REF_ID R4013 FROM MC C_RID ( Reference_Id ) - TO 1 C_IR ( Id ); -CREATE ROP REF_ID R4013 FROM MC C_RID ( Delegation_Id ) - TO 1 C_DG ( Id ); -CREATE ROP REF_ID R4014 FROM MC C_IR ( Delegation_Id ) - TO 1C C_DG ( Id ); -CREATE ROP REF_ID R4010 FROM MC C_PO ( Component_Id ) - TO 1 C_C ( Id ); -CREATE ROP REF_ID R4016 FROM MC C_IR ( Port_Id ) - TO 1 C_PO ( Id ); -CREATE ROP REF_ID R4017 FROM MC S_DIM ( PP_Id ) - TO 1C C_PP ( PP_Id ); -CREATE ROP REF_ID R4018 FROM MC S_DIM ( Id ) - TO 1C C_IO ( Id ); -CREATE ROP REF_ID R4019 FROM 1C C_IO ( Previous_Id ) PHRASE 'succeeds' - TO 1C C_IO ( Id ) PHRASE 'precedes'; -CREATE ROP REF_ID R4020 FROM 1C C_AS ( Previous_Id ) PHRASE 'succeeds' - TO 1C C_AS ( Id ) PHRASE 'precedes'; -CREATE ROP REF_ID R4021 FROM 1C C_PP ( Previous_PP_Id ) PHRASE 'succeeds' - TO 1C C_PP ( PP_Id ) PHRASE 'precedes'; -CREATE ROP REF_ID R4500 FROM MC SPR_REP ( ExecutableProperty_Id ) - TO 1 C_EP ( Id ); -CREATE ROP REF_ID R4500 FROM MC SPR_REP ( Requirement_Id ) - TO 1 C_R ( Requirement_Id ); -CREATE ROP REF_ID R4501 FROM MC SPR_PEP ( ExecutableProperty_Id ) - TO 1 C_EP ( Id ); -CREATE ROP REF_ID R4501 FROM MC SPR_PEP ( Provision_Id ) - TO 1 C_P ( Provision_Id ); -CREATE ROP REF_ID R4502 FROM 1C SPR_RS ( Id ) - TO 1 SPR_REP ( Id ); -CREATE ROP REF_ID R4502 FROM 1C SPR_RO ( Id ) - TO 1 SPR_REP ( Id ); -CREATE ROP REF_ID R4503 FROM 1C SPR_PO ( Id ) - TO 1 SPR_PEP ( Id ); -CREATE ROP REF_ID R4503 FROM 1C SPR_PS ( Id ) - TO 1 SPR_PEP ( Id ); -CREATE ROP REF_ID R4600 FROM MC CP_CPINP ( Parent_Package_ID ) - TO 1 CP_CP ( Package_ID ); -CREATE ROP REF_ID R4601 FROM 1 CP_CP ( ParentLink_Id ) - TO 1C CP_CPINP ( Id ); -CREATE ROP REF_ID R4602 FROM MC CP_CP ( Sys_ID ) - TO 1C S_SYS ( Sys_ID ); -CREATE ROP REF_ID R4604 FROM MC C_C ( Package_ID ) - TO 1C CP_CP ( Package_ID ); -CREATE ROP REF_ID R4606 FROM MC CP_CP ( Containing_Sys_ID ) - TO 1 S_SYS ( Sys_ID ); -CREATE ROP REF_ID R4607 FROM MC IP_IP ( Component_Package_ID ) - TO 1C CP_CP ( Package_ID ); -CREATE ROP REF_ID R4605 FROM MC CL_IC ( Component_Package_ID ) - TO 1C CP_CP ( Package_ID ); -CREATE ROP REF_ID R4608 FROM MC C_C ( Root_Package_ID ) - TO 1C CP_CP ( Package_ID ); -CREATE ROP REF_ID R4202 FROM MC CN_CIC ( Parent_Id ) - TO 1 C_C ( Id ); -CREATE ROP REF_ID R4203 FROM 1 C_C ( NestedComponent_Id ) - TO 1C CN_CIC ( Id ); -CREATE ROP REF_ID R4204 FROM 1C CN_DC ( Id ) - TO 1 C_C ( Id ); -CREATE ROP REF_ID R4204 FROM 1C CN_DC ( Dom_ID ) - TO 1 S_DOM ( Dom_ID ); -CREATE ROP REF_ID R4206 FROM MC IP_IP ( Component_Id ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R4201 FROM MC CL_IC ( AssignedComp_Id ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R4205 FROM MC CL_IC ( ParentComp_Id ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R4700 FROM MC CL_IIR ( ImportedComp_Id ) - TO 1 CL_IC ( Id ); -CREATE ROP REF_ID R4701 FROM MC CL_IIR ( Ref_Id ) - TO 1C C_IR ( Id ); -CREATE ROP REF_ID R4703 FROM 1C CL_IP ( Id ) - TO 1 CL_IIR ( Id ); -CREATE ROP REF_ID R4703 FROM 1C CL_IR ( Id ) - TO 1 CL_IIR ( Id ); -CREATE ROP REF_ID R4704 FROM 1C CL_IIR ( Delegation_Id ) - TO 1C C_DG ( Id ); -CREATE ROP REF_ID R4705 FROM 1C CL_IPINS ( Satisfaction_Id ) - TO 1 C_SF ( Id ); -CREATE ROP REF_ID R4705 FROM MC CL_IPINS ( ImportedProvision_Id ) - TO 1 CL_IP ( Id ); -CREATE ROP REF_ID R4706 FROM 1C CL_IR ( Satisfaction_Element_Id ) - TO 1C C_SF ( Id ); -CREATE ROP REF_ID R401 FROM 1C CA_EESMC ( CPath_ID ) - TO 1 CA_COMM ( CPath_ID ); -CREATE ROP REF_ID R401 FROM 1C CA_SMEEC ( CPath_ID ) - TO 1 CA_COMM ( CPath_ID ); -CREATE ROP REF_ID R401 FROM 1C CA_SMSMC ( CPath_ID ) - TO 1 CA_COMM ( CPath_ID ); -CREATE ROP REF_ID R404 FROM MC CA_EESME ( CPath_ID ) - TO 1 CA_EESMC ( CPath_ID ); -CREATE ROP REF_ID R408 FROM MC CA_SMSME ( CPath_ID ) - TO 1 CA_SMSMC ( CPath_ID ); -CREATE ROP REF_ID R412 FROM MC CA_SMEEE ( CPath_ID ) - TO 1 CA_SMEEC ( CPath_ID ); -CREATE ROP REF_ID R413 FROM MC CA_SMEEE ( EEevt_ID , EE_ID ) - TO 1 S_EEEVT ( EEevt_ID , EE_ID ); -CREATE ROP REF_ID R414 FROM MC CA_SMSMC ( DIObj_ID ) - TO 1C O_IOBJ ( IObj_ID ); -CREATE ROP REF_ID R415 FROM 1C CA_SMOA ( APath_ID ) - TO 1 CA_ACC ( APath_ID ); -CREATE ROP REF_ID R415 FROM 1C CA_SMEEA ( APath_ID ) - TO 1 CA_ACC ( APath_ID ); -CREATE ROP REF_ID R417 FROM MC CA_SMOA ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R418 FROM MC CA_SMOAA ( APath_ID , Obj_ID ) - TO 1 CA_SMOA ( APath_ID , Obj_ID ); -CREATE ROP REF_ID R419 FROM MC CA_SMOAA ( Attr_ID , Obj_ID ) - TO 1 O_ATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R420 FROM MC CA_SMOA ( IObj_ID ) - TO 1C O_IOBJ ( IObj_ID ); -CREATE ROP REF_ID R421 FROM MC CA_SMEEA ( EEmod_ID , EE_ID ) - TO 1 S_EEM ( EEmod_ID , EE_ID ); -CREATE ROP REF_ID R422 FROM MC CA_SMEED ( APath_ID , EE_ID ) - TO 1 CA_SMEEA ( APath_ID , EE_ID ); -CREATE ROP REF_ID R423 FROM MC CA_SMEED ( EEdi_ID , EE_ID ) - TO 1 S_EEDI ( EEdi_ID , EE_ID ); -CREATE ROP REF_ID R424 FROM MC CA_SMSMC ( OIObj_ID ) - TO 1C O_IOBJ ( IObj_ID ); -CREATE ROP REF_ID R425 FROM MC CA_ACC ( IObj_ID ) - TO 1C O_IOBJ ( IObj_ID ); -CREATE ROP REF_ID R405 FROM MC CA_EESME ( SMevt_ID ) - TO 1 SM_EVT ( SMevt_ID ); -CREATE ROP REF_ID R409 FROM MC CA_SMSME ( SMevt_ID ) - TO 1 SM_EVT ( SMevt_ID ); -CREATE ROP REF_ID R403 FROM MC CA_EESMC ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R402 FROM MC CA_EESMC ( EEmod_ID , EE_ID ) - TO 1 S_EEM ( EEmod_ID , EE_ID ); -CREATE ROP REF_ID R410 FROM MC CA_SMEEC ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R411 FROM MC CA_SMEEC ( EEmod_ID , EE_ID ) - TO 1 S_EEM ( EEmod_ID , EE_ID ); -CREATE ROP REF_ID R406 FROM MC CA_SMSMC ( OSM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R407 FROM MC CA_SMSMC ( DSM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R416 FROM MC CA_ACC ( SM_ID ) - TO 1 SM_SM ( SM_ID ); -CREATE ROP REF_ID R1129 FROM MC COMM_COMM ( CIC_Package_ID ) - TO 1C COMM_CIC ( Package_ID ); -CREATE ROP REF_ID R1130 FROM 1C COMM_CIC ( Package_ID ) - TO 1 COMM_COMM ( Package_ID ); -CREATE ROP REF_ID R1132 FROM MC COMM_COMM ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R1126 FROM MC COMM_PIC ( Package_ID ) - TO 1 COMM_COMM ( Package_ID ); -CREATE ROP REF_ID R1126 FROM 1C COMM_PIC ( Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R1131 FROM MC COMM_COMM ( SS_ID ) - TO 1C S_SS ( SS_ID ); -CREATE ROP REF_ID R1128 FROM MC COMM_LNK ( Rel_ID ) - TO 1C R_REL ( Rel_ID ); -CREATE ROP REF_ID R1133 FROM MC COMM_LNK ( Start_Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R1134 FROM MC COMM_LNK ( Destination_Part_ID ) - TO 1 SQ_P ( Part_ID ); -CREATE ROP REF_ID R1135 FROM MC COMM_MIC ( Package_ID ) - TO 1 COMM_COMM ( Package_ID ); -CREATE ROP REF_ID R1135 FROM 1C COMM_MIC ( Msg_ID ) - TO 1 MSG_M ( Msg_ID ); -CREATE ROP REF_ID R1136 FROM MC COMM_COMM ( Sys_ID ) - TO 1C S_SYS ( Sys_ID ); -CREATE ROP REF_ID R1137 FROM MC COMM_COMM ( Component_Package_ID ) - TO 1C CP_CP ( Package_ID ); -CREATE ROP REF_ID R1138 FROM MC COMM_COMM ( Component_Id ) - TO 1C C_C ( Id ); -CREATE ROP REF_ID R666 FROM 1C ACT_ACT ( Block_ID ) - TO 1C ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R661 FROM 1C ACT_SMT ( Previous_Statement_ID , Block_ID ) PHRASE 'succeeds' - TO 1C ACT_SMT ( Statement_ID , Block_ID ) PHRASE 'precedes'; -CREATE ROP REF_ID R658 FROM 1C ACT_EL ( Block_ID ) - TO 1 ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R608 FROM 1C ACT_WHL ( Block_ID ) - TO 1 ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R606 FROM 1C ACT_E ( Block_ID ) - TO 1 ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R605 FROM 1C ACT_FOR ( Block_ID ) - TO 1 ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R607 FROM 1C ACT_IF ( Block_ID ) - TO 1 ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R602 FROM MC ACT_SMT ( Block_ID ) - TO 1 ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_FOR ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_WHL ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_IF ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_EL ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_E ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_BRG ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_FNC ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_RET ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_TFM ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_AI ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_DEL ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_CNV ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_CR ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_SEL ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_FIO ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_FIW ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_URU ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_UNR ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_RU ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_REL ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_CTL ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_BRK ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_CON ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C E_ESS ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C E_GPR ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_IOP ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R603 FROM 1C ACT_SGN ( Statement_ID ) - TO 1 ACT_SMT ( Statement_ID ); -CREATE ROP REF_ID R614 FROM MC ACT_FOR ( Loop_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R626 FROM 1C ACT_WHL ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R625 FROM 1C ACT_IF ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R659 FROM 1C ACT_EL ( Value_ID ) - TO 1 V_VAL ( Value_ID ); -CREATE ROP REF_ID R670 FROM MC ACT_FOR ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R601 FROM MC ACT_BLK ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R652 FROM MC ACT_FOR ( Set_Var_ID ) - TO 1 V_VAR ( Var_ID ); -CREATE ROP REF_ID R682 FROM MC ACT_EL ( If_Statement_ID ) - TO 1 ACT_IF ( Statement_ID ); -CREATE ROP REF_ID R683 FROM 1C ACT_E ( If_Statement_ID ) - TO 1 ACT_IF ( Statement_ID ); -CREATE ROP REF_ID R691 FROM 1C ACT_SAB ( SM_ID , Act_ID ) - TO 1 SM_ACT ( SM_ID , Act_ID ); -CREATE ROP REF_ID R693 FROM 1C ACT_DAB ( Attr_ID , Obj_ID ) - TO 1 O_DBATTR ( Attr_ID , Obj_ID ); -CREATE ROP REF_ID R695 FROM 1C ACT_FNB ( Sync_ID ) - TO 1 S_SYNC ( Sync_ID ); -CREATE ROP REF_ID R696 FROM 1C ACT_OPB ( Tfr_ID ) - TO 1 O_TFR ( Tfr_ID ); -CREATE ROP REF_ID R697 FROM 1C ACT_BRB ( Brg_ID ) - TO 1 S_BRG ( Brg_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_SAB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_DAB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_FNB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_OPB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_BRB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_POB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_PSB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_ROB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_RSB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R698 FROM 1C ACT_TAB ( Action_ID ) - TO 1 ACT_ACT ( Action_ID ); -CREATE ROP REF_ID R699 FROM 1C ACT_ACT ( CurrentScope_ID ) - TO 1C ACT_BLK ( Block_ID ); -CREATE ROP REF_ID R690 FROM 1C ACT_IF ( Elif_Statement_ID ) - TO 1C ACT_EL ( Statement_ID ); -CREATE ROP REF_ID R692 FROM 1C ACT_IF ( Else_Statement_ID ) - TO 1C ACT_E ( Statement_ID ); -CREATE ROP REF_ID R684 FROM 1C ACT_RSB ( Id ) - TO 1 SPR_RS ( Id ); -CREATE ROP REF_ID R685 FROM 1C ACT_ROB ( Id ) - TO 1 SPR_RO ( Id ); -CREATE ROP REF_ID R686 FROM 1C ACT_PSB ( Id ) - TO 1 SPR_PS ( Id ); -CREATE ROP REF_ID R687 FROM 1C ACT_POB ( Id ) - TO 1 SPR_PO ( Id ); -CREATE ROP REF_ID R688 FROM 1C ACT_TAB ( SM_ID , Act_ID ) - TO 1 SM_ACT ( SM_ID , Act_ID ); -CREATE ROP REF_ID R201 FROM M R_OIR ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R201 FROM MC R_OIR ( Obj_ID ) - TO 1 O_OBJ ( Obj_ID ); -CREATE ROP REF_ID R206 FROM 1C R_SIMP ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R206 FROM 1C R_COMP ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R206 FROM 1C R_ASSOC ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R206 FROM 1C R_SUBSUP ( Rel_ID ) - TO 1 R_REL ( Rel_ID ); -CREATE ROP REF_ID R207 FROM M R_PART ( Rel_ID ) - TO 1 R_SIMP ( Rel_ID ); -CREATE ROP REF_ID R208 FROM 1C R_FORM ( Rel_ID ) - TO 1 R_SIMP ( Rel_ID ); -CREATE ROP REF_ID R209 FROM 1 R_AONE ( Rel_ID ) - TO 1 R_ASSOC ( Rel_ID ); -CREATE ROP REF_ID R210 FROM 1 R_AOTH ( Rel_ID ) - TO 1 R_ASSOC ( Rel_ID ); -CREATE ROP REF_ID R211 FROM 1 R_ASSR ( Rel_ID ) - TO 1 R_ASSOC ( Rel_ID ); -CREATE ROP REF_ID R212 FROM 1 R_SUPER ( Rel_ID ) - TO 1 R_SUBSUP ( Rel_ID ); -CREATE ROP REF_ID R213 FROM MC R_SUB ( Rel_ID ) - TO 1 R_SUBSUP ( Rel_ID ); -CREATE ROP REF_ID R214 FROM 1 R_CONE ( Rel_ID ) - TO 1 R_COMP ( Rel_ID ); -CREATE ROP REF_ID R215 FROM 1 R_COTH ( Rel_ID ) - TO 1 R_COMP ( Rel_ID ); -CREATE ROP REF_ID R203 FROM 1C R_RTO ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_OIR ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R203 FROM 1C R_RGO ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_OIR ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R203 FROM 1C R_CONE ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_OIR ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R203 FROM 1C R_COTH ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_OIR ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R205 FROM 1C R_SUB ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RGO ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R205 FROM 1C R_FORM ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RGO ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R205 FROM 1C R_ASSR ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RGO ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R204 FROM 1C R_SUPER ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RTO ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R204 FROM 1C R_PART ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RTO ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R204 FROM 1C R_AONE ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RTO ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R204 FROM 1C R_AOTH ( OIR_ID , Obj_ID , Rel_ID ) - TO 1 R_RTO ( OIR_ID , Obj_ID , Rel_ID ); -CREATE ROP REF_ID R202 FROM MC R_OIR ( IObj_ID ) - TO 1C O_IOBJ ( IObj_ID ); -CREATE ROP REF_ID R1100 FROM MC A_A ( Dom_ID ) - TO 1C S_DOM ( Dom_ID ); -CREATE ROP REF_ID R1108 FROM MC A_A ( SS_ID ) - TO 1C S_SS ( SS_ID ); -CREATE ROP REF_ID R1109 FROM 1C A_AIA ( Package_ID ) - TO 1 A_A ( Package_ID ); -CREATE ROP REF_ID R1110 FROM MC A_A ( Parent_Package_ID ) - TO 1C A_AIA ( Package_ID ); -CREATE ROP REF_ID R1111 FROM MC A_AP ( Package_ID ) - TO 1 A_A ( Package_ID ); -CREATE ROP REF_ID R1102 FROM MC A_E ( Package_ID ) - TO 1C A_A ( Package_ID ); -CREATE ROP REF_ID R1101 FROM MC A_N ( Package_ID ) - TO 1C A_A ( Package_ID ); -CREATE ROP REF_ID R1103 FROM MC A_E ( TargetId ) - TO 1 A_N ( Id ); -CREATE ROP REF_ID R1104 FROM MC A_E ( SourceId ) - TO 1 A_N ( Id ); -CREATE ROP REF_ID R1105 FROM 1C A_ACT ( Id ) - TO 1 A_N ( Id ); -CREATE ROP REF_ID R1105 FROM 1C A_OBJ ( Id ) - TO 1 A_N ( Id ); -CREATE ROP REF_ID R1105 FROM 1C A_CTL ( Id ) - TO 1 A_N ( Id ); -CREATE ROP REF_ID R1107 FROM 1C A_AE ( Id ) - TO 1 A_ACT ( Id ); -CREATE ROP REF_ID R1107 FROM 1C A_GA ( Id ) - TO 1 A_ACT ( Id ); -CREATE ROP REF_ID R1107 FROM 1C A_SS ( Id ) - TO 1 A_ACT ( Id ); -CREATE ROP REF_ID R1106 FROM 1C A_FF ( Id ) - TO 1 A_CTL ( Id ); -CREATE ROP REF_ID R1106 FROM 1C A_AF ( Id ) - TO 1 A_CTL ( Id ); -CREATE ROP REF_ID R1106 FROM 1C A_INI ( Id ) - TO 1 A_CTL ( Id ); -CREATE ROP REF_ID R1106 FROM 1C A_DM ( Id ) - TO 1 A_CTL ( Id ); -CREATE ROP REF_ID R1106 FROM 1C A_FJ ( Id ) - TO 1 A_CTL ( Id ); -CREATE ROP REF_ID R1112 FROM 1C A_ATE ( Id ) - TO 1 A_AE ( Id ); -CREATE ROP REF_ID R1112 FROM 1C A_AEA ( Id ) - TO 1 A_AE ( Id ); -CREATE ROP REF_ID R1113 FROM MC A_A ( Sys_ID ) - TO 1C S_SYS ( Sys_ID ); -CREATE ROP REF_ID R1114 FROM MC A_A ( Component_Package_ID ) - TO 1C CP_CP ( Package_ID ); -CREATE ROP REF_ID R1115 FROM MC A_A ( Component_Id ) - TO 1C C_C ( Id ); - -CREATE UNIQUE INDEX I1 ON ACT_ACT (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_AI (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_BLK (Block_ID); -CREATE UNIQUE INDEX I1 ON ACT_BRB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_BRG (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_BRK (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_CNV (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_CON (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_CR (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_CTL (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_DAB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_DEL (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_E (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_EL (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_FIO (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_FIW (Statement_ID); +CREATE UNIQUE INDEX I1 ON PA_SIC (Satisfaction_Id, Component_Id); +CREATE UNIQUE INDEX I1 ON E_CES (Statement_ID); +CREATE UNIQUE INDEX I1 ON SPR_PEP (Id); +CREATE UNIQUE INDEX I1 ON V_MVL (Value_ID); +CREATE UNIQUE INDEX I1 ON S_BRG (Brg_ID); +CREATE UNIQUE INDEX I1 ON S_DIM (DIM_ID); +CREATE UNIQUE INDEX I1 ON I_TIM (Timer_ID); CREATE UNIQUE INDEX I1 ON ACT_FNB (Action_ID); CREATE UNIQUE INDEX I1 ON ACT_FNC (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_FOR (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_IF (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_IOP (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_LNK (Link_ID); -CREATE UNIQUE INDEX I1 ON ACT_OPB (Action_ID); +CREATE UNIQUE INDEX I1 ON S_SPARM (SParm_ID); +CREATE UNIQUE INDEX I1 ON E_CEA (Statement_ID); +CREATE UNIQUE INDEX I1 ON SQ_CPA (Ia_ID); +CREATE UNIQUE INDEX I1 ON E_CEC (Statement_ID); +CREATE UNIQUE INDEX I1 ON E_CEE (Statement_ID); +CREATE UNIQUE INDEX I1 ON V_SLR (Value_ID); +CREATE UNIQUE INDEX I1 ON E_CEI (Statement_ID); +CREATE UNIQUE INDEX I1 ON SM_EVT (SMevt_ID); +CREATE UNIQUE INDEX I2 ON SM_EVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON SM_NETXN (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I1 ON V_TRN (Var_ID); +CREATE UNIQUE INDEX I1 ON MSG_SM (Msg_ID); +CREATE UNIQUE INDEX I1 ON O_ATTR (Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON RV_RVL (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON I_LNK (Link_ID); +CREATE UNIQUE INDEX I1 ON E_GEC (Statement_ID); CREATE UNIQUE INDEX I1 ON ACT_POB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_PSB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_REL (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_RET (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_ROB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_RSB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_RU (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_SAB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_SEL (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_SGN (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_SMT (Statement_ID); -CREATE UNIQUE INDEX I2 ON ACT_SMT (Statement_ID, Block_ID); -CREATE UNIQUE INDEX I1 ON ACT_SR (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_SRW (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_TAB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_TFM (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_UNR (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_URU (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_WHL (Statement_ID); -CREATE UNIQUE INDEX I1 ON A_A (Package_ID); -CREATE UNIQUE INDEX I1 ON A_ACT (Id); -CREATE UNIQUE INDEX I1 ON A_AE (Id); CREATE UNIQUE INDEX I1 ON A_AEA (Id); -CREATE UNIQUE INDEX I1 ON A_AF (Id); -CREATE UNIQUE INDEX I1 ON A_AIA (Package_ID); -CREATE UNIQUE INDEX I1 ON A_AP (Id); -CREATE UNIQUE INDEX I1 ON A_ATE (Id); -CREATE UNIQUE INDEX I1 ON A_CTL (Id); -CREATE UNIQUE INDEX I1 ON A_DM (Id); -CREATE UNIQUE INDEX I1 ON A_E (Id); -CREATE UNIQUE INDEX I1 ON A_FF (Id); -CREATE UNIQUE INDEX I1 ON A_FJ (Id); -CREATE UNIQUE INDEX I1 ON A_GA (Id); -CREATE UNIQUE INDEX I1 ON A_INI (Id); -CREATE UNIQUE INDEX I1 ON A_N (Id); -CREATE UNIQUE INDEX I1 ON A_OBJ (Id); -CREATE UNIQUE INDEX I1 ON A_SS (Id); -CREATE UNIQUE INDEX I1 ON CA_ACC (APath_ID); -CREATE UNIQUE INDEX I1 ON CA_COMM (CPath_ID); -CREATE UNIQUE INDEX I1 ON CA_EESMC (CPath_ID); -CREATE UNIQUE INDEX I1 ON CA_EESME (SMevt_ID, CPath_ID); -CREATE UNIQUE INDEX I1 ON CA_SMEEA (APath_ID); -CREATE UNIQUE INDEX I2 ON CA_SMEEA (APath_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON E_GEN (Statement_ID); CREATE UNIQUE INDEX I1 ON CA_SMEEC (CPath_ID); CREATE UNIQUE INDEX I2 ON CA_SMEEC (SM_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON CA_SMEED (APath_ID, EEdi_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON CA_SMEEE (EEevt_ID, CPath_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON CA_SMOA (APath_ID); -CREATE UNIQUE INDEX I2 ON CA_SMOA (APath_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON CA_SMOAA (APath_ID, Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON CA_SMSMC (CPath_ID); -CREATE UNIQUE INDEX I2 ON CA_SMSMC (DSM_ID, OSM_ID); +CREATE UNIQUE INDEX I1 ON ACT_SGN (Statement_ID); +CREATE UNIQUE INDEX I1 ON CA_SMEEA (APath_ID); +CREATE UNIQUE INDEX I2 ON CA_SMEEA (APath_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON L_IIR (RuntimeValue_ID, Inst_ID); +CREATE UNIQUE INDEX I1 ON RV_SVL (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON CNST_SYC (Const_ID, DT_ID); +CREATE UNIQUE INDEX I1 ON O_NBATTR (Attr_ID, Obj_ID); CREATE UNIQUE INDEX I1 ON CA_SMSME (SMevt_ID, CPath_ID); -CREATE UNIQUE INDEX I1 ON CL_IC (Id); -CREATE UNIQUE INDEX I1 ON CL_IIR (Id); -CREATE UNIQUE INDEX I1 ON CL_IP (Id); -CREATE UNIQUE INDEX I1 ON CL_IPINS (Satisfaction_Id, ImportedProvision_Id); -CREATE UNIQUE INDEX I1 ON CL_IR (Id); -CREATE UNIQUE INDEX I1 ON CNST_CIP (Package_ID, Constant_Spec_ID); -CREATE UNIQUE INDEX I1 ON CNST_CSP (Constant_Spec_ID); -CREATE UNIQUE INDEX I1 ON CNST_LFSC (Const_ID, DT_ID); +CREATE UNIQUE INDEX I1 ON A_DM (Id); +CREATE UNIQUE INDEX I1 ON A_CTL (Id); +CREATE UNIQUE INDEX I1 ON RV_VIA (ContainedRuntimeValue_ID, RuntimeValue_ID); CREATE UNIQUE INDEX I1 ON CNST_LSC (Const_ID, DT_ID); -CREATE UNIQUE INDEX I1 ON CNST_SYC (Const_ID, DT_ID); -CREATE UNIQUE INDEX I1 ON CN_CIC (Id); -CREATE UNIQUE INDEX I1 ON CN_DC (Dom_ID, Id); -CREATE UNIQUE INDEX I1 ON COMM_CIC (Package_ID); -CREATE UNIQUE INDEX I1 ON COMM_COMM (Package_ID); -CREATE UNIQUE INDEX I1 ON COMM_LNK (Link_ID); -CREATE UNIQUE INDEX I1 ON COMM_MIC (Package_ID, Msg_ID); -CREATE UNIQUE INDEX I1 ON COMM_PIC (Package_ID, Part_ID); -CREATE UNIQUE INDEX I1 ON CP_CP (Package_ID); -CREATE UNIQUE INDEX I1 ON CP_CPINP (Id); +CREATE UNIQUE INDEX I1 ON CA_SMSMC (CPath_ID); +CREATE UNIQUE INDEX I2 ON CA_SMSMC (DSM_ID, OSM_ID); +CREATE UNIQUE INDEX I1 ON R_SUB (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_MEAH (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I2 ON SM_MEAH (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON A_SS (Id); +CREATE UNIQUE INDEX I1 ON IA_UCP (Part_ID); +CREATE UNIQUE INDEX I1 ON SM_SEME (SM_ID, SMevt_ID, SMstt_ID); +CREATE UNIQUE INDEX I1 ON SM_MOORE (SM_ID); +CREATE UNIQUE INDEX I1 ON ACT_EL (Statement_ID); +CREATE UNIQUE INDEX I1 ON ACT_RET (Statement_ID); +CREATE UNIQUE INDEX I1 ON A_FJ (Id); +CREATE UNIQUE INDEX I1 ON ACT_FOR (Statement_ID); +CREATE UNIQUE INDEX I1 ON O_OBJ (Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_REL (Statement_ID); +CREATE UNIQUE INDEX I1 ON SM_NSTXN (SMstt_ID, SMevt_ID, SM_ID); +CREATE UNIQUE INDEX I2 ON SM_NSTXN (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I1 ON V_LOC (Id); CREATE UNIQUE INDEX I1 ON C_AS (Id); -CREATE UNIQUE INDEX I1 ON C_C (Id); -CREATE UNIQUE INDEX I1 ON C_DG (Id); -CREATE UNIQUE INDEX I1 ON C_EP (Id); -CREATE UNIQUE INDEX I1 ON C_I (Id); +CREATE UNIQUE INDEX I1 ON MSG_IOP (Msg_ID); +CREATE UNIQUE INDEX I1 ON CSME_CIE (CIE_ID); +CREATE UNIQUE INDEX I1 ON R_FORM (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_TAB (Action_ID); +CREATE UNIQUE INDEX I1 ON SM_NLEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON CL_IPINS (Satisfaction_Id, ImportedProvision_Id); CREATE UNIQUE INDEX I1 ON C_IO (Id); +CREATE UNIQUE INDEX I1 ON SQ_TM (Mark_ID); +CREATE UNIQUE INDEX I1 ON RV_AVL (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON V_INT (Var_ID); +CREATE UNIQUE INDEX I1 ON ACT_CON (Statement_ID); +CREATE UNIQUE INDEX I1 ON MSG_R (Msg_ID); +CREATE UNIQUE INDEX I1 ON RV_CRV (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON SQ_TS (Span_ID); CREATE UNIQUE INDEX I1 ON C_IR (Id); -CREATE UNIQUE INDEX I1 ON C_P (Provision_Id); -CREATE UNIQUE INDEX I1 ON C_PO (Id); -CREATE UNIQUE INDEX I1 ON C_PP (PP_Id); -CREATE UNIQUE INDEX I1 ON C_R (Requirement_Id); -CREATE UNIQUE INDEX I1 ON C_RID (Reference_Id, Delegation_Id); -CREATE UNIQUE INDEX I1 ON C_SF (Id); -CREATE UNIQUE INDEX I2 ON C_SF (Provision_Id, Requirement_Id); -CREATE UNIQUE INDEX I1 ON EP_PIP (Parent_Package_ID, Child_Package_ID); -CREATE UNIQUE INDEX I1 ON EP_PKG (Package_ID); -CREATE UNIQUE INDEX I1 ON EP_SPKG (Package_ID); -CREATE UNIQUE INDEX I1 ON E_CEA (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_CEC (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_CEE (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_CEI (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_CES (Statement_ID); +CREATE UNIQUE INDEX I1 ON CA_ACC (APath_ID); CREATE UNIQUE INDEX I1 ON E_CSME (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_ESS (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_GAR (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_GEC (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_GEE (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_GEN (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_GES (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_GPR (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_GSME (Statement_ID); -CREATE UNIQUE INDEX I1 ON G_EIS (Element_ID, Sys_ID); -CREATE UNIQUE INDEX I1 ON IA_UCP (Part_ID); -CREATE UNIQUE INDEX I1 ON IP_IP (Package_ID); -CREATE UNIQUE INDEX I1 ON IP_IPINIP (Package_ID); -CREATE UNIQUE INDEX I1 ON I_AVL (Attr_ID, Inst_ID); -CREATE UNIQUE INDEX I1 ON I_CIN (Container_ID); -CREATE UNIQUE INDEX I1 ON I_DIV (DIV_ID); -CREATE UNIQUE INDEX I1 ON I_EVI (Event_ID); +CREATE UNIQUE INDEX I1 ON L_IWC (Local_ID, Inst_ID); +CREATE UNIQUE INDEX I1 ON BP_BP (Breakpoint_ID); +CREATE UNIQUE INDEX I1 ON V_SCV (Value_ID); +CREATE UNIQUE INDEX I1 ON V_AER (Value_ID); +CREATE UNIQUE INDEX I1 ON V_PAR (Value_ID); +CREATE UNIQUE INDEX I1 ON V_UNY (Value_ID); +CREATE UNIQUE INDEX I1 ON SM_EVTDI (SM_ID, SMedi_ID); CREATE UNIQUE INDEX I1 ON I_EXE (Execution_Engine_ID); -CREATE UNIQUE INDEX I1 ON I_INS (Inst_ID); -CREATE UNIQUE INDEX I1 ON I_LIP (Rel_ID, Inst_ID); -CREATE UNIQUE INDEX I1 ON I_LNK (Link_ID); -CREATE UNIQUE INDEX I1 ON I_TIM (Timer_ID); -CREATE UNIQUE INDEX I1 ON MSG_A (Arg_ID); CREATE UNIQUE INDEX I1 ON MSG_AM (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_B (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_BA (Arg_ID); -CREATE UNIQUE INDEX I1 ON MSG_E (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_EA (Arg_ID); -CREATE UNIQUE INDEX I1 ON MSG_EPA (Arg_ID); -CREATE UNIQUE INDEX I1 ON MSG_F (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_FA (Arg_ID); -CREATE UNIQUE INDEX I1 ON MSG_IA (Arg_ID); -CREATE UNIQUE INDEX I1 ON MSG_IAM (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_IOP (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_ISM (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_M (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_O (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_OA (Arg_ID); -CREATE UNIQUE INDEX I1 ON MSG_R (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_SIG (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_SM (Msg_ID); -CREATE UNIQUE INDEX I1 ON O_ATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON O_BATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON O_DBATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON O_ID (Oid_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON O_IOBJ (IObj_ID); -CREATE UNIQUE INDEX I1 ON O_NBATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON O_OBJ (Obj_ID); -CREATE UNIQUE INDEX I1 ON O_OIDA (Attr_ID, Oid_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON O_RATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON O_REF (ROIR_ID, RObj_ID, ROid_ID, Obj_ID, RAttr_ID, OIR_ID, Rel_ID); -CREATE UNIQUE INDEX I2 ON O_REF (ARef_ID); -CREATE UNIQUE INDEX I1 ON O_RTIDA (OIR_ID, Rel_ID, Attr_ID, Oid_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON O_TFR (Tfr_ID); -CREATE UNIQUE INDEX I1 ON O_TPARM (TParm_ID); -CREATE UNIQUE INDEX I1 ON PA_DIC (Component_Id, Delegation_Id); -CREATE UNIQUE INDEX I1 ON PA_SIC (Satisfaction_Id, Component_Id); -CREATE UNIQUE INDEX I1 ON PA_SICP (ComponentPackage_ID, Satisfaction_Id); -CREATE UNIQUE INDEX I1 ON PE_PE (Element_ID); -CREATE UNIQUE INDEX I1 ON PL_EEPID (Dom_ID, EEPack_ID); -CREATE UNIQUE INDEX I1 ON PL_FPID (Dom_ID, FunPack_ID); -CREATE UNIQUE INDEX I1 ON R_AONE (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_AOTH (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_ASSOC (Rel_ID); -CREATE UNIQUE INDEX I1 ON R_ASSR (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_COMP (Rel_ID); -CREATE UNIQUE INDEX I1 ON R_CONE (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_COTH (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_FORM (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_OIR (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_PART (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_REL (Rel_ID); -CREATE UNIQUE INDEX I1 ON R_RGO (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_RTO (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I2 ON R_RTO (OIR_ID, Rel_ID, Oid_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_SIMP (Rel_ID); -CREATE UNIQUE INDEX I1 ON R_SUB (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON R_SUBSUP (Rel_ID); -CREATE UNIQUE INDEX I1 ON R_SUPER (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON SLD_SCINP (Package_ID, Constant_Spec_ID); -CREATE UNIQUE INDEX I1 ON SLD_SDINP (Package_ID, DT_ID); -CREATE UNIQUE INDEX I1 ON SLD_SDP (Package_ID, Sys_ID); -CREATE UNIQUE INDEX I1 ON SM_ACT (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON SM_AH (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON SM_ASM (SM_ID); -CREATE UNIQUE INDEX I1 ON SM_CH (SM_ID, SMstt_ID, SMspd_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON SM_CRTXN (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I1 ON SM_EIGN (SM_ID, SMstt_ID, SMevt_ID, SMspd_ID); -CREATE UNIQUE INDEX I1 ON SM_EVT (SMevt_ID); -CREATE UNIQUE INDEX I2 ON SM_EVT (SM_ID, SMevt_ID, SMspd_ID); -CREATE UNIQUE INDEX I1 ON SM_EVTDI (SM_ID, SMedi_ID); -CREATE UNIQUE INDEX I1 ON SM_ISM (SM_ID); -CREATE UNIQUE INDEX I1 ON SM_LEVT (SM_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON SM_MEAH (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I2 ON SM_MEAH (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON SM_MEALY (SM_ID); +CREATE UNIQUE INDEX I1 ON V_VAR (Var_ID); +CREATE UNIQUE INDEX I1 ON S_EEEDI (EEedi_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON C_DG (Id); +CREATE UNIQUE INDEX I1 ON S_EEEDT (EEevt_ID, EEedi_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON S_CDT (DT_ID); +CREATE UNIQUE INDEX I1 ON S_IRDT (DT_ID); CREATE UNIQUE INDEX I1 ON SM_MOAH (SM_ID, SMstt_ID); CREATE UNIQUE INDEX I2 ON SM_MOAH (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON SM_MOORE (SM_ID); -CREATE UNIQUE INDEX I1 ON SM_NETXN (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I1 ON SM_NLEVT (SM_ID, SMspd_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON SM_NSTXN (SMstt_ID, SM_ID, SMevt_ID, SMspd_ID); -CREATE UNIQUE INDEX I2 ON SM_NSTXN (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I1 ON SM_PEVT (SM_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON SM_SDI (SM_ID, SMedi_ID, SMspd_ID); -CREATE UNIQUE INDEX I1 ON SM_SEME (SM_ID, SMstt_ID, SMspd_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON SM_SEVT (SM_ID, SMevt_ID, SMspd_ID); -CREATE UNIQUE INDEX I1 ON SM_SGEVT (SM_ID, SMevt_ID, SMspd_ID); -CREATE UNIQUE INDEX I1 ON SM_SM (SM_ID); -CREATE UNIQUE INDEX I1 ON SM_STATE (SM_ID, SMstt_ID); -CREATE UNIQUE INDEX I2 ON SM_STATE (SMstt_ID, SMspd_ID, SM_ID); -CREATE UNIQUE INDEX I1 ON SM_SUPDT (SM_ID, SMspd_ID); +CREATE UNIQUE INDEX I1 ON CNST_LFSC (Const_ID, DT_ID); +CREATE UNIQUE INDEX I1 ON ACT_TFM (Statement_ID); +CREATE UNIQUE INDEX I1 ON O_OIDA (Attr_ID, Oid_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON I_MON (Execution_Engine_ID, Inst_ID); +CREATE UNIQUE INDEX I1 ON SQ_FA (Ia_ID); +CREATE UNIQUE INDEX I1 ON SM_CRTXN (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I1 ON MSG_O (Msg_ID); +CREATE UNIQUE INDEX I1 ON SPR_PS (Id); +CREATE UNIQUE INDEX I1 ON MSG_M (Msg_ID); +CREATE UNIQUE INDEX I1 ON ACT_OPB (Action_ID); +CREATE UNIQUE INDEX I1 ON ACT_SRW (Statement_ID); +CREATE UNIQUE INDEX I1 ON A_ACT (Id); +CREATE UNIQUE INDEX I1 ON MSG_SIG (Msg_ID); +CREATE UNIQUE INDEX I1 ON ACT_ACT (Action_ID); +CREATE UNIQUE INDEX I1 ON MSG_F (Msg_ID); +CREATE UNIQUE INDEX I1 ON MSG_E (Msg_ID); +CREATE UNIQUE INDEX I1 ON MSG_B (Msg_ID); +CREATE UNIQUE INDEX I1 ON MSG_A (Arg_ID); +CREATE UNIQUE INDEX I1 ON ACT_SAB (Action_ID); +CREATE UNIQUE INDEX I1 ON A_FF (Id); +CREATE UNIQUE INDEX I1 ON SM_SEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON ACT_AI (Statement_ID); +CREATE UNIQUE INDEX I1 ON R_ASSR (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON RV_IRV (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON SPR_PO (Id); +CREATE UNIQUE INDEX I1 ON V_AVL (Value_ID); +CREATE UNIQUE INDEX I1 ON A_ATE (Id); +CREATE UNIQUE INDEX I1 ON V_LIN (Value_ID); +CREATE UNIQUE INDEX I1 ON ACT_FIO (Statement_ID); +CREATE UNIQUE INDEX I1 ON RV_SMV (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON ACT_SEL (Statement_ID); CREATE UNIQUE INDEX I1 ON SM_TAH (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON ACT_DEL (Statement_ID); +CREATE UNIQUE INDEX I1 ON V_FNV (Value_ID); +CREATE UNIQUE INDEX I1 ON V_LEN (Value_ID); +CREATE UNIQUE INDEX I1 ON A_E (Id); +CREATE UNIQUE INDEX I1 ON SM_AH (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON SQ_CIP (Part_ID); +CREATE UNIQUE INDEX I1 ON A_N (Id); +CREATE UNIQUE INDEX I1 ON ACT_FIW (Statement_ID); +CREATE UNIQUE INDEX I1 ON O_ID (Oid_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON I_EQE (Event_Queue_Entry_ID); +CREATE UNIQUE INDEX I2 ON I_EQE (Event_ID, Execution_Engine_ID); +CREATE UNIQUE INDEX I1 ON ACT_URU (Statement_ID); +CREATE UNIQUE INDEX I1 ON S_EEDI (EEdi_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON O_DBATTR (Attr_ID, Obj_ID); CREATE UNIQUE INDEX I1 ON SM_TXN (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I1 ON SPR_PEP (Id); -CREATE UNIQUE INDEX I1 ON SPR_PO (Id); -CREATE UNIQUE INDEX I1 ON SPR_PS (Id); +CREATE UNIQUE INDEX I1 ON SM_SDI (SM_ID, SMedi_ID); +CREATE UNIQUE INDEX I1 ON L_LVL (Local_ID); +CREATE UNIQUE INDEX I1 ON R_ASSOC (Rel_ID); +CREATE UNIQUE INDEX I1 ON MSG_IA (Arg_ID); +CREATE UNIQUE INDEX I1 ON R_CONE (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_SGEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON S_BPARM (BParm_ID); +CREATE UNIQUE INDEX I1 ON O_RTIDA (OIR_ID, Rel_ID, Attr_ID, Oid_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON S_EEEVT (EEevt_ID, EE_ID); CREATE UNIQUE INDEX I1 ON SPR_REP (Id); -CREATE UNIQUE INDEX I1 ON SPR_RO (Id); +CREATE UNIQUE INDEX I1 ON CNST_CSP (Constant_Spec_ID); +CREATE UNIQUE INDEX I1 ON V_PVL (Value_ID); +CREATE UNIQUE INDEX I1 ON O_RATTR (Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_ACT (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON SM_SM (SM_ID); +CREATE UNIQUE INDEX I1 ON E_GEE (Statement_ID); +CREATE UNIQUE INDEX I1 ON ACT_DAB (Action_ID); +CREATE UNIQUE INDEX I1 ON V_ISR (Value_ID); +CREATE UNIQUE INDEX I1 ON UC_BA (Assoc_ID); +CREATE UNIQUE INDEX I1 ON V_BRV (Value_ID); +CREATE UNIQUE INDEX I1 ON I_INS (Inst_ID); +CREATE UNIQUE INDEX I1 ON SM_MEALY (SM_ID); +CREATE UNIQUE INDEX I1 ON ACT_LNK (Link_ID); +CREATE UNIQUE INDEX I1 ON ACT_WHL (Statement_ID); +CREATE UNIQUE INDEX I1 ON S_EDT (DT_ID); +CREATE UNIQUE INDEX I1 ON MSG_IAM (Msg_ID); +CREATE UNIQUE INDEX I1 ON O_BATTR (Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_RSB (Action_ID); +CREATE UNIQUE INDEX I1 ON MSG_ISM (Msg_ID); +CREATE UNIQUE INDEX I1 ON BP_EV (Breakpoint_ID); +CREATE UNIQUE INDEX I1 ON I_BSF (Stack_Frame_ID, Block_ID); +CREATE UNIQUE INDEX I1 ON V_EDV (Value_ID); +CREATE UNIQUE INDEX I1 ON I_ICQE (Stack_ID, Stack_Frame_ID); +CREATE UNIQUE INDEX I1 ON ACT_CR (Statement_ID); +CREATE UNIQUE INDEX I1 ON I_EVI (Event_ID); +CREATE UNIQUE INDEX I1 ON CL_IC (Id); CREATE UNIQUE INDEX I1 ON SPR_RS (Id); -CREATE UNIQUE INDEX I1 ON SQ_AP (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_AV (Av_ID); -CREATE UNIQUE INDEX I1 ON SQ_CIP (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_COP (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_CP (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_CPA (Ia_ID); -CREATE UNIQUE INDEX I1 ON SQ_EEP (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_FA (Ia_ID); -CREATE UNIQUE INDEX I1 ON SQ_FAV (Av_ID); -CREATE UNIQUE INDEX I1 ON SQ_FPP (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_IA (Ia_ID); -CREATE UNIQUE INDEX I1 ON SQ_IAV (Av_ID); -CREATE UNIQUE INDEX I1 ON SQ_LS (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_MIS (Package_ID, Msg_ID); -CREATE UNIQUE INDEX I1 ON SQ_P (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_PP (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_S (Package_ID); -CREATE UNIQUE INDEX I1 ON SQ_SIS (Package_ID); -CREATE UNIQUE INDEX I1 ON SQ_TM (Mark_ID); -CREATE UNIQUE INDEX I1 ON SQ_TS (Span_ID); -CREATE UNIQUE INDEX I1 ON S_BPARM (BParm_ID); -CREATE UNIQUE INDEX I1 ON S_BRG (Brg_ID); -CREATE UNIQUE INDEX I1 ON S_CDT (DT_ID); -CREATE UNIQUE INDEX I1 ON S_DIM (DIM_ID); -CREATE UNIQUE INDEX I1 ON S_DIP (Package_ID, DT_ID); -CREATE UNIQUE INDEX I1 ON S_DIS (Dom_ID, DT_ID); -CREATE UNIQUE INDEX I1 ON S_DOM (Dom_ID); -CREATE UNIQUE INDEX I1 ON S_DPIP (Package_ID); -CREATE UNIQUE INDEX I1 ON S_DPK (Package_ID); CREATE UNIQUE INDEX I1 ON S_DT (DT_ID); CREATE UNIQUE INDEX I2 ON S_DT (DT_ID); -CREATE UNIQUE INDEX I1 ON S_EDT (DT_ID); -CREATE UNIQUE INDEX I1 ON S_EE (EE_ID); -CREATE UNIQUE INDEX I1 ON S_EEDI (EEdi_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON S_EEEDI (EEedi_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON S_EEEDT (EEevt_ID, EEedi_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON S_EEEVT (EEevt_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON S_EEIP (EEPack_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON S_EEM (EEmod_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON S_EEPIP (EEPack_ID); -CREATE UNIQUE INDEX I1 ON S_EEPK (EEPack_ID); +CREATE UNIQUE INDEX I1 ON SPR_RO (Id); +CREATE UNIQUE INDEX I1 ON CA_COMM (CPath_ID); +CREATE UNIQUE INDEX I1 ON ACT_BRK (Statement_ID); +CREATE UNIQUE INDEX I1 ON SQ_EEP (Part_ID); +CREATE UNIQUE INDEX I1 ON ACT_BRG (Statement_ID); +CREATE UNIQUE INDEX I1 ON E_GAR (Statement_ID); +CREATE UNIQUE INDEX I1 ON CL_IR (Id); +CREATE UNIQUE INDEX I1 ON CL_IP (Id); +CREATE UNIQUE INDEX I1 ON V_LRL (Value_ID); +CREATE UNIQUE INDEX I1 ON C_EP (Id); +CREATE UNIQUE INDEX I1 ON V_TRV (Value_ID); +CREATE UNIQUE INDEX I1 ON MSG_FA (Arg_ID); +CREATE UNIQUE INDEX I1 ON R_AONE (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON E_GES (Statement_ID); +CREATE UNIQUE INDEX I1 ON I_RCH (Channel_Id); +CREATE UNIQUE INDEX I2 ON I_RCH (Execution_Engine_ID, Satisfaction_Id, other_Execution_Engine_ID); +CREATE UNIQUE INDEX I1 ON A_INI (Id); +CREATE UNIQUE INDEX I1 ON I_VSF (ValueInStackFrame_ID); +CREATE UNIQUE INDEX I1 ON SQ_AP (Part_ID); +CREATE UNIQUE INDEX I1 ON V_IRF (Value_ID); CREATE UNIQUE INDEX I1 ON S_ENUM (Enum_ID); -CREATE UNIQUE INDEX I1 ON S_FIP (Sync_ID, FunPack_ID); -CREATE UNIQUE INDEX I1 ON S_FPIP (FunPack_ID); -CREATE UNIQUE INDEX I1 ON S_FPK (FunPack_ID); -CREATE UNIQUE INDEX I1 ON S_IRDT (DT_ID); -CREATE UNIQUE INDEX I1 ON S_MBR (Parent_DT_DT_ID, Member_ID); +CREATE UNIQUE INDEX I1 ON RV_VIS (ContainedRuntimeValue_ID, RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON I_LIP (Rel_ID, Participation_ID); +CREATE UNIQUE INDEX I1 ON SQ_AV (Av_ID); +CREATE UNIQUE INDEX I1 ON O_IOBJ (IObj_ID); +CREATE UNIQUE INDEX I1 ON SQ_COP (Part_ID); +CREATE UNIQUE INDEX I1 ON SM_CH (SM_ID, SMevt_ID, SMstt_ID); +CREATE UNIQUE INDEX I1 ON ACT_IF (Statement_ID); +CREATE UNIQUE INDEX I1 ON I_STF (Stack_Frame_ID); CREATE UNIQUE INDEX I1 ON S_SDT (DT_ID); -CREATE UNIQUE INDEX I1 ON S_SID (Dom_ID, SS_ID); -CREATE UNIQUE INDEX I1 ON S_SIS (Child_SS_ID, Parent_SS_ID); -CREATE UNIQUE INDEX I1 ON S_SPARM (SParm_ID); -CREATE UNIQUE INDEX I1 ON S_SS (SS_ID); +CREATE UNIQUE INDEX I1 ON EP_PKG (Package_ID); +CREATE UNIQUE INDEX I1 ON R_SUBSUP (Rel_ID); +CREATE UNIQUE INDEX I1 ON ACT_SMT (Statement_ID); +CREATE UNIQUE INDEX I2 ON ACT_SMT (Statement_ID, Block_ID); +CREATE UNIQUE INDEX I1 ON G_EIS (Element_ID, Sys_ID); CREATE UNIQUE INDEX I1 ON S_SYNC (Sync_ID); -CREATE UNIQUE INDEX I1 ON S_SYS (Sys_ID); -CREATE UNIQUE INDEX I1 ON S_UDT (DT_ID); -CREATE UNIQUE INDEX I1 ON UC_BA (Assoc_ID); +CREATE UNIQUE INDEX I1 ON I_DIV (DIV_ID); +CREATE UNIQUE INDEX I1 ON L_LSR (Local_ID); +CREATE UNIQUE INDEX I1 ON MSG_OA (Arg_ID); +CREATE UNIQUE INDEX I1 ON ACT_BRB (Action_ID); +CREATE UNIQUE INDEX I1 ON SM_ASM (SM_ID); +CREATE UNIQUE INDEX I1 ON SM_PEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON SQ_LS (Part_ID); +CREATE UNIQUE INDEX I1 ON SQ_IA (Ia_ID); +CREATE UNIQUE INDEX I1 ON SM_ISM (SM_ID); +CREATE UNIQUE INDEX I1 ON V_LBO (Value_ID); +CREATE UNIQUE INDEX I1 ON E_GSME (Statement_ID); +CREATE UNIQUE INDEX I1 ON PA_DIC (Component_Id, Delegation_Id); +CREATE UNIQUE INDEX I1 ON BP_OAL (Breakpoint_ID); +CREATE UNIQUE INDEX I1 ON SQ_PP (Part_ID); +CREATE UNIQUE INDEX I1 ON A_GA (Id); +CREATE UNIQUE INDEX I1 ON R_RGO (OIR_ID, Rel_ID, Obj_ID); CREATE UNIQUE INDEX I1 ON UC_E (Assoc_ID); CREATE UNIQUE INDEX I1 ON UC_G (Assoc_ID); +CREATE UNIQUE INDEX I1 ON R_AOTH (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON RV_SCV (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I2 ON R_RTO (OIR_ID, Rel_ID, Oid_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON E_GPR (Statement_ID); +CREATE UNIQUE INDEX I1 ON SM_EIGN (SM_ID, SMevt_ID, SMstt_ID); +CREATE UNIQUE INDEX I1 ON MSG_EA (Arg_ID); +CREATE UNIQUE INDEX I1 ON SM_LEVT (SM_ID, SMevt_ID); CREATE UNIQUE INDEX I1 ON UC_I (Assoc_ID); -CREATE UNIQUE INDEX I1 ON UC_PIUC (Package_ID, Part_ID); -CREATE UNIQUE INDEX I1 ON UC_UCA (Assoc_ID); -CREATE UNIQUE INDEX I1 ON UC_UCC (Package_ID); -CREATE UNIQUE INDEX I1 ON UC_UIU (Package_ID); -CREATE UNIQUE INDEX I1 ON V_AER (Value_ID); -CREATE UNIQUE INDEX I1 ON V_ALV (Value_ID); -CREATE UNIQUE INDEX I1 ON V_AVL (Value_ID); -CREATE UNIQUE INDEX I1 ON V_BIN (Value_ID); -CREATE UNIQUE INDEX I1 ON V_BRV (Value_ID); -CREATE UNIQUE INDEX I1 ON V_EDV (Value_ID); +CREATE UNIQUE INDEX I1 ON S_EE (EE_ID); CREATE UNIQUE INDEX I1 ON V_EPR (SM_ID, SMedi_ID, Value_ID, PP_Id); -CREATE UNIQUE INDEX I1 ON V_FNV (Value_ID); +CREATE UNIQUE INDEX I1 ON O_TFR (Tfr_ID); +CREATE UNIQUE INDEX I1 ON SQ_FAV (Av_ID); +CREATE UNIQUE INDEX I1 ON CL_POR (Id); +CREATE UNIQUE INDEX I1 ON I_AVL (Attr_ID, Inst_ID); +CREATE UNIQUE INDEX I1 ON O_TPARM (TParm_ID); +CREATE UNIQUE INDEX I1 ON ACT_IOP (Statement_ID); +CREATE UNIQUE INDEX I1 ON I_STACK (Stack_ID); +CREATE UNIQUE INDEX I1 ON CA_EESMC (CPath_ID); +CREATE UNIQUE INDEX I1 ON ACT_RU (Statement_ID); +CREATE UNIQUE INDEX I1 ON COMM_LNK (Link_ID); +CREATE UNIQUE INDEX I1 ON I_CIN (Container_ID); +CREATE UNIQUE INDEX I1 ON R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_E (Statement_ID); +CREATE UNIQUE INDEX I1 ON C_RID (Reference_Id, Delegation_Id); +CREATE UNIQUE INDEX I1 ON ACT_BLK (Block_ID); +CREATE UNIQUE INDEX I1 ON R_COTH (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON S_UDT (DT_ID); +CREATE UNIQUE INDEX I1 ON BP_ST (Breakpoint_ID); +CREATE UNIQUE INDEX I1 ON PE_PE (Element_ID); CREATE UNIQUE INDEX I1 ON V_INS (Var_ID); -CREATE UNIQUE INDEX I1 ON V_INT (Var_ID); -CREATE UNIQUE INDEX I1 ON V_IRF (Value_ID); -CREATE UNIQUE INDEX I1 ON V_ISR (Value_ID); -CREATE UNIQUE INDEX I1 ON V_LBO (Value_ID); -CREATE UNIQUE INDEX I1 ON V_LEN (Value_ID); -CREATE UNIQUE INDEX I1 ON V_LIN (Value_ID); -CREATE UNIQUE INDEX I1 ON V_LOC (Id); -CREATE UNIQUE INDEX I1 ON V_LRL (Value_ID); -CREATE UNIQUE INDEX I1 ON V_LST (Value_ID); +CREATE UNIQUE INDEX I1 ON CL_IIR (Id); +CREATE UNIQUE INDEX I1 ON ACT_CTL (Statement_ID); +CREATE UNIQUE INDEX I1 ON A_OBJ (Id); +CREATE UNIQUE INDEX I1 ON ACT_UNR (Statement_ID); +CREATE UNIQUE INDEX I1 ON L_LCL (Local_ID); +CREATE UNIQUE INDEX I1 ON C_PO (Id); +CREATE UNIQUE INDEX I1 ON R_COMP (Rel_ID); +CREATE UNIQUE INDEX I1 ON MSG_BA (Arg_ID); +CREATE UNIQUE INDEX I1 ON ACT_CNV (Statement_ID); +CREATE UNIQUE INDEX I1 ON C_C (Id); +CREATE UNIQUE INDEX I1 ON CA_SMEEE (EEevt_ID, CPath_ID, EE_ID); CREATE UNIQUE INDEX I1 ON V_MSV (Value_ID); -CREATE UNIQUE INDEX I1 ON V_MVL (Value_ID); -CREATE UNIQUE INDEX I1 ON V_PAR (Value_ID); -CREATE UNIQUE INDEX I1 ON V_PVL (Value_ID); -CREATE UNIQUE INDEX I1 ON V_SCV (Value_ID); -CREATE UNIQUE INDEX I1 ON V_SLR (Value_ID); -CREATE UNIQUE INDEX I1 ON V_TRN (Var_ID); -CREATE UNIQUE INDEX I1 ON V_TRV (Value_ID); -CREATE UNIQUE INDEX I1 ON V_TVL (Value_ID); -CREATE UNIQUE INDEX I1 ON V_UNY (Value_ID); +CREATE UNIQUE INDEX I1 ON SQ_P (Part_ID); +CREATE UNIQUE INDEX I1 ON C_I (Id); +CREATE UNIQUE INDEX I1 ON SM_SUPDT (SM_ID, SMspd_ID); +CREATE UNIQUE INDEX I1 ON L_LCR (Local_ID); +CREATE UNIQUE INDEX I1 ON R_SIMP (Rel_ID); +CREATE UNIQUE INDEX I1 ON C_PP (PP_Id); +CREATE UNIQUE INDEX I1 ON SQ_IAV (Av_ID); +CREATE UNIQUE INDEX I1 ON C_P (Provision_Id); +CREATE UNIQUE INDEX I1 ON C_R (Requirement_Id); +CREATE UNIQUE INDEX I1 ON R_SUPER (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON V_ALV (Value_ID); +CREATE UNIQUE INDEX I1 ON O_REF (ROIR_ID, RObj_ID, ROid_ID, Obj_ID, RAttr_ID, OIR_ID, Rel_ID); +CREATE UNIQUE INDEX I2 ON O_REF (ARef_ID); +CREATE UNIQUE INDEX I1 ON I_SQE (Self_Queue_Entry_ID); +CREATE UNIQUE INDEX I2 ON I_SQE (Event_ID, Execution_Engine_ID); CREATE UNIQUE INDEX I1 ON V_VAL (Value_ID); -CREATE UNIQUE INDEX I1 ON V_VAR (Var_ID); +CREATE UNIQUE INDEX I1 ON UC_UCA (Assoc_ID); +CREATE UNIQUE INDEX I1 ON CA_SMEED (APath_ID, EEdi_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON R_PART (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_STATE (SM_ID, SMstt_ID); +CREATE UNIQUE INDEX I2 ON SM_STATE (SMstt_ID, SM_ID); +CREATE UNIQUE INDEX I1 ON MSG_EPA (Arg_ID); +CREATE UNIQUE INDEX I1 ON S_EEM (EEmod_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON V_BIN (Value_ID); +CREATE UNIQUE INDEX I1 ON S_MBR (Parent_DT_DT_ID, Member_ID); +CREATE UNIQUE INDEX I1 ON A_AP (Id); +CREATE UNIQUE INDEX I1 ON CA_SMOAA (APath_ID, Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_PSB (Action_ID); +CREATE UNIQUE INDEX I1 ON V_LST (Value_ID); +CREATE UNIQUE INDEX I1 ON CA_SMOA (APath_ID); +CREATE UNIQUE INDEX I2 ON CA_SMOA (APath_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON C_SF (Id); +CREATE UNIQUE INDEX I2 ON C_SF (Provision_Id, Requirement_Id); +CREATE UNIQUE INDEX I1 ON E_ESS (Statement_ID); +CREATE UNIQUE INDEX I1 ON R_REL (Rel_ID); +CREATE UNIQUE INDEX I1 ON CA_EESME (SMevt_ID, CPath_ID); +CREATE UNIQUE INDEX I1 ON SQ_CP (Part_ID); +CREATE UNIQUE INDEX I1 ON S_SYS (Sys_ID); +CREATE UNIQUE INDEX I1 ON V_TVL (Value_ID); +CREATE UNIQUE INDEX I1 ON ACT_SR (Statement_ID); +CREATE UNIQUE INDEX I1 ON ACT_ROB (Action_ID); +CREATE UNIQUE INDEX I1 ON A_AF (Id); +CREATE UNIQUE INDEX I1 ON A_AE (Id); ''' From dff0a4c9ee6c58fd5a43d03d5aa60931b0083c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 01:18:06 +0200 Subject: [PATCH 120/216] examples: update ooaofooa schema gen filter out associations and classes by looking at its description. Also, remove formalized referential attributes named SMspd_ID --- examples/gen_ooaofooa_schema.py | 45 ++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index f1888c6..89b2c45 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -23,6 +23,12 @@ import xtuml from xtuml import navigate_many as many +from xtuml import navigate_one as one +from xtuml import navigate_subtype as subtype +from xtuml import relate +from xtuml import unrelate +from xtuml import where_eq as where + from bridgepoint import ooaofooa @@ -39,8 +45,8 @@ def parse_keyword(expr, keyword): return '' -def o_attr_filter(o_attr): - description = o_attr.Descrip.lower() +def description_filter(inst): + description = inst.Descrip.lower() keymap = dict(persistent='false', translate_for_external_use='false') @@ -59,18 +65,43 @@ def main(): loader.filename_input(filename) m = loader.build_metamodel() - c = loader.build_component(derived_attributes=True) + + for r_rel in m.select_many('R_REL', description_filter): + logger.info('Filtering R%d' % r_rel.Numb) + xtuml.delete(r_rel) + + for o_obj in m.select_many('O_OBJ', description_filter): + logger.info('Filtering %s' % o_obj.Key_Lett) + for r_rel in many(o_obj).R_OIR[201].R_REL[201](): + logger.info('Filtering R%d' % r_rel.Numb) + xtuml.delete(r_rel) + + xtuml.delete(o_obj) + + for o_attr in m.select_many('O_ATTR', where(Name='SMspd_ID')): + if not one(o_attr).O_RATTR[106](): + continue + + for o_oida in many(o_attr).O_OIDA[105](): + for o_rtida in many(o_oida).O_RTIDA[110](): + xtuml.delete(o_rtida) + xtuml.delete(o_oida) + + for o_ref in many(o_attr).O_RATTR[106].O_REF[108](): + xtuml.delete(o_ref) + + c = ooaofooa.mk_component(m, None, derived_attributes=True) + metaclass = c.find_metaclass('ACT_ACT') + metaclass.insert_attribute(index=5, name='return_value', type_name='INTEGER') for o_obj in m.select_many('O_OBJ'): - for o_attr in many(o_obj).O_ATTR[102](o_attr_filter): + for o_attr in many(o_obj).O_ATTR[102](description_filter): logger.info('Filtering %s.%s' % (o_obj.Key_Lett, o_attr.Name)) metaclass = c.find_metaclass(o_obj.Key_Lett) metaclass.delete_attribute(o_attr.Name) - if o_obj.Key_Lett == 'ACT_ACT': - metaclass.insert_attribute(index=5, name='return_value', type_name='INTEGER') xtuml.persist_schema(c, '/dev/stdout') - + #xtuml.persist.persist_unique_identifiers(c, '/dev/stdout') if __name__ == '__main__': logging.basicConfig(level=logging.INFO) From 54ea814aa9972e264970d06668869bcf4ae7464b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 01:18:20 +0200 Subject: [PATCH 121/216] cosmetics --- tests/test_bridgepoint/test_consistency.py | 2 -- tests/test_xtuml/test_consistency.py | 1 - 2 files changed, 3 deletions(-) diff --git a/tests/test_bridgepoint/test_consistency.py b/tests/test_bridgepoint/test_consistency.py index e160002..7ba474f 100644 --- a/tests/test_bridgepoint/test_consistency.py +++ b/tests/test_bridgepoint/test_consistency.py @@ -18,8 +18,6 @@ import os import unittest -import xtuml -import bridgepoint import bridgepoint.consistency_check diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index 93f68cb..8e5ba86 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -18,7 +18,6 @@ import os import unittest -import xtuml import bridgepoint import xtuml.consistency_check From 77551dc89b405d1dd9b8828d226317313c349125 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 01:19:58 +0200 Subject: [PATCH 122/216] test: test_unique_identifier_with_null using PE_PE instead of ACT_BLK --- tests/test_xtuml/test_consistency.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index 8e5ba86..fb56a04 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -72,9 +72,9 @@ def test_association_integrity(self): def test_unique_identifier_with_null(self): m = self.metamodel - act_blk = m.new('ACT_BLK') - act_blk.Block_ID = None - self.assertEqual(1, xtuml.check_uniqueness_constraint(m, 'ACT_BLK')) + pe_pe = m.new('PE_PE') + pe_pe.Element_ID = None + self.assertEqual(1, xtuml.check_uniqueness_constraint(m, 'PE_PE')) def test_uniqueness_constraint(self): m = self.metamodel From ff8b58968a57494b202de4b9e933b403e968b163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 01:20:51 +0200 Subject: [PATCH 123/216] test: test_uniqueness_constraint using PE_PE instead of S_DT --- tests/test_xtuml/test_consistency.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index fb56a04..cba531a 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -81,14 +81,13 @@ def test_uniqueness_constraint(self): self.assertTrue(m.is_consistent()) s_dt = m.select_one('S_DT', xtuml.where_eq(Name='string')) - m.clone(s_dt) + pe_pe = xtuml.navigate_one(s_dt).PE_PE[8001]() + pe_pe_clone = m.clone(pe_pe) - # S_DT has two unique identifiers (I1 and I2). two instances - # produce one error each, hence 4 errors self.assertFalse(m.is_consistent()) - self.assertEqual(4, xtuml.check_uniqueness_constraint(m, 'S_DT')) + self.assertEqual(2, xtuml.check_uniqueness_constraint(m, 'PE_PE')) - xtuml.delete(s_dt) + xtuml.delete(pe_pe_clone) self.assertTrue(m.is_consistent()) def test_subtype_integrity(self): From 53c631915b9d59164d281eb9105ffb4ee8d9e256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 01:23:32 +0200 Subject: [PATCH 124/216] initial support for explicit links. Links are now explicit, and referential attributes are calculated by navigating to its owner and reading the value. --- tests/test_xtuml/test_load.py | 2 +- tests/test_xtuml/test_metamodel.py | 72 +++--- tests/test_xtuml/test_relate.py | 2 +- xtuml/__init__.py | 2 +- xtuml/consistency_check.py | 4 +- xtuml/load.py | 51 +++-- xtuml/meta.py | 355 ++++++++++++++++------------- xtuml/persist.py | 25 +- 8 files changed, 279 insertions(+), 234 deletions(-) diff --git a/tests/test_xtuml/test_load.py b/tests/test_xtuml/test_load.py index c205085..bdcbb15 100644 --- a/tests/test_xtuml/test_load.py +++ b/tests/test_xtuml/test_load.py @@ -370,7 +370,7 @@ def test_invalid_type(self, m): CREATE TABLE X (VAR SOME_TYPE); INSERT INTO X VALUES ('test'); ''' - self.assertIsInstance(m, xtuml.ParsingException) + self.assertIsInstance(m, xtuml.MetaException) @load_docstring def test_insert_with_undefined_table_and_argument(self, m): diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 6dfdcce..4d62de3 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -129,22 +129,24 @@ def test_case_sensitivity(self): metaclass = self.metamodel.find_metaclass('aa') metaclass.append_attribute('Next_Id', 'unique_id') - self.metamodel.define_association(rel_id='R1', - source_kind='AA', - source_keys=['ID'], - source_many=False, - source_conditional=False, - source_phrase='prev', - target_kind='aa', - target_keys=['next_id'], - target_many=False, - target_conditional=False, - target_phrase='next') - + ass = self.metamodel.define_association(rel_id='R1', + source_kind='AA', + source_keys=['ID'], + source_many=False, + source_conditional=False, + source_phrase='prev', + target_kind='aa', + target_keys=['next_id'], + target_many=False, + target_conditional=False, + target_phrase='next') next_id = None for inst in self.metamodel.select_many('aa'): inst.next_ID = next_id next_id = inst.Id + + ass.batch_relate() + ass.formalize() self.assertTrue(xtuml.navigate_one(inst).aa[1, 'prev'].AA[1, 'prev']()) @@ -226,17 +228,18 @@ def test_reflexive(self): ('Next_Id', 'unique_id'), ('Name', 'string')]) - self.metamodel.define_association(rel_id='R1', - source_kind='A', - source_keys=['Id'], - source_many=False, - source_conditional=False, - source_phrase='prev', - target_kind='A', - target_keys=['Next_Id'], - target_many=False, - target_conditional=False, - target_phrase='next') + ass = self.metamodel.define_association(rel_id='R1', + source_kind='A', + source_keys=['Id'], + source_many=False, + source_conditional=False, + source_phrase='prev', + target_kind='A', + target_keys=['Next_Id'], + target_many=False, + target_conditional=False, + target_phrase='next') + ass.formalize() first = self.metamodel.new('A', Name="First") second = self.metamodel.new('A', Name="Second") @@ -258,18 +261,19 @@ def test_reflexive(self): def test_one_to_many(self): self.metamodel.define_class('A', [('Id', 'unique_id')]) self.metamodel.define_class('B', [('Id', 'unique_id'), ('A_Id', 'unique_id')]) - self.metamodel.define_association(rel_id=1, - source_kind='A', - source_keys=['Id'], - source_many=False, - source_conditional=False, - source_phrase='', - target_kind='B', - target_keys=['A_Id'], - target_many=True, - target_conditional=False, - target_phrase='') + ass = self.metamodel.define_association(rel_id=1, + source_kind='A', + source_keys=['Id'], + source_many=False, + source_conditional=False, + source_phrase='', + target_kind='B', + target_keys=['A_Id'], + target_many=True, + target_conditional=False, + target_phrase='') + ass.formalize() a = self.metamodel.new('A') b = self.metamodel.new('B') self.assertTrue(xtuml.relate(a, b, 1)) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index b180e51..8051ac9 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -108,7 +108,7 @@ def test_unrelate_subtype(self): inst1 = self.m.new('PE_PE') inst2 = self.m.new('EP_PKG') self.assertTrue(xtuml.relate(inst1, inst2, 8001)) - self.assertFalse(xtuml.unrelate(inst1, inst2, 8001)) + self.assertTrue(xtuml.unrelate(inst1, inst2, 8001)) def test_unrelate_none(self): inst = self.m.new('ACT_SMT') diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 9de4e44..2507cd2 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -37,6 +37,7 @@ from .persist import persist_database from .persist import persist_instances from .persist import persist_schema +from .persist import persist_unique_identifiers from .persist import serialize_database from .persist import serialize_schema @@ -50,7 +51,6 @@ from xtuml.meta import Association from xtuml.meta import Link -from xtuml.meta import ReversedLink from xtuml.meta import QuerySet from xtuml.meta import Class diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 4727946..1166533 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -171,8 +171,8 @@ def check_association_integrity(m, rel_id=None): res = 0 for ass in m.associations: if rel_id in [ass.rel_id, None]: - res += check_link_integrity(m, ass.link) - res += check_link_integrity(m, ass.reversed_link) + res += check_link_integrity(m, ass.source_link) + res += check_link_integrity(m, ass.target_link) return res diff --git a/xtuml/load.py b/xtuml/load.py index d687503..8843c5e 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -255,18 +255,20 @@ def populate_associations(self, metamodel): input. ''' for stmt in self.statements: - if isinstance(stmt, CreateAssociationStmt): - metamodel.define_association(stmt.rel_id, - stmt.source_kind, - stmt.source_keys, - 'M' in stmt.source_cardinality, - 'C' in stmt.source_cardinality, - stmt.source_phrase, - stmt.target_kind, - stmt.target_keys, - 'M' in stmt.target_cardinality, - 'C' in stmt.target_cardinality, - stmt.target_phrase) + if not isinstance(stmt, CreateAssociationStmt): + continue + + ass = metamodel.define_association(stmt.rel_id, + stmt.source_kind, + stmt.source_keys, + 'M' in stmt.source_cardinality, + 'C' in stmt.source_cardinality, + stmt.source_phrase, + stmt.target_kind, + stmt.target_keys, + 'M' in stmt.target_cardinality, + 'C' in stmt.target_cardinality, + stmt.target_phrase) def populate_unique_identifiers(self, metamodel): ''' @@ -304,19 +306,16 @@ def _populate_instance_with_positional_arguments(metamodel, stmt): names, stmt.values) metaclass = metamodel.find_metaclass(stmt.kind) - args = list() - if len(metaclass.attributes) != len(stmt.values): logger.warn('schema mismatch while loading an instance of %s', stmt.kind) + inst = metamodel.new(stmt.kind) for attr, value in zip(metaclass.attributes, stmt.values): - _, ty = attr + name, ty = attr value = deserialize_value(ty, value) - args.append(value) - - metamodel.new(stmt.kind, *args) - + setattr(inst, name, value) + @staticmethod def _populate_instance_with_named_arguments(metamodel, stmt): ''' @@ -336,7 +335,7 @@ def _populate_instance_with_named_arguments(metamodel, stmt): logger.warn('schema mismatch while loading an instance of %s', stmt.kind) - args = list() + inst = metamodel.new(stmt.kind) for name, ty in metaclass.attributes: uname = name.upper() if uname in inst_unames: @@ -344,10 +343,8 @@ def _populate_instance_with_named_arguments(metamodel, stmt): value = deserialize_value(ty, stmt.values[idx]) else: value = None - - args.append(value) - - metamodel.new(stmt.kind, *args) + + setattr(inst, name, value) def populate_instances(self, metamodel): ''' @@ -369,9 +366,9 @@ def populate(self, metamodel): Populate a *metamodel* with entities previously encountered from input. ''' self.populate_classes(metamodel) - self.populate_associations(metamodel) self.populate_unique_identifiers(metamodel) self.populate_instances(metamodel) + self.populate_associations(metamodel) def build_metamodel(self, id_generator=None): ''' @@ -381,6 +378,10 @@ def build_metamodel(self, id_generator=None): self.populate(m) + for ass in m.associations: + ass.batch_relate() + ass.formalize() + return m def t_comment(self, t): diff --git a/xtuml/meta.py b/xtuml/meta.py index b6bd1d7..e479ca1 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -53,13 +53,22 @@ class RelateException(MetaException): ''' An exception that may be thrown during relate operations. ''' - + def __init__(self, from_instance, to_instance, rel_id, phrase): + msg = '%s or %s already related across %s' % (from_instance, + to_instance, + rel_id) + MetaException.__init__(self, msg) + class UnrelateException(MetaException): ''' An exception that may be thrown during unrelate operations. ''' - + def __init__(self, from_instance, to_instance, rel_id, phrase): + msg = '%s and %s not related across %s' % (from_instance, + to_instance, + rel_id) + MetaException.__init__(self, msg) class UnknownLinkException(MetaException): ''' @@ -123,20 +132,66 @@ class Association(object): links. ''' rel_id = None - link = None - reversed_link = None + source_keys = None + source_link = None + target_keys = None + target_link = None - def __init__(self, rel_id, link, reversed_link): + def __init__(self, rel_id, + source_keys, source_link, + target_keys, target_link): self.rel_id = rel_id - self.link = link - self.reversed_link = reversed_link + self.source_link = source_link + self.target_link = target_link + self.source_keys = source_keys + self.target_keys = target_keys @property def is_reflexive(self): - return self.link.kind == self.reversed_link.kind + return self.source_link.kind == self.target_link.kind + def batch_relate(self): + source_class = self.source_link.to_metaclass + target_class = self.target_link.to_metaclass + + for inst1 in source_class.storage: + kwargs = dict() + for ref_key, primary_key in zip(self.source_keys, self.target_keys): + kwargs[primary_key] = getattr(inst1, ref_key) + + for inst2 in target_class.query(kwargs): + self.source_link.connect(inst2, inst1, check=False) + self.target_link.connect(inst1, inst2, check=False) + + def formalize(self): + source_class = self.source_link.to_metaclass + target_class = self.target_link.to_metaclass + + self.source_link.key_map = dict(zip(self.source_keys, self.target_keys)) + self.target_link.key_map = dict(zip(self.target_keys, self.source_keys)) + + source_class.referential_attributes |= set(self.source_keys) + target_class.identifying_attributes |= set(self.target_keys) -class Link(object): + def fget(inst, ref_name): + inst = next(iter(self.target_link.navigate(inst)), None) + return getattr(inst, ref_name, None) + + def fset(inst, ref_name, value): + inst = next(iter(self.target_link.navigate(inst)), None) + return setattr(inst, ref_name, value) + + for ref_key, primary_key in zip(self.source_keys, self.target_keys): + prop = property(partial(fget, ref_name=primary_key), + partial(fset, ref_name=primary_key)) + + if not self.target_link.conditional: + setattr(source_class.clazz, ref_key, prop) + + elif not hasattr(source_class.clazz, ref_key): + setattr(source_class.clazz, ref_key, prop) + +class Link(dict): ''' A link connects one metaclass to another in a single direction. @@ -156,7 +211,7 @@ class Link(object): conditional = None many = None - def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', + def __init__(self, from_metaclass, rel_id, to_metaclass, phrase='', conditional=False, many=False): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id @@ -164,7 +219,7 @@ def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', self.from_metaclass = from_metaclass self.rel_id = rel_id self.to_metaclass = to_metaclass - self.key_map = key_map + self.key_map = dict() self.phrase = phrase self.conditional = conditional self.many = many @@ -195,37 +250,44 @@ def kind(self): Obtain the resulting kind when the link is navigated. ''' return self.to_metaclass.kind - - def navigate(self, instance): - ''' - Navigate accross a link starting from an *instance*. - ''' - kwargs = dict() - for key, mapped_key in self.key_map.items(): - kwargs[mapped_key] = getattr(instance, key) - - return self.to_metaclass.query(kwargs) - - def __repr__(self): - if self.phrase: - return "%s->%s[%s, %s]" % (self.from_metaclass.kind, self.kind, - repr(self.rel_id), repr(self.phrase)) - else: - return "%s->%s[%s]" % (self.from_metaclass.kind, self.kind, - repr(self.rel_id)) + def connect(self, inst1, inst2, check=True): + if inst1 not in self: + self[inst1] = set() + + if inst2 in self[inst1]: + return True + + if self[inst1] and not self.many and check: + return False -class ReversedLink(Link): - ''' - A reversed (directed) link is identical to a regular link, but with the - *key_map* being inverted upon initialisation. - ''' - def __init__(self, from_metaclass, rel_id, to_metaclass, key_map, phrase='', - conditional=False, many=False): - Link.__init__(self, from_metaclass, rel_id, to_metaclass, - dict(zip(key_map.values(), key_map.keys())), - phrase, conditional, many) + self[inst1].add(inst2) + return True + + def disconnect(self, inst1, inst2): + if inst1 not in self: + return False + + if inst2 not in self[inst1]: + return False + self[inst1].remove(inst2) + return True + + def navigate(self, inst): + if inst in self: + return self[inst] + else: + return set() + + def query(self, dictonary_of_values): + ''' + Query the link for instances with attributes that match a given + *dictonary of values*. + ''' + q = Query(self, dictonary_of_values) + return q.execute() + class Query(object): ''' @@ -313,10 +375,14 @@ def __sub__(self, other): def __getattr__(self, name): uname = name.upper() + for attr, _ in self.__metaclass__.attributes: - if attr.upper() == uname: + if attr.upper() != uname : + continue + + if attr in self.__dict__: return self.__dict__[attr] - + return object.__getattribute__(self, name) def __setattr__(self, name, value): @@ -329,8 +395,22 @@ def __setattr__(self, name, value): self.__dict__[name] = value + def __delattr__(self, name): + uname = name.upper() + for name in self.__dict__: + if uname == name.upper(): + break + + del self.__dict__[name] + def __str__(self): - return str(self.__dict__) + values = list() + for attr, ty in self.__metaclass__.attributes: + value = getattr(self, attr) + value = xtuml.serialize_value(value, ty) + values.append('%s=%s' % (attr, value)) + + return '%s(%s)' % (self.__class__.__name__, ', '.join(values)) # Backwards compatabillity with older versions of pyxtuml @@ -389,29 +469,17 @@ def attribute_type(self, attribute_name): if name.upper() == attribute_name: return ty - def add_link(self, metaclass, rel_id, key_map, phrase, conditional, - many, reverse=False): + def add_link(self, metaclass, rel_id, phrase, conditional, many): ''' - Add a new link from *self* to *metaclass*. Keys in the link are added - to the set of identifying or referential attributes depending on the - direction, i.e. if the link is reversed or not. + Add a new link from *self* to *metaclass*. ''' - if isinstance(rel_id, int): - rel_id = 'R%d' % rel_id - - if reverse: - link = ReversedLink(self, rel_id, metaclass, key_map, phrase, conditional, many) - self.identifying_attributes |= set(link.key_map.keys()) - else: - link = Link(self, rel_id, metaclass, key_map, phrase, conditional, many) - self.referential_attributes |= set(link.key_map.keys()) - + link = Link(self, rel_id, metaclass, phrase, conditional, many) key = (metaclass.kind.upper(), rel_id, phrase) self.links[key] = link return link - def find_link(self, kind, rel_id, phrase): + def find_link(self, kind, rel_id, phrase=''): ''' Find a link with a given *rel_id* and *phrase* that yeld instances of some *kind*. @@ -421,7 +489,7 @@ def find_link(self, kind, rel_id, phrase): key = (kind.upper(), rel_id, phrase) return self.links.get(key, None) - + def append_attribute(self, name, type_name): ''' Append an attribute with a given *name* and *type name* at the end of @@ -479,26 +547,49 @@ def new(self, *args, **kwargs): ''' self.cache.clear() inst = self.clazz() + self.storage.append(inst) # set all attributes with an initial default value + referential_attributes = dict() for name, ty in self.attributes: - if name in self.referential_attributes: - value = None - else: + if name not in self.referential_attributes: value = self.default_value(ty) - setattr(inst, name, value) + setattr(inst, name, value) # set all positional arguments for attr, value in zip(self.attributes, args): name, ty = attr - setattr(inst, name, value) + if name not in self.referential_attributes: + setattr(inst, name, value) + else: + referential_attributes[name] = value # set all named arguments for name, value in kwargs.items(): - setattr(inst, name, value) + if name not in self.referential_attributes: + setattr(inst, name, value) + else: + referential_attributes[name] = value + + # batch relate referential attributes + for link in self.links.values(): + if set(link.key_map.values()) - set(referential_attributes.keys()): + continue + + kwargs = dict() + for key, value in link.key_map.items(): + kwargs[key] = referential_attributes[value] - self.storage.append(inst) + if not kwargs: + continue + + for other_inst in link.to_metaclass.query(kwargs): + relate(other_inst, inst, link.rel_id, link.phrase) + for name, value in referential_attributes.items(): + if getattr(inst, name) != value: + logger.warning('unable to assign %s to %s', name, inst) + return inst def clone(self, instance): @@ -508,12 +599,12 @@ def clone(self, instance): **Note:** the clone and the original instance **does not** have to be part of the same metaclass. ''' - clone = self.new() + args = list() for name, _ in instance.__metaclass__.attributes: value = getattr(instance, name) - setattr(clone, name, value) + args.append(value) - return clone + return self.new(*args) def delete(self, instance): ''' @@ -572,7 +663,7 @@ def query(self, dictonary_of_values): self.cache[index] = Query(self.storage, dictonary_of_values) return self.cache[index].execute() - + class NavChain(object): ''' @@ -818,42 +909,17 @@ def _find_link(inst1, inst2, rel_id, phrase): if ass.rel_id != rel_id: continue - if (ass.link.from_metaclass == metaclass1 and - ass.link.to_metaclass == metaclass2 and - ass.reversed_link.phrase == phrase): - return inst1, inst2, ass.link + if (ass.source_link.from_metaclass == metaclass1 and + ass.source_link.to_metaclass == metaclass2 and + ass.target_link.phrase == phrase): + return inst1, inst2, ass - if (ass.reversed_link.from_metaclass == metaclass1 and - ass.reversed_link.to_metaclass == metaclass2 and - ass.link.phrase == phrase): - return inst2, inst1, ass.link + if (ass.target_link.from_metaclass == metaclass1 and + ass.target_link.to_metaclass == metaclass2 and + ass.source_link.phrase == phrase): + return inst2, inst1, ass raise UnknownLinkException(metaclass1.kind, metaclass2.kind, rel_id, phrase) - - -def _deferred_link_operation(inst, link, op): - ''' - Generate a list of deferred operations that needs to be invoked after an - update is made to identifying attributes on the association *link*. - ''' - l = list() - - metaclass = inst.__metaclass__ - keys = set(link.key_map.keys()) - for link in metaclass.links.values(): - if not isinstance(link, ReversedLink): - continue - - derived_keys = set(link.key_map.values()) - if not (keys & derived_keys): - continue - - nav = navigate_many(inst).nav(link.to_metaclass.kind, link.rel_id, link.phrase) - for from_inst in nav(): - fn = partial(op, from_inst, inst, link.rel_id, link.phrase) - l.append(fn) - - return l def relate(from_instance, to_instance, rel_id, phrase=''): @@ -866,37 +932,17 @@ def relate(from_instance, to_instance, rel_id, phrase=''): n the FROM side. Updated values which affect existing associations are propagated. A set of all affected instances will be returned. ''' - affected_instances = set() if None in [from_instance, to_instance]: - return affected_instances - - from_instance, to_instance, link = _find_link(from_instance, to_instance, - rel_id, phrase) - - post_process = _deferred_link_operation(from_instance, link, relate) - for from_name, to_name in link.key_map.items(): - if _is_null(to_instance, to_name): - raise RelateException('undefined referential attribute %s' % to_name) - - from_value = getattr(from_instance, from_name) - to_value = getattr(to_instance, to_name) - - if from_value == to_value: - continue - - if not _is_null(from_instance, from_name): - raise RelateException('instance is already related' - ' (%s.%s=%s)' % (from_instance.__metaclass__.kind, - from_name, from_value)) - - affected_instances.add(from_instance) - setattr(from_instance, from_name, to_value) + return False - if affected_instances: - for deferred_relate in post_process: - affected_instances |= deferred_relate() + inst1, inst2, ass = _find_link(from_instance, to_instance, rel_id, phrase) + if not ass.source_link.connect(inst1, inst2): + raise RelateException(from_instance, to_instance, rel_id, phrase) - return affected_instances + if not ass.target_link.connect(inst2, inst1): + raise RelateException(from_instance, to_instance, rel_id, phrase) + + return True def unrelate(from_instance, to_instance, rel_id, phrase=''): @@ -909,27 +955,17 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): existing associations are propagated. A set of all affected instances will be returned. ''' - affected_instances = set() if None in [from_instance, to_instance]: - return affected_instances + return False - from_instance, to_instance, link = _find_link(from_instance, to_instance, - rel_id, phrase) - post_process = _deferred_link_operation(from_instance, link, unrelate) + inst1, inst2, ass = _find_link(from_instance, to_instance, rel_id, phrase) + if not ass.source_link.disconnect(inst1, inst2): + raise UnrelateException(from_instance, to_instance, rel_id, phrase) - for from_name in link.key_map: - if _is_null(from_instance, from_name): - raise UnrelateException('instances are not related') - - if not from_name in from_instance.__metaclass__.identifying_attributes: - affected_instances.add(from_instance) - setattr(from_instance, from_name, None) - - if affected_instances: - for deferred_unrelate in post_process: - affected_instances |= deferred_unrelate() + if not ass.target_link.disconnect(inst2, inst1): + raise UnrelateException(from_instance, to_instance, rel_id, phrase) - return affected_instances + return True def delete(instance): @@ -1040,17 +1076,21 @@ def define_association(self, rel_id, source_kind, source_keys, source_many, source_metaclass = self.find_metaclass(source_kind) target_metaclass = self.find_metaclass(target_kind) - key_map = dict(zip(source_keys, target_keys)) - - link1 = source_metaclass.add_link(target_metaclass, rel_id, key_map, - many=target_many, phrase=target_phrase, - conditional=target_conditional) + + source_link = target_metaclass.add_link(source_metaclass, rel_id, + many=source_many, + phrase=source_phrase, + conditional=source_conditional) + + target_link = source_metaclass.add_link(target_metaclass, rel_id, + many=target_many, + phrase=target_phrase, + conditional=target_conditional) - link2 = target_metaclass.add_link(source_metaclass, rel_id, key_map, - many=source_many, phrase=source_phrase, - conditional=source_conditional, reverse=True) + ass = Association(rel_id, + source_keys, source_link, + target_keys, target_link) - ass = Association(rel_id, link1, link2) self.associations.append(ass) return ass @@ -1068,6 +1108,7 @@ def define_unique_identifier(self, kind, name, *named_attributes): metaclass = self.find_metaclass(kind) metaclass.indices[name] = tuple(named_attributes) + metaclass.identifying_attributes |= set(named_attributes) def select_many(self, kind, where_clause=None): ''' diff --git a/xtuml/persist.py b/xtuml/persist.py index 6c64477..f8b301d 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -96,24 +96,23 @@ def serialize_association(ass): ''' Serialize an xtuml metamodel association. ''' - s1 = '%s %s (%s)' % (ass.link.cardinality, - ass.link.to_metaclass.kind, - ', '.join(ass.link.key_map.values())) + s1 = '%s %s (%s)' % (ass.source_link.cardinality, + ass.source_link.to_metaclass.kind, + ', '.join(ass.source_keys)) - if ass.link.phrase: - s1 += " PHRASE '%s'" % ass.link.phrase + if ass.source_link.phrase: + s1 += " PHRASE '%s'" % ass.source_link.phrase - s2 = '%s %s (%s)' % (ass.reversed_link.cardinality, - ass.reversed_link.to_metaclass.kind, - ', '.join(ass.link.key_map.keys())) + s2 = '%s %s (%s)' % (ass.target_link.cardinality, + ass.target_link.to_metaclass.kind, + ', '.join(ass.target_keys)) - if ass.reversed_link.phrase: - s2 += " PHRASE '%s'" % ass.reversed_link.phrase - + if ass.target_link.phrase: + s2 += " PHRASE '%s'" % ass.target_link.phrase return 'CREATE ROP REF_ID %s FROM %s TO %s;\n' % (ass.rel_id, - s2, - s1) + s1, + s2) def serialize_class(Cls): From 9fbcb99427b5ec1e1a04acab13432f2115b066fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 09:37:24 +0200 Subject: [PATCH 125/216] cosmetics --- xtuml/meta.py | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index e479ca1..abd608f 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -70,6 +70,7 @@ def __init__(self, from_instance, to_instance, rel_id, phrase): rel_id) MetaException.__init__(self, msg) + class UnknownLinkException(MetaException): ''' An exception that may be thrown when a link is not found. @@ -190,7 +191,8 @@ def fset(inst, ref_name, value): elif not hasattr(source_class.clazz, ref_key): setattr(source_class.clazz, ref_key, prop) - + + class Link(dict): ''' A link connects one metaclass to another in a single direction. @@ -251,32 +253,44 @@ def kind(self): ''' return self.to_metaclass.kind - def connect(self, inst1, inst2, check=True): - if inst1 not in self: - self[inst1] = set() + def connect(self, instance, another_instance, check=True): + ''' + Connect an *instance* to *another_instance*. + + Optionally, disable any cardinality *check* that would prevent the two + instances from being connected. + ''' + if instance not in self: + self[instance] = set() - if inst2 in self[inst1]: + if another_instance in self[instance]: return True - if self[inst1] and not self.many and check: + if self[instance] and not self.many and check: return False - self[inst1].add(inst2) + self[instance].add(another_instance) return True - def disconnect(self, inst1, inst2): - if inst1 not in self: + def disconnect(self, instance, another_instance): + ''' + Disconnect an *instance* from *another_instance* + ''' + if instance not in self: return False - if inst2 not in self[inst1]: + if another_instance not in self[instance]: return False - self[inst1].remove(inst2) + self[instance].remove(another_instance) return True - def navigate(self, inst): - if inst in self: - return self[inst] + def navigate(self, instance): + ''' + Navigate from *instance* across the link. + ''' + if instance in self: + return self[instance] else: return set() From d9bfa3d810624eaa6b234fe263c4fb58d88ac56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 09:43:46 +0200 Subject: [PATCH 126/216] cosmetics --- xtuml/meta.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index abd608f..84046c0 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -427,7 +427,7 @@ def __str__(self): return '%s(%s)' % (self.__class__.__name__, ', '.join(values)) -# Backwards compatabillity with older versions of pyxtuml +# Backwards compatibility with older versions of pyxtuml BaseObject = Class @@ -495,7 +495,7 @@ def add_link(self, metaclass, rel_id, phrase, conditional, many): def find_link(self, kind, rel_id, phrase=''): ''' - Find a link with a given *rel_id* and *phrase* that yeld instances of + Find a link with a given *rel_id* and *phrase* that yield instances of some *kind*. ''' if isinstance(rel_id, int): @@ -1150,7 +1150,7 @@ def select_one(self, kind, where_clause=None): metaclass = self.find_metaclass(kind) return metaclass.select_one(where_clause) - # Backwards compatabillity with older versions of pyxtuml + # Backwards compatibility with older versions of pyxtuml select_any = select_one def is_consistent(self): From cab692dd0ecd29bd25b0110e804fd2c5e2b49500 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 09:45:07 +0200 Subject: [PATCH 127/216] meta: do not attempt to associate new instances with referred to instances if no referential attributes are provided as arguments --- xtuml/meta.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xtuml/meta.py b/xtuml/meta.py index 84046c0..d025ea8 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -585,6 +585,9 @@ def new(self, *args, **kwargs): else: referential_attributes[name] = value + if not referential_attributes: + return inst + # batch relate referential attributes for link in self.links.values(): if set(link.key_map.values()) - set(referential_attributes.keys()): From 3f262f37227675a6f08b3316532c5097965b0cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 11:21:17 +0200 Subject: [PATCH 128/216] meta: remove cache, it is not evicted correctly --- xtuml/meta.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index d025ea8..38f26c2 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -404,7 +404,6 @@ def __setattr__(self, name, value): for attr, _ in self.__metaclass__.attributes: if attr.upper() == uname: self.__dict__[attr] = value - self.__metaclass__.cache.clear() return self.__dict__[name] = value @@ -447,7 +446,6 @@ class MetaClass(object): indices = None clazz = None storage = None - cache = None def __init__(self, kind, metamodel=None): self.metamodel = metamodel @@ -458,7 +456,6 @@ def __init__(self, kind, metamodel=None): self.indices = dict() self.links = dict() self.storage = list() - self.cache = dict() self.clazz = type(kind, (Class,), dict(__metaclass__=self)) def __call__(self, *args, **kwargs): @@ -559,7 +556,6 @@ def new(self, *args, **kwargs): ''' Create and return a new instance. ''' - self.cache.clear() inst = self.clazz() self.storage.append(inst) @@ -630,7 +626,6 @@ def delete(self, instance): ''' if instance in self.storage: self.storage.remove(instance) - self.cache.clear() else: raise DeleteException("Instance not found in the instance pool") @@ -675,11 +670,8 @@ def query(self, dictonary_of_values): Query the instance pool for instances with attributes that match a given *dictonary of values*. ''' - index = frozenset(list(dictonary_of_values.items())) - if index not in self.cache: - self.cache[index] = Query(self.storage, dictonary_of_values) - - return self.cache[index].execute() + q = Query(self.storage, dictonary_of_values) + return q.execute() class NavChain(object): From 1d6c0ca13d207311d5030e8f983224f9e81fbf0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 11:22:17 +0200 Subject: [PATCH 129/216] test: improve preconditions of test_relate --- tests/test_xtuml/test_relate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index 8051ac9..1fd3a6b 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -34,6 +34,7 @@ def test_relate(self): s_edt = self.m.new('S_EDT') s_dt = self.m.new('S_DT') pe_pe = self.m.new('PE_PE') + self.assertFalse(xtuml.navigate_one(s_dt).S_EDT[17]()) self.assertTrue(xtuml.relate(s_dt, pe_pe, 8001)) self.assertTrue(xtuml.relate(s_dt, s_edt, 17)) self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) From 0c52f69b77a7b0ebf2058b6763dfbb10e6ec0bf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 11:22:57 +0200 Subject: [PATCH 130/216] test: test that cached queries are evicted after relate/unrelate --- tests/test_xtuml/test_relate.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index 1fd3a6b..ff7d24e 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -38,7 +38,24 @@ def test_relate(self): self.assertTrue(xtuml.relate(s_dt, pe_pe, 8001)) self.assertTrue(xtuml.relate(s_dt, s_edt, 17)) self.assertEqual(s_edt, xtuml.navigate_one(s_dt).S_EDT[17]()) - + + def test_select_where_after_relate(self): + s_edt = self.m.new('S_EDT') + s_dt = self.m.new('S_DT') + pe_pe = self.m.new('PE_PE') + + self.assertFalse(self.m.select_any('S_DT', xtuml.where_eq(DT_ID=pe_pe.Element_ID))) + + self.assertTrue(xtuml.relate(s_dt, pe_pe, 8001)) + self.assertTrue(xtuml.relate(s_dt, s_edt, 17)) + + self.assertTrue(self.m.select_any('S_DT', xtuml.where_eq(DT_ID=pe_pe.Element_ID))) + + self.assertTrue(xtuml.unrelate(s_dt, pe_pe, 8001)) + self.assertTrue(xtuml.unrelate(s_dt, s_edt, 17)) + + self.assertFalse(self.m.select_any('S_DT', xtuml.where_eq(DT_ID=pe_pe.Element_ID))) + def test_relate_when_already_related(self): act_smt = self.m.new('ACT_SMT') act_blk1 = self.m.new('ACT_BLK') From 6df9b1ef1b5bed5766fecaa5c2a8f3020ffde39d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 11:23:42 +0200 Subject: [PATCH 131/216] cosmetics --- bridgepoint/prebuild.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index 8a5892b..478d912 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1414,11 +1414,11 @@ def accept_ParameterListNode(self, node, act_smt, v_val): def accept_ParameterNode(self, node): v_val = self.accept(node.expression) - return self.new('V_PAR', - Value_ID=v_val.Value_ID, - Invocation_Value_ID=v_val.Value_ID, - Name=node.name) + v_par = self.new('V_PAR', Name=node.name) + relate(v_val, v_par, 800) + return v_par + def accept_GeneratePortEventNode(self, node): port_filt = lambda sel: (sel.Name == node.port_name or one(sel).C_IR[4016].C_I[4012](where(Name=node.port_name))) From 5f4f0a70b1d35c66aaa099167b9d1d6e383f05fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 11:23:51 +0200 Subject: [PATCH 132/216] cosmetics --- bridgepoint/prebuild.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index 478d912..35b48e2 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1360,17 +1360,17 @@ def accept_PortInvocationNode(self, node, act_smt=None): Statement_ID=act_smt.Statement_ID, RequiredOp_Id=spr_ro.Id) - if spr_po: + elif spr_po: self.new('ACT_IOP', Statement_ID=act_smt.Statement_ID, ProvidedOp_Id=spr_po.Id) - if spr_rs: + elif spr_rs: self.new('ACT_SGN', Statement_ID=act_smt.Statement_ID, RequiredSig_Id=spr_rs.Id) - if spr_ps: + elif spr_ps: self.new('ACT_IOP', Statement_ID=act_smt.Statement_ID, ProvidedSig_Id=spr_ps.Id) From bcf682a16e64e2cedeff57aff18ed9445ef9c980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 11:37:14 +0200 Subject: [PATCH 133/216] load: allow integers to be persisted as GUIDs --- xtuml/load.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xtuml/load.py b/xtuml/load.py index 8843c5e..107f756 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -73,7 +73,10 @@ def deserialize_value(ty, value): raise ParsingException("Unable to convert '%s' to a boolean" % value) elif uty == 'INTEGER': - return int(value) + if '"' in value: + return uuid.UUID(value[1:-1]).int + else: + return int(value) elif uty == 'REAL': return float(value) From 4305df04b7fa07425dc5feb7b17f44f21e5e27e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 22:41:38 +0200 Subject: [PATCH 134/216] move batch relate operation from loader into the metamodel class --- xtuml/load.py | 5 +---- xtuml/meta.py | 4 ++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index 107f756..976d3b5 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -380,11 +380,8 @@ def build_metamodel(self, id_generator=None): m = xtuml.MetaModel(id_generator) self.populate(m) + m.batch_relate() - for ass in m.associations: - ass.batch_relate() - ass.formalize() - return m def t_comment(self, t): diff --git a/xtuml/meta.py b/xtuml/meta.py index 38f26c2..2a31a1b 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -1157,3 +1157,7 @@ def is_consistent(self): return xtuml.check_uniqueness_constraint(self) == 0 + def batch_relate(self): + for ass in self.associations: + ass.batch_relate() + ass.formalize() From 53759f89a426aa3252d9bd1a22724d71646c2d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Apr 2017 23:34:18 +0200 Subject: [PATCH 135/216] cosmetics --- xtuml/meta.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 2a31a1b..064a34d 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -81,7 +81,7 @@ def __init__(self, from_kind, to_kind, rel_id, phrase): else: msg = "%s->%s[%s]" % (from_kind, to_kind, repr(rel_id)) - MetaException.__init__(self, msg) + MetaException.__init__(self, 'Unknown link ' + msg) class MetaModelException(MetaException): @@ -94,6 +94,8 @@ class UnknownClassException(MetaModelException): ''' An exception that may be thrown when a metaclass is not found. ''' + def __init__(self, kind): + MetaModelException.__init__(self, 'Unknown class %s' % kind) def _is_null(instance, name): From 52ad1fd0802f2715bc0f0474d28d064e5f38372a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 25 Apr 2017 07:01:56 +0200 Subject: [PATCH 136/216] ooaofooa schema gen: unrelate R_REL from R_OIR during filtering --- examples/gen_ooaofooa_schema.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/gen_ooaofooa_schema.py b/examples/gen_ooaofooa_schema.py index 89b2c45..62832cf 100644 --- a/examples/gen_ooaofooa_schema.py +++ b/examples/gen_ooaofooa_schema.py @@ -74,6 +74,9 @@ def main(): logger.info('Filtering %s' % o_obj.Key_Lett) for r_rel in many(o_obj).R_OIR[201].R_REL[201](): logger.info('Filtering R%d' % r_rel.Numb) + for r_oir in many(r_rel).R_OIR[201](): + xtuml.unrelate(r_rel, r_oir, 201) + xtuml.delete(r_rel) xtuml.delete(o_obj) From f087d88f3050c9f219b47217d99bdb642b756468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 25 Apr 2017 08:27:13 +0200 Subject: [PATCH 137/216] formalize associations after all links have been connected --- xtuml/meta.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xtuml/meta.py b/xtuml/meta.py index 064a34d..a041890 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -1162,4 +1162,7 @@ def is_consistent(self): def batch_relate(self): for ass in self.associations: ass.batch_relate() + + for ass in self.associations: ass.formalize() + From 44b0640306275d1b08052270977036bf0ed47d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 25 Apr 2017 08:28:37 +0200 Subject: [PATCH 138/216] meta: consider all links when computing referential attributes --- xtuml/meta.py | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index a041890..ec4c18e 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -176,24 +176,26 @@ def formalize(self): source_class.referential_attributes |= set(self.source_keys) target_class.identifying_attributes |= set(self.target_keys) - def fget(inst, ref_name): - inst = next(iter(self.target_link.navigate(inst)), None) - return getattr(inst, ref_name, None) + def fget(inst, ref_name, alt_prop): + other_inst = self.target_link.navigate_one(inst) + if other_inst is None and alt_prop: + return alt_prop.fget(inst) - def fset(inst, ref_name, value): - inst = next(iter(self.target_link.navigate(inst)), None) - return setattr(inst, ref_name, value) + return getattr(other_inst, ref_name, None) + + def fset(inst, ref_name, value, alt_prop): + other_inst = self.target_link.navigate_one(inst) + if other_inst is None and alt_prop: + return alt_prop.fset(inst, value) + + return setattr(other_inst, ref_name, value) for ref_key, primary_key in zip(self.source_keys, self.target_keys): - prop = property(partial(fget, ref_name=primary_key), - partial(fset, ref_name=primary_key)) + prop = getattr(source_class.clazz, ref_key, None) + prop = property(partial(fget, ref_name=primary_key, alt_prop=prop), + partial(fset, ref_name=primary_key, alt_prop=prop)) + setattr(source_class.clazz, ref_key, prop) - if not self.target_link.conditional: - setattr(source_class.clazz, ref_key, prop) - - elif not hasattr(source_class.clazz, ref_key): - setattr(source_class.clazz, ref_key, prop) - class Link(dict): ''' @@ -296,6 +298,12 @@ def navigate(self, instance): else: return set() + def navigate_one(self, instance): + ''' + Navigate from *instance* across the link. + ''' + return next(iter(self.navigate(instance)), None) + def query(self, dictonary_of_values): ''' Query the link for instances with attributes that match a given From fe5568d4110a05a2b5e840ab10fd3a4b72087dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 25 Apr 2017 08:29:44 +0200 Subject: [PATCH 139/216] meta: remove referential values from instances once links are formalized --- xtuml/meta.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index ec4c18e..30a49d2 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -1173,4 +1173,8 @@ def batch_relate(self): for ass in self.associations: ass.formalize() - + + for inst in self.instances: + for attr in inst.__metaclass__.referential_attributes: + delattr(inst, attr) + From 5b1aa2b5d3826a0db61f3d5fed10382146a3cd09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 29 Apr 2017 13:32:03 +0200 Subject: [PATCH 140/216] load: populate links at the same time as everything else --- xtuml/load.py | 15 +++++++++++++-- xtuml/meta.py | 10 ---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index 976d3b5..c9ede36 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -364,6 +364,17 @@ def populate_instances(self, metamodel): self._populate_instance_with_positional_arguments(metamodel, stmt) + def populate_links(self, metamodel): + for ass in metamodel.associations: + ass.batch_relate() + + for ass in metamodel.associations: + ass.formalize() + + for inst in metamodel.instances: + for attr in inst.__metaclass__.referential_attributes: + delattr(inst, attr) + def populate(self, metamodel): ''' Populate a *metamodel* with entities previously encountered from input. @@ -372,7 +383,8 @@ def populate(self, metamodel): self.populate_unique_identifiers(metamodel) self.populate_instances(metamodel) self.populate_associations(metamodel) - + self.populate_links(metamodel) + def build_metamodel(self, id_generator=None): ''' Build and return a *xtuml.MetaModel* containing previously loaded input. @@ -380,7 +392,6 @@ def build_metamodel(self, id_generator=None): m = xtuml.MetaModel(id_generator) self.populate(m) - m.batch_relate() return m diff --git a/xtuml/meta.py b/xtuml/meta.py index 30a49d2..cfbf37b 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -1167,14 +1167,4 @@ def is_consistent(self): return xtuml.check_uniqueness_constraint(self) == 0 - def batch_relate(self): - for ass in self.associations: - ass.batch_relate() - - for ass in self.associations: - ass.formalize() - - for inst in self.instances: - for attr in inst.__metaclass__.referential_attributes: - delattr(inst, attr) From a5702abfaa624dd97c656305a181295b6834431a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 29 Apr 2017 13:33:43 +0200 Subject: [PATCH 141/216] cosmetics --- xtuml/load.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index c9ede36..7141c5d 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -261,17 +261,17 @@ def populate_associations(self, metamodel): if not isinstance(stmt, CreateAssociationStmt): continue - ass = metamodel.define_association(stmt.rel_id, - stmt.source_kind, - stmt.source_keys, - 'M' in stmt.source_cardinality, - 'C' in stmt.source_cardinality, - stmt.source_phrase, - stmt.target_kind, - stmt.target_keys, - 'M' in stmt.target_cardinality, - 'C' in stmt.target_cardinality, - stmt.target_phrase) + metamodel.define_association(stmt.rel_id, + stmt.source_kind, + stmt.source_keys, + 'M' in stmt.source_cardinality, + 'C' in stmt.source_cardinality, + stmt.source_phrase, + stmt.target_kind, + stmt.target_keys, + 'M' in stmt.target_cardinality, + 'C' in stmt.target_cardinality, + stmt.target_phrase) def populate_unique_identifiers(self, metamodel): ''' From 2ec851cdb0b32678835f016838777bed26f523bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 30 Apr 2017 14:06:38 +0200 Subject: [PATCH 142/216] meta: minor performance tweaks --- xtuml/meta.py | 66 +++++++-------------------------------------------- 1 file changed, 8 insertions(+), 58 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index cfbf37b..1750d3f 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -303,61 +303,6 @@ def navigate_one(self, instance): Navigate from *instance* across the link. ''' return next(iter(self.navigate(instance)), None) - - def query(self, dictonary_of_values): - ''' - Query the link for instances with attributes that match a given - *dictonary of values*. - ''' - q = Query(self, dictonary_of_values) - return q.execute() - - -class Query(object): - ''' - A *Query* retrive instances from a metaclass by matching instance - attributes against a dictonary of values provided upon initialisation. - ''' - storage = None - result = None - evaluation = None - - def __init__(self, storage, kwargs): - self.result = collections.deque() - self.items = collections.deque(kwargs.items()) - self.storage = storage - self.evaluation = self.evaluate() - - def evaluate(self): - ''' - Evaluate the query by iterating all instances in the metaclass. - - **Note**: if the instance population is modified during evaluation, - an exception is thrown. - ''' - for inst in iter(self.storage): - for name, value in iter(self.items): - if getattr(inst, name) != value or _is_null(inst, name): - break - else: - self.result.append(inst) - yield inst - - self.evaluation = None - - def execute(self): - ''' - Execute the query. - - **Note**: Each instance is evaluated for inclusion only once, even - if the query is executed multiple times. To re-evaluate the query, - create a new one. - ''' - for inst in self.result: - yield inst - - while self.evaluation: - yield next(self.evaluation) class QuerySet(xtuml.OrderedSet): @@ -680,10 +625,15 @@ def query(self, dictonary_of_values): Query the instance pool for instances with attributes that match a given *dictonary of values*. ''' - q = Query(self.storage, dictonary_of_values) - return q.execute() + items = collections.deque(dictonary_of_values.items()) + for inst in iter(self.storage): + for name, value in iter(items): + if getattr(inst, name) != value or _is_null(inst, name): + break + else: + yield inst - + class NavChain(object): ''' A navigation chain initializes a navigation from one or more instances. From e4a6abb91121661d7ffd70f0ca4f482f9eaba449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 1 May 2017 05:46:11 +0200 Subject: [PATCH 143/216] meta: allow queries with null values During batch relate however, links with null values are not connected --- xtuml/meta.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 1750d3f..738759b 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -156,12 +156,22 @@ def is_reflexive(self): def batch_relate(self): source_class = self.source_link.to_metaclass target_class = self.target_link.to_metaclass + key_map = tuple(zip(self.source_keys, self.target_keys)) for inst1 in source_class.storage: kwargs = dict() - for ref_key, primary_key in zip(self.source_keys, self.target_keys): + skip_instance = False + + for ref_key, primary_key in key_map: + if _is_null(inst1, ref_key): + skip_instance = True + break + kwargs[primary_key] = getattr(inst1, ref_key) - + + if skip_instance: + continue + for inst2 in target_class.query(kwargs): self.source_link.connect(inst2, inst1, check=False) self.target_link.connect(inst1, inst2, check=False) @@ -628,7 +638,7 @@ def query(self, dictonary_of_values): items = collections.deque(dictonary_of_values.items()) for inst in iter(self.storage): for name, value in iter(items): - if getattr(inst, name) != value or _is_null(inst, name): + if getattr(inst, name) != value: break else: yield inst From 878368c37f653d4306cb3c3b2c7790380152392d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=83=C2=B6rnblom?= Date: Mon, 1 May 2017 17:00:52 +0200 Subject: [PATCH 144/216] assume instances are unique based on association keys during batch relate --- xtuml/load.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++++--- xtuml/meta.py | 6 ++-- 2 files changed, 75 insertions(+), 7 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index 7141c5d..b94670b 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -94,6 +94,37 @@ def deserialize_value(ty, value): raise ParsingException("Unknown type named '%s'" % ty) +def _is_null(instance, name): + ''' + Determine if an attribute of an *instance* with a specific *name* + is null. + ''' + value = getattr(instance, name) + if value: + return False + + elif value is None: + return True + + name = name.upper() + for attr_name, attr_ty in instance.__metaclass__.attributes: + if attr_name.upper() != name: + continue + + attr_ty = attr_ty.upper() + if attr_ty == 'UNIQUE_ID': + # UUID(int=0) is reserved for null + return value == 0 + + elif attr_ty == 'STRING': + # empty string is reserved for null + return len(value) == 0 + + else: + #null-values for integer, boolean and real are not supported + return False + + class ParsingException(Exception): ''' An exception that may be thrown while loading (and parsing) a metamodel. @@ -364,10 +395,47 @@ def populate_instances(self, metamodel): self._populate_instance_with_positional_arguments(metamodel, stmt) - def populate_links(self, metamodel): + def populate_connections(self, metamodel): + def compute_keys(inst): + for link in inst.__metaclass__.links.values(): + kwargs = dict() + for attr in link.key_map.values(): + kwargs[attr] = getattr(inst, attr) + + yield frozenset(tuple(kwargs.items())) + + lookup_table = dict() + for metaclass in metamodel.metaclasses.values(): + lookup_table[metaclass] = dict() + for inst in metaclass.storage: + for key in compute_keys(inst): + lookup_table[metaclass][key] = inst + for ass in metamodel.associations: - ass.batch_relate() - + source_class = ass.source_link.to_metaclass + target_class = ass.target_link.to_metaclass + key_map = tuple(zip(ass.source_keys, ass.target_keys)) + + for inst in source_class.storage: + kwargs = dict() + skip_instance = False + + for ref_key, primary_key in key_map: + if _is_null(inst, ref_key): + skip_instance = True + break + + kwargs[primary_key] = getattr(inst, ref_key) + + if skip_instance: + continue + + key = frozenset(tuple(kwargs.items())) + if key in lookup_table[target_class]: + other_inst = lookup_table[target_class][key] + ass.source_link.connect(other_inst, inst, check=False) + ass.target_link.connect(inst, other_inst, check=False) + for ass in metamodel.associations: ass.formalize() @@ -383,7 +451,7 @@ def populate(self, metamodel): self.populate_unique_identifiers(metamodel) self.populate_instances(metamodel) self.populate_associations(metamodel) - self.populate_links(metamodel) + self.populate_connections(metamodel) def build_metamodel(self, id_generator=None): ''' diff --git a/xtuml/meta.py b/xtuml/meta.py index 738759b..55c3f69 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -180,9 +180,6 @@ def formalize(self): source_class = self.source_link.to_metaclass target_class = self.target_link.to_metaclass - self.source_link.key_map = dict(zip(self.source_keys, self.target_keys)) - self.target_link.key_map = dict(zip(self.target_keys, self.source_keys)) - source_class.referential_attributes |= set(self.source_keys) target_class.identifying_attributes |= set(self.target_keys) @@ -1070,6 +1067,9 @@ def define_association(self, rel_id, source_kind, source_keys, source_many, source_keys, source_link, target_keys, target_link) + source_link.key_map = dict(zip(source_keys, target_keys)) + target_link.key_map = dict(zip(target_keys, source_keys)) + self.associations.append(ass) return ass From 1ded4dc43f69c41e0e726b4871e30bfd6962dfee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 1 May 2017 18:30:08 +0200 Subject: [PATCH 145/216] meta: make referential attributes case insensitive --- xtuml/meta.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xtuml/meta.py b/xtuml/meta.py index 55c3f69..88337dd 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -358,6 +358,8 @@ def __getattr__(self, name): if attr in self.__dict__: return self.__dict__[attr] + + return getattr(self, attr) return object.__getattribute__(self, name) From 753c1619e30387bfe14b4668385a5551f199c2d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 2 May 2017 21:34:11 +0200 Subject: [PATCH 146/216] load: support multiple batch relates on the same meta model instance --- xtuml/load.py | 119 +++++++++++++++++++------------------------------- xtuml/meta.py | 34 ++++++++++++++- 2 files changed, 76 insertions(+), 77 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index b94670b..098cfea 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -93,38 +93,7 @@ def deserialize_value(ty, value): else: raise ParsingException("Unknown type named '%s'" % ty) - -def _is_null(instance, name): - ''' - Determine if an attribute of an *instance* with a specific *name* - is null. - ''' - value = getattr(instance, name) - if value: - return False - elif value is None: - return True - - name = name.upper() - for attr_name, attr_ty in instance.__metaclass__.attributes: - if attr_name.upper() != name: - continue - - attr_ty = attr_ty.upper() - if attr_ty == 'UNIQUE_ID': - # UUID(int=0) is reserved for null - return value == 0 - - elif attr_ty == 'STRING': - # empty string is reserved for null - return len(value) == 0 - - else: - #null-values for integer, boolean and real are not supported - return False - - class ParsingException(Exception): ''' An exception that may be thrown while loading (and parsing) a metamodel. @@ -292,7 +261,7 @@ def populate_associations(self, metamodel): if not isinstance(stmt, CreateAssociationStmt): continue - metamodel.define_association(stmt.rel_id, + ass = metamodel.define_association(stmt.rel_id, stmt.source_kind, stmt.source_keys, 'M' in stmt.source_cardinality, @@ -303,6 +272,7 @@ def populate_associations(self, metamodel): 'M' in stmt.target_cardinality, 'C' in stmt.target_cardinality, stmt.target_phrase) + ass.formalize() def populate_unique_identifiers(self, metamodel): ''' @@ -347,9 +317,11 @@ def _populate_instance_with_positional_arguments(metamodel, stmt): inst = metamodel.new(stmt.kind) for attr, value in zip(metaclass.attributes, stmt.values): name, ty = attr - value = deserialize_value(ty, value) - setattr(inst, name, value) + value = deserialize_value(ty, value) + inst.__dict__[name] = value + return inst + @staticmethod def _populate_instance_with_named_arguments(metamodel, stmt): ''' @@ -378,8 +350,10 @@ def _populate_instance_with_named_arguments(metamodel, stmt): else: value = None - setattr(inst, name, value) + inst.__dict__[name] = value + return inst + def populate_instances(self, metamodel): ''' Populate a *metamodel* with instances previously encountered from @@ -390,67 +364,62 @@ def populate_instances(self, metamodel): continue if stmt.names: - self._populate_instance_with_named_arguments(metamodel, stmt) + fn = self._populate_instance_with_named_arguments else: - self._populate_instance_with_positional_arguments(metamodel, - stmt) - + fn = self._populate_instance_with_positional_arguments + + inst = fn(metamodel, stmt) + def populate_connections(self, metamodel): - def compute_keys(inst): - for link in inst.__metaclass__.links.values(): - kwargs = dict() - for attr in link.key_map.values(): - kwargs[attr] = getattr(inst, attr) - - yield frozenset(tuple(kwargs.items())) - - lookup_table = dict() - for metaclass in metamodel.metaclasses.values(): - lookup_table[metaclass] = dict() - for inst in metaclass.storage: - for key in compute_keys(inst): - lookup_table[metaclass][key] = inst - + ''' + Populate links in a *metamodel* with connections between them. + ''' + storage = dict() for ass in metamodel.associations: source_class = ass.source_link.to_metaclass target_class = ass.target_link.to_metaclass - key_map = tuple(zip(ass.source_keys, ass.target_keys)) - - for inst in source_class.storage: - kwargs = dict() - skip_instance = False - - for ref_key, primary_key in key_map: - if _is_null(inst, ref_key): - skip_instance = True - break + + if target_class not in storage: + storage[target_class] = dict() + + link_key = frozenset(ass.source_link.key_map.values()) + if link_key not in storage[target_class]: + storage[target_class][link_key] = dict() + for other_inst in target_class.storage: + inst_key = ass.source_link.compute_index_key(other_inst) + if inst_key is None: + continue - kwargs[primary_key] = getattr(inst, ref_key) + if inst_key not in storage[target_class][link_key]: + storage[target_class][link_key][inst_key] = set() + + storage[target_class][link_key][inst_key].add(other_inst) + + for inst in source_class.storage: + inst_key = ass.source_link.compute_lookup_key(inst) + if inst_key is None: + continue - if skip_instance: + if inst_key not in storage[target_class][link_key]: continue - key = frozenset(tuple(kwargs.items())) - if key in lookup_table[target_class]: - other_inst = lookup_table[target_class][key] + for other_inst in storage[target_class][link_key][inst_key]: ass.source_link.connect(other_inst, inst, check=False) ass.target_link.connect(inst, other_inst, check=False) - - for ass in metamodel.associations: - ass.formalize() for inst in metamodel.instances: for attr in inst.__metaclass__.referential_attributes: - delattr(inst, attr) - + if attr in inst.__dict__: + delattr(inst, attr) + def populate(self, metamodel): ''' Populate a *metamodel* with entities previously encountered from input. ''' self.populate_classes(metamodel) self.populate_unique_identifiers(metamodel) - self.populate_instances(metamodel) self.populate_associations(metamodel) + self.populate_instances(metamodel) self.populate_connections(metamodel) def build_metamodel(self, id_generator=None): diff --git a/xtuml/meta.py b/xtuml/meta.py index 88337dd..7146c3e 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -103,7 +103,11 @@ def _is_null(instance, name): Determine if an attribute of an *instance* with a specific *name* is null. ''' - value = getattr(instance, name) + if name in instance.__dict__: + value = instance.__dict__[name] + else: + value = getattr(instance, name) + if value: return False @@ -311,7 +315,33 @@ def navigate_one(self, instance): ''' return next(iter(self.navigate(instance)), None) - + def compute_lookup_key(self, from_instance): + kwargs = dict() + for attr, other_attr in self.key_map.items(): + if _is_null(from_instance, attr): + return None + + if attr in from_instance.__dict__: + kwargs[other_attr] = from_instance.__dict__[attr] + else: + kwargs[other_attr] = getattr(from_instance, attr) + + return frozenset(tuple(kwargs.items())) + + def compute_index_key(self, to_instance): + kwargs = dict() + for attr in self.key_map.values(): + if _is_null(to_instance, attr): + return None + + if attr in to_instance.__dict__: + kwargs[attr] = to_instance.__dict__[attr] + else: + kwargs[attr] = getattr(to_instance, attr) + + return frozenset(tuple(kwargs.items())) + + class QuerySet(xtuml.OrderedSet): ''' An ordered set which holds instances that match queries. From 7bc1c16ed087519f1020ed5c4442562645a73b86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 4 May 2017 08:29:17 +0200 Subject: [PATCH 147/216] preserve order of instances in sets i.e. the order in which they are loaded from disk. --- xtuml/load.py | 2 +- xtuml/meta.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index 098cfea..4010d3a 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -391,7 +391,7 @@ def populate_connections(self, metamodel): continue if inst_key not in storage[target_class][link_key]: - storage[target_class][link_key][inst_key] = set() + storage[target_class][link_key][inst_key] = xtuml.OrderedSet() storage[target_class][link_key][inst_key].add(other_inst) diff --git a/xtuml/meta.py b/xtuml/meta.py index 7146c3e..93f3e11 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -276,7 +276,7 @@ def connect(self, instance, another_instance, check=True): instances from being connected. ''' if instance not in self: - self[instance] = set() + self[instance] = xtuml.OrderedSet() if another_instance in self[instance]: return True From 597c60fc6c43523ba2d526866255804dfa7750a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 May 2017 20:57:23 +0200 Subject: [PATCH 148/216] meta: properly assign referential attributes using the class property --- xtuml/meta.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 93f3e11..b6b73ce 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -381,25 +381,28 @@ def __sub__(self, other): def __getattr__(self, name): uname = name.upper() - for attr, _ in self.__metaclass__.attributes: if attr.upper() != uname : continue if attr in self.__dict__: return self.__dict__[attr] - - return getattr(self, attr) + else: + return object.__getattribute__(self, attr) return object.__getattribute__(self, name) def __setattr__(self, name, value): uname = name.upper() for attr, _ in self.__metaclass__.attributes: - if attr.upper() == uname: - self.__dict__[attr] = value - return + if attr.upper() != uname : + continue + if attr in self.__dict__: + self.__dict__[attr] = value + else: + return object.__setattr__(self, attr, value) + self.__dict__[name] = value def __delattr__(self, name): From 9dec47795d63ed751c0f24ee6b8458a88bad9494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 15 May 2017 20:58:42 +0200 Subject: [PATCH 149/216] meta: raise an exception when attempting to explicitly write a referential attribute --- xtuml/meta.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index b6b73ce..52a4432 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -193,18 +193,24 @@ def fget(inst, ref_name, alt_prop): return alt_prop.fget(inst) return getattr(other_inst, ref_name, None) - - def fset(inst, ref_name, value, alt_prop): + + def fset(inst, value, name, ref_name, alt_prop): + kind = inst.__metaclass__.kind + raise MetaException('%s.%s is a referential attribute '\ + 'and cannot be assigned directly'% (kind, name)) + other_inst = self.target_link.navigate_one(inst) if other_inst is None and alt_prop: return alt_prop.fset(inst, value) - - return setattr(other_inst, ref_name, value) + + elif other_inst: + return setattr(other_inst, ref_name, value) + for ref_key, primary_key in zip(self.source_keys, self.target_keys): prop = getattr(source_class.clazz, ref_key, None) prop = property(partial(fget, ref_name=primary_key, alt_prop=prop), - partial(fset, ref_name=primary_key, alt_prop=prop)) + partial(fset, name=ref_key, ref_name=primary_key, alt_prop=prop)) setattr(source_class.clazz, ref_key, prop) From 68fecd9e2f719b4e2a3402f2532a83b3b4a4833e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 16 May 2017 19:19:10 +0200 Subject: [PATCH 150/216] load: track positional information of SQL statements --- xtuml/load.py | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index 4010d3a..b9da213 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -70,7 +70,7 @@ def deserialize_value(ty, value): elif value.upper() == 'TRUE': return True else: - raise ParsingException("Unable to convert '%s' to a boolean" % value) + return None elif uty == 'INTEGER': if '"' in value: @@ -89,9 +89,6 @@ def deserialize_value(ty, value): return uuid.UUID(value[1:-1]).int else: return int(value) - - else: - raise ParsingException("Unknown type named '%s'" % ty) class ParsingException(Exception): @@ -101,7 +98,13 @@ class ParsingException(Exception): pass -class CreateInstanceStmt(object): +class Stmt(object): + offset = None + lineno = None + filename = None + + +class CreateInstanceStmt(Stmt): def __init__(self, kind, values, names): self.kind = kind @@ -109,14 +112,14 @@ def __init__(self, kind, values, names): self.names = names -class CreateClassStmt(object): +class CreateClassStmt(Stmt): def __init__(self, kind, attributes): self.kind = kind self.attributes = attributes -class CreateAssociationStmt(object): +class CreateAssociationStmt(Stmt): def __init__(self, rel_id, source_kind, source_cardinality, source_keys, source_phrase, target_kind, target_cardinality, target_keys, target_phrase): @@ -131,7 +134,7 @@ def __init__(self, rel_id, source_kind, source_cardinality, source_keys, self.target_phrase = target_phrase -class CreateUniqueStmt(object): +class CreateUniqueStmt(Stmt): def __init__(self, kind, name, attributes): self.kind = kind @@ -227,7 +230,7 @@ def input(self, data, name=''): lextab="xtuml.__xtuml_lextab") lexer.filename = name logger.debug('parsing %s' % name) - s = self.parser.parse(lexer=lexer, input=data) + s = self.parser.parse(lexer=lexer, input=data, tracking=1) self.statements.extend(s) def filename_input(self, filename): @@ -317,8 +320,15 @@ def _populate_instance_with_positional_arguments(metamodel, stmt): inst = metamodel.new(stmt.kind) for attr, value in zip(metaclass.attributes, stmt.values): name, ty = attr - value = deserialize_value(ty, value) - inst.__dict__[name] = value + py_value = deserialize_value(ty, value) + if py_value is None: + raise ParsingException("%s:%d:unable to deserialize "\ + "%s to a %s" % (stmt.filename, + stmt.lineno, + value, + ty)) + + inst.__dict__[name] = py_value return inst @@ -347,6 +357,12 @@ def _populate_instance_with_named_arguments(metamodel, stmt): if uname in inst_unames: idx = inst_unames.index(uname) value = deserialize_value(ty, stmt.values[idx]) + if value is None: + raise ParsingException("%s:%d:unable to deserialize "\ + "%s to a %s" % (stmt.filename, + stmt.lineno, + value, + ty)) else: value = None @@ -535,6 +551,9 @@ def p_statement(self, p): | create_index_statement SEMICOLON ''' p[0] = p[1] + p[0].offset = p.lexpos(1) + p[0].lineno = p.lineno(1) + p[0].filename = p.lexer.filename def p_create_table_statement(self, p): '''create_table_statement : CREATE TABLE identifier LPAREN attribute_sequence RPAREN''' From 525b40a33fe46f35433d1cbe0e9c8a9a46f3a03c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 16 May 2017 19:24:07 +0200 Subject: [PATCH 151/216] load: show positional information of INSERT statements with schema mismatch --- xtuml/load.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index b9da213..21b0058 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -314,8 +314,7 @@ def _populate_instance_with_positional_arguments(metamodel, stmt): metaclass = metamodel.find_metaclass(stmt.kind) if len(metaclass.attributes) != len(stmt.values): - logger.warn('schema mismatch while loading an instance of %s', - stmt.kind) + logger.warn('%s:%d:schema mismatch' % (stmt.filename, stmt.lineno)) inst = metamodel.new(stmt.kind) for attr, value in zip(metaclass.attributes, stmt.values): @@ -348,8 +347,7 @@ def _populate_instance_with_named_arguments(metamodel, stmt): inst_unames = [name.upper() for name in stmt.names] if set(inst_unames) - set(schema_unames): - logger.warn('schema mismatch while loading an instance of %s', - stmt.kind) + logger.warn('%s:%d:schema mismatch' % (stmt.filename, stmt.lineno)) inst = metamodel.new(stmt.kind) for name, ty in metaclass.attributes: From 63da81d19f844407512ac79e05b831030de24d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 17 May 2017 00:05:22 +0200 Subject: [PATCH 152/216] cosmetics --- bridgepoint/ooaofooa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 3b6e66f..89aad6f 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3322,7 +3322,7 @@ def mk_simple_association(m, inst): source_phrase=source_phrase, target_phrase=target_phrase, source_many=r_form.Mult, - target_many=r_part.Mult,) + target_many=r_part.Mult) def mk_linked_association(m, inst): From 7c2a1c551702a551b1491f93c619590b8c239095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 19 May 2017 18:46:37 +0200 Subject: [PATCH 153/216] oal ast: convert phrases with null values to empty string --- bridgepoint/oal.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bridgepoint/oal.py b/bridgepoint/oal.py index 7c3a42e..4ee9811 100644 --- a/bridgepoint/oal.py +++ b/bridgepoint/oal.py @@ -408,7 +408,7 @@ def __init__(self, from_variable_name, to_variable_name, rel_id, phrase): self.from_variable_name = from_variable_name self.to_variable_name = to_variable_name self.rel_id = rel_id - self.phrase = phrase + self.phrase = phrase or '' class RelateUsingNode(Node): @@ -423,7 +423,7 @@ def __init__(self, from_variable_name, to_variable_name, rel_id, phrase, using_v self.to_variable_name = to_variable_name self.using_variable_name = using_variable_name self.rel_id = rel_id - self.phrase = phrase + self.phrase = phrase or '' class UnrelateNode(Node): @@ -436,7 +436,7 @@ def __init__(self, from_variable_name, to_variable_name, rel_id, phrase): self.from_variable_name = from_variable_name self.to_variable_name = to_variable_name self.rel_id = rel_id - self.phrase = phrase + self.phrase = phrase or '' class UnrelateUsingNode(Node): @@ -451,7 +451,7 @@ def __init__(self, from_variable_name, to_variable_name, rel_id, phrase, using_v self.to_variable_name = to_variable_name self.using_variable_name = using_variable_name self.rel_id = rel_id - self.phrase = phrase + self.phrase = phrase or '' class SelectRelatedNode(Node): @@ -514,7 +514,7 @@ class NavigationStepNode(Node): def __init__(self, key_letter, rel_id, phrase): self.key_letter = key_letter self.rel_id = rel_id - self.phrase = phrase + self.phrase = phrase or '' class SelectFromNode(Node): From c52f56a3ed03a391b965d66a76913c25b9ff7594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 19 May 2017 19:42:24 +0200 Subject: [PATCH 154/216] test: expect empty relationship phrases to evaluate to false --- tests/test_bridgepoint/test_relation.py | 8 ++++---- tests/test_bridgepoint/test_select.py | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_bridgepoint/test_relation.py b/tests/test_bridgepoint/test_relation.py index b28a197..ca2f3b3 100644 --- a/tests/test_bridgepoint/test_relation.py +++ b/tests/test_bridgepoint/test_relation.py @@ -83,7 +83,7 @@ def test_relate(self): relate a to b across R2; ''' act_rel = self.metamodel.select_one('ACT_REL') - self.assertIsNone(act_rel.relationship_phrase) + self.assertFalse(act_rel.relationship_phrase) act_smt = one(act_rel).ACT_SMT[603]() self.assertIsNotNone(act_smt) @@ -128,7 +128,7 @@ def test_relate_using(self): relate a to b across R2 using c; ''' act_rel = self.metamodel.select_one('ACT_RU') - self.assertIsNone(act_rel.relationship_phrase) + self.assertFalse(act_rel.relationship_phrase) act_smt = one(act_rel).ACT_SMT[603]() self.assertIsNotNone(act_smt) @@ -180,7 +180,7 @@ def test_unrelate(self): unrelate a from b across R2; ''' act_unr = self.metamodel.select_one('ACT_UNR') - self.assertIsNone(act_unr.relationship_phrase) + self.assertFalse(act_unr.relationship_phrase) act_smt = one(act_unr).ACT_SMT[603]() self.assertIsNotNone(act_smt) @@ -227,7 +227,7 @@ def test_unrelate_using(self): unrelate a from b across R2 using c; ''' act_unr = self.metamodel.select_one('ACT_URU') - self.assertIsNone(act_unr.relationship_phrase) + self.assertFalse(act_unr.relationship_phrase) act_smt = one(act_unr).ACT_SMT[603]() self.assertIsNotNone(act_smt) diff --git a/tests/test_bridgepoint/test_select.py b/tests/test_bridgepoint/test_select.py index c7cb04e..a121fca 100644 --- a/tests/test_bridgepoint/test_select.py +++ b/tests/test_bridgepoint/test_select.py @@ -140,7 +140,7 @@ def test_select_related_by(self): act_lnk = one(act_sr).ACT_LNK[637]() self.assertIsNotNone(act_lnk) - self.assertIsNone(act_lnk.Rel_Phrase) + self.assertFalse(act_lnk.Rel_Phrase) o_obj = one(act_lnk).O_OBJ[678]() self.assertEqual(o_obj.Key_Lett, 'A') @@ -150,7 +150,7 @@ def test_select_related_by(self): act_lnk = one(act_lnk).ACT_LNK[604, 'succeeds']() self.assertIsNotNone(act_lnk) - self.assertIsNone(act_lnk.Rel_Phrase) + self.assertFalse(act_lnk.Rel_Phrase) o_obj = one(act_lnk).O_OBJ[678]() self.assertEqual(o_obj.Key_Lett, 'B') @@ -201,7 +201,7 @@ def test_select_related_by_where(self): act_lnk = one(act_lnk).ACT_LNK[604, 'succeeds']() self.assertIsNotNone(act_lnk) - self.assertIsNone(act_lnk.Rel_Phrase) + self.assertFalse(act_lnk.Rel_Phrase) o_obj = one(act_lnk).O_OBJ[678]() self.assertEqual(o_obj.Key_Lett, 'B') From 23c476dbc24d06e4fa00e2cea89458ef172646a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 19 May 2017 23:26:27 +0200 Subject: [PATCH 155/216] bridgepoint: add experimental oal interpreter --- bridgepoint/interpret.py | 573 +++++++++++++++++++++++++++++++++++++++ bridgepoint/ooaofooa.py | 134 ++++++++- 2 files changed, 700 insertions(+), 7 deletions(-) create mode 100644 bridgepoint/interpret.py diff --git a/bridgepoint/interpret.py b/bridgepoint/interpret.py new file mode 100644 index 0000000..2bedcbe --- /dev/null +++ b/bridgepoint/interpret.py @@ -0,0 +1,573 @@ +#!/usr/bin/env python +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + +import sys +import logging +import optparse +import functools + +import oal +import ooaofooa +import xtuml + +from functools import partial + + +class SymtabException(Exception): + pass + + +class Block(dict): + pass + + +class Scope(list): + + def __init__(self): + self.append(Block()) + + @property + def symbols(self): + return_symbols = dict() + for d in self: + return_symbols.update(d) + + return return_symbols.items() + + +class SymbolTable(object): + domain = None + + def __init__(self, domain): + self.domain = domain + self._scopes = list() + + @property + def scope_head(self): + if not len(self._scopes): + raise SymtabException('Out of scope') + + return self._scopes[-1] + + def enter_scope(self): + scope = Scope() + self._scopes.append(scope) + + def leave_scope(self): + if not len(self._scopes): + raise SymtabException('Out of scope') + + d = dict() + for block in self._scopes.pop(): + d.update(block) + return d + + def enter_block(self): + block = Block() + self.scope_head.append(block) + + def leave_block(self): + if not len(self.scope_head): + raise SymtabException('Out of block') + + block = self.scope_head.pop() + del block + + def install_symbol(self, name, handle): + for block in self.scope_head: + if name in block: + block[name] = handle + return + + block = self.scope_head[-1] + block[name] = handle + + def find_symbol(self, name, default=None): + for block in self.scope_head: + if name in block: + return block[name] + + if default is not None: + self.install_symbol(name, default) + return default + + return self.domain.find_symbol(name) + + def __str__(self): + return str(list(itertools.chain(*self._scopes))) + + +class ReturnException(Exception): + pass + + +class BreakException(Exception): + pass + + +class ContinueException(Exception): + pass + + +class StopException(Exception): + pass + + +class NodePrintVisitor(xtuml.NodePrintVisitor): + + def default_render(self, node): + if not node.position: + return type(node).__name__ + + return '%s (%d:%d)' % (type(node).__name__, + node.position.start_line, + node.position.start_column) + + +class ActionWalker(xtuml.Walker): + domain = None + return_value = None + + def __init__(self, domain): + self.domain = domain + self.symtab = SymbolTable(domain) + xtuml.Walker.__init__(self) + + def default_accept(self, node, **kwargs): + sys.stderr.write(node.__class__.__name__ + '\n') + + def accept_BodyNode(self, node): + self.symtab.enter_scope() + + try: + self.accept(node.block) + except ReturnException, StopException: + pass + + self.symtab.leave_scope() + + def accept_BlockNode(self, node): + self.symtab.enter_block() + self.accept(node.statement_list) + self.symtab.leave_block() + + def accept_StatementListNode(self, node): + for child in node.children: + self.accept(child) + + def accept_ReturnNode(self, node): + value = self.accept(node.expression) + self.return_value = value.fget() + raise ReturnException() + + def accept_BreakNode(self, node): + raise BreakException() + + def accept_ContinueNode(self, node): + raise ContinueException() + + def accept_ControlNode(self, node): + raise StopException() + + def accept_CreateObjectNode(self, node): + inst = self.domain.new(node.key_letter) + self.symtab.install_symbol(node.variable_name, inst) + + def accept_CreateObjectNoVariableNode(self, node): + self.domain.new(node.key_letter) + + def accept_DeleteNode(self, node): + inst = self.symtab.find_symbol(node.variable_name) + xtuml.delete(inst) + + def accept_RelateNode(self, node): + inst1 = self.symtab.find_symbol(node.from_variable_name) + inst2 = self.symtab.find_symbol(node.to_variable_name) + + xtuml.relate(inst1, inst2, node.rel_id, node.phrase.replace("'", '')) + + def accept_RelateUsingNode(self, node): + from_inst = self.symtab.find_symbol(node.from_variable_name) + to_inst = self.symtab.find_symbol(node.to_variable_name) + using_inst = self.symtab.find_symbol(node.using_variable_name) + + xtuml.relate(from_inst, using_inst, node.rel_id, node.phrase.replace("'", '')) + xtuml.relate(using_inst, to_inst, node.rel_id, node.phrase.replace("'", '')) + + def accept_UnrelateNode(self, node): + inst1 = self.symtab.find_symbol(node.from_variable_name) + inst2 = self.symtab.find_symbol(node.to_variable_name) + + xtuml.unrelate(inst1, inst2, node.rel_id, node.phrase.replace("'", '')) + + def accept_UnrelateUsingNode(self, node): + from_inst = self.symtab.find_symbol(node.from_variable_name) + to_inst = self.symtab.find_symbol(node.to_variable_name) + using_inst = self.symtab.find_symbol(node.using_variable_name) + + xtuml.unrelate(from_inst, using_inst, node.rel_id, node.phrase.replace("'", '')) + xtuml.unrelate(using_inst, to_inst, node.rel_id, node.phrase.replace("'", '')) + + def accept_SelectFromNode(self, node): + if node.cardinality == 'many': + handle = self.domain.select_many(node.key_letter) + else: + handle = self.domain.select_any(node.key_letter) + + self.symtab.install_symbol(node.variable_name, handle) + + def accept_SelectedAccessNode(self, node): + selected = self.symtab.find_symbol('selected') + return property(lambda: selected) + + def accept_SelectFromWhereNode(self, node): + def where(selected): + self.symtab.enter_block() + self.symtab.install_symbol('selected', selected) + value = self.accept(node.where_clause) + self.symtab.leave_block() + return value.fget() + + if node.cardinality == 'many': + handle = self.domain.select_many(node.key_letter, where) + else: + handle = self.domain.select_any(node.key_letter, where) + + self.symtab.install_symbol(node.variable_name, handle) + + def accept_SelectRelatedNode(self, node): + handle = self.accept(node.handle).fget() + if node.cardinality == 'many': + chain = xtuml.navigate_many(handle) + else: + chain = xtuml.navigate_one(handle) + + for step in self.accept(node.navigation_chain): + chain = step(chain) + + self.symtab.install_symbol(node.variable_name, chain()) + + def accept_SelectRelatedWhereNode(self, node): + def where(selected): + self.symtab.enter_block() + self.symtab.install_symbol('selected', selected) + value = self.accept(node.where_clause) + self.symtab.leave_block() + return value.fget() + + handle = self.accept(node.handle).fget() + if node.cardinality == 'many': + chain = xtuml.navigate_many(handle) + else: + chain = xtuml.navigate_one(handle) + + for step in self.accept(node.navigation_chain): + chain = step(chain) + + self.symtab.install_symbol(node.variable_name, chain(where)) + + def accept_NavigationListNode(self, node): + for child in node.children: + yield self.accept(child) + + def accept_NavigationStepNode(self, node): + return lambda chain: chain.nav(node.key_letter, node.rel_id, + node.phrase.replace("'", '')) + + def accept_ForEachNode(self, node): + set_handle = self.symtab.find_symbol(node.set_variable_name) + for handle in set_handle: + self.symtab.install_symbol(node.instance_variable_name, handle) + try: + self.accept(node.block) + except ContinueException: + continue + except BreakException: + break + + def accept_IfNode(self, node): + if self.accept(node.expression).fget(): + self.accept(node.block) + + elif not self.accept(node.elif_list): + self.accept(node.else_clause) + + def accept_ElIfListNode(self, node): + for child in node.children: + if self.accept(child): + return True + + def accept_ElIfNode(self, node): + if self.accept(node.expression).fget(): + self.accept(node.block) + return True + + def accept_ElseNode(self, node): + self.accept(node.block) + + def accept_WhileNode(self, node): + while self.accept(node.expression).fget(): + try: + self.accept(node.block) + except ContinueException: + continue + except BreakException: + break + + def accept_AssignmentNode(self, node): + value = self.accept(node.expression).fget() + variable = self.accept(node.variable_access) + variable.fset(value) + + def accept_FieldAccessNode(self, node): + handle = self.accept(node.handle).fget() + return property(lambda: getattr(handle, node.name)) + + def accept_IndexAccessNode(self, node, default=None): + index = self.accept(node.expression).fget() + handle = self.accept(node.handle, default=[default] * (index + 1)).fget() + fget = lambda: handle[index] + fset = lambda value: handle.__setitem__(index, value) + return property(fget, fset) + + def accept_VariableAccessNode(self, node, default=None): + fget = partial(self.symtab.find_symbol, node.variable_name, default=default) + fset = partial(self.symtab.install_symbol, node.variable_name) + return property(fget, fset) + + def accept_BinaryOperationNode(self, node): + ops = { + '+': lambda lhs, rhs: (lhs + rhs), + '-': lambda lhs, rhs: (lhs - rhs), + '*': lambda lhs, rhs: (lhs * rhs), + '/': lambda lhs, rhs: (lhs / rhs), + '<': lambda lhs, rhs: (lhs < rhs), + '<=': lambda lhs, rhs: (lhs <= rhs), + '>': lambda lhs, rhs: (lhs > rhs), + '>=': lambda lhs, rhs: (lhs >= rhs), + '!=': lambda lhs, rhs: (lhs != rhs), + '==': lambda lhs, rhs: (lhs == rhs), + 'or': lambda lhs, rhs: (lhs or rhs), + 'and': lambda lhs, rhs: (lhs and rhs), + } + operator = node.operator.lower() + + left_value = self.accept(node.left).fget() + right_value = self.accept(node.right).fget() + value = ops[operator](left_value, right_value) + + return property(lambda: value) + + def accept_UnaryOperationNode(self, node): + ops = { + '-': lambda value:-value, + 'not': lambda value: not value, + 'cardinality': lambda value: len(value), + 'empty': lambda value: not value, + 'not_empty': lambda value: not not value, + } + + value = self.accept(node.operand).fget() + operator = node.operator.lower() + value = ops[operator](value) + + return property(lambda: value) + + def accept_BooleanNode(self, node): + value = node.value.upper() == 'TRUE' + return property(lambda: value) + + def accept_IntegerNode(self, node): + value = int(node.value) + return property(lambda: value) + + def accept_RealNode(self, node): + value = float(node.value) + return property(lambda: value) + + def accept_StringNode(self, node): + value = node.value[1:-1] + return property(lambda: value) + + def accept_EnumNode(self, node): + item = self.symtab.find_symbol(node.namespace) + value = getattr(item, node.name) + return property(lambda: value) + + def accept_InvocationStatementNode(self, node): + return self.accept(node.invocation) + + def accept_ImplicitInvocationNode(self, node): + kwargs = self.accept(node.parameter_list) + item = self.symtab.find_symbol(node.namespace) + fn = getattr(item, node.action_name) + value = fn(**kwargs) + return property(lambda: value) + + def accept_InstanceInvocationNode(self, node): + inst = self.accept(node.handle).fget() + op = getattr(inst.__class__, node.action_name) + kwargs = self.accept(node.parameter_list) + value = op(inst, **kwargs) + return property(lambda: value) + + def accept_ClassInvocationNode(self, node): + cls = self.symtab.find_symbol(node.key_letter) + op = getattr(cls, node.action_name) + kwargs = self.accept(node.parameter_list) + value = op(**kwargs) + return property(lambda: value) + + def accept_BridgeInvocationNode(self, node): + kwargs = self.accept(node.parameter_list) + ee = self.symtab.find_symbol(node.namespace) + fn = getattr(ee, node.action_name) + value = fn(**kwargs) + return property(lambda: value) + + def accept_FunctionInvocationNode(self, node): + kwargs = self.accept(node.parameter_list) + fn = self.symtab.find_symbol(node.action_name) + value = fn(**kwargs) + return property(lambda: value) + + def accept_ParameterListNode(self, node): + kwargs = dict() + for child in node.children: + value = self.accept(child.expression).fget() + kwargs[child.name] = value + + return kwargs + + +class OperationWalker(ActionWalker): + instance = None + return_value = None + + def __init__(self, domain, kwargs, instance): + self.kwargs = kwargs + self.instance = instance + ActionWalker.__init__(self, domain) + + def accept_ParamAccessNode(self, node): + value = self.kwargs[node.variable_name] + return property(lambda: value) + + def accept_SelfAccessNode(self, node): + return property(lambda: self.instance) + + +def run_operation(metaclass, action, kwargs, inst): + w = OperationWalker(metaclass.metamodel, kwargs, inst) + #w.visitors.append(NodePrintVisitor()) + root = oal.parse(action) + w.accept(root) + return w.return_value + + +class DerivedAttributeWalker(ActionWalker): + attribute_name = None + instance = None + return_value = None + + def __init__(self, domain, attribute_name, instance): + self.attribute_name = attribute_name + self.instance = instance + ActionWalker.__init__(self, domain) + + def accept_SelfAccessNode(self, node): + return property(lambda: self.instance) + + def accept_FieldAccessNode(self, node): + inst = self.accept(node.handle).fget() + if node.name == self.attribute_name and inst == self.instance: + return property(fget=functools.partial(getattr, self, 'return_value'), + fset=functools.partial(setattr, self, 'return_value')) + + else: + return property(fget=functools.partial(getattr, inst, node.name), + fset=functools.partial(setattr, inst, node.name)) + + +def run_derived_attribute(metaclass, action, attribute_name, inst): + w = DerivedAttributeWalker(metaclass.metamodel, attribute_name, inst) + #w.visitors.append(NodePrintVisitor()) + root = oal.parse(action) + w.accept(root) + return w.return_value + + +class FunctionWalker(ActionWalker): + return_value = None + + def __init__(self, domain, kwargs): + self.kwargs = kwargs + ActionWalker.__init__(self, domain) + + def accept_ParamAccessNode(self, node): + value = self.kwargs[node.variable_name] + return property(lambda: value) + + +def run_function(domain, action, kwargs): + w = FunctionWalker(domain, kwargs) + #w.visitors.append(NodePrintVisitor()) + root = oal.parse(action) + w.accept(root) + return w.return_value + + +def main(): + ''' + Parse command line options and launch the interpreter + ''' + parser = optparse.OptionParser(usage="%prog [options] [another_model_path..]", + version=xtuml.version.complete_string, + formatter=optparse.TitledHelpFormatter()) + + parser.add_option("-v", "--verbosity", dest='verbosity', action="count", + default=1, help="increase debug logging level") + + parser.add_option("-f", "--function", dest='function', action="store", + metavar='NAME', help="invoke function named NAME") + + (opts, args) = parser.parse_args() + if len(args) == 0 or not opts.function: + parser.print_help() + sys.exit(1) + + levels = { + 0: logging.ERROR, + 1: logging.WARNING, + 2: logging.INFO, + 3: logging.DEBUG, + } + logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG)) + + mm = ooaofooa.load_metamodel(args) + domain = ooaofooa.mk_component(mm, derived_attributes=False) + + func = domain.find_symbol(opts.function) + return func() + + +if __name__ == '__main__': + rc = main() + sys.exit(rc) + diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 89aad6f..042c653 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU Lesser General Public # License along with pyxtuml. If not, see . +import collections +import functools import os import logging import xtuml @@ -25,6 +27,8 @@ from xtuml import navigate_subtype as subtype from xtuml import where_eq as where +import interpret + logger = logging.getLogger(__name__) @@ -3159,6 +3163,45 @@ ''' +class LOG(object): + + @staticmethod + def LogInteger(message): + print('LogInteger: %d' % message) + + @staticmethod + def LogInfo(message): + print('LogInfo: %s' % message) + + @staticmethod + def LogFailure(message): + print('LogFailure: %s' % message) + + @staticmethod + def LogSuccess(message): + print('LogSuccess: %s' % message) + + +class Domain(xtuml.MetaModel): + symbols = None + + def __init__(self, id_generator=None): + self.symbols = dict() + xtuml.MetaModel.__init__(self, id_generator) + + def add_symbol(self, name, handle): + self.symbols[name] = handle + + def find_symbol(self, name): + if name in self.symbols: + return self.symbols[name] + + try: + return self.find_class(name) + except: + raise Exception('Unknown symbol %s' % name) + + def is_contained_in(pe_pe, root): ''' Determine if a PE_PE is contained within a EP_PKG or a C_C. @@ -3248,7 +3291,54 @@ def get_related_attributes(r_rgo, r_rto): return l1, l2 - + +def mk_enum(s_edt): + s_dt = one(s_edt).S_DT[17]() + enums = many(s_edt).S_ENUM[27]() + enums = [enum.Name for enum in enums] + Enum = collections.namedtuple(s_dt.Name, enums) + return Enum(*range(len(enums))) + + +def mk_function(metamodel, s_sync): + action = s_sync.Action_Semantics_internal + return lambda **kwargs: interpret.run_function(metamodel, action, kwargs) + + +def mk_constant(cnst_syc): + s_dt = one(cnst_syc).S_DT[1500]() + cnst_lsc = one(cnst_syc).CNST_LFSC[1502].CNST_LSC[1503]() + + if s_dt.Name == 'boolean': + return cnst_lsc.Value.lower() == 'true' + + if s_dt.Name == 'integer': + return int(cnst_lsc.Value) + + if s_dt.Name == 'real': + return float(cnst_lsc.Value) + + if s_dt.Name == 'string': + return str(cnst_lsc.Value) + + +def mk_operation(metaclass, o_tfr): + action = o_tfr.Action_Semantics_internal + + if o_tfr.Instance_Based: + return lambda self, **kwargs: interpret.run_operation(metaclass, action, kwargs, self) + else: + fn = lambda cls, **kwargs: interpret.run_operation(metaclass, action, kwargs, None) + return classmethod(fn) + + +def mk_derived_attribute(metaclass, o_dbattr): + action = o_dbattr.Action_Semantics_internal + o_attr = one(o_dbattr).O_BATTR[107].O_ATTR[106]() + fget = functools.partial(interpret.run_derived_attribute, metaclass, action, o_attr.Name) + return property(fget) + + def mk_class(m, o_obj, derived_attributes=False): ''' Create a pyxtuml class from a BridgePoint class. @@ -3260,8 +3350,9 @@ def mk_class(m, o_obj, derived_attributes=False): while o_attr: ty = get_attribute_type(o_attr) if not derived_attributes and one(o_attr).O_BATTR[106].O_DBATTR[107](): - logger.warning('Omitting derived attribute %s.%s ' % - (o_obj.Key_Lett, o_attr.Name)) + pass +# logger.warning('Omitting derived attribute %s.%s ' % +# (o_obj.Key_Lett, o_attr.Name)) elif not ty: logger.warning('Omitting unsupported attribute %s.%s ' % (o_obj.Key_Lett, o_attr.Name)) @@ -3270,7 +3361,7 @@ def mk_class(m, o_obj, derived_attributes=False): o_attr = one(o_attr).O_ATTR[103, 'succeeds']() - Cls = m.define_class(o_obj.Key_Lett, list(attributes), o_obj.Descrip) + metaclass = m.define_class(o_obj.Key_Lett, list(attributes), o_obj.Descrip) for o_id in many(o_obj).O_ID[104](): o_oida = many(o_id).O_OIDA[105]() @@ -3283,7 +3374,16 @@ def mk_class(m, o_obj, derived_attributes=False): names = [o_attr.Name for o_attr in o_attrs] m.define_unique_identifier(o_obj.Key_Lett, o_id.Oid_ID + 1, *names) - return Cls + for o_tfr in many(o_obj).O_TFR[115](): + fn = mk_operation(metaclass, o_tfr) + setattr(metaclass.clazz, o_tfr.Name, fn) + + for o_dbattr in many(o_obj).O_ATTR[102].O_BATTR[106].O_DBATTR[107](): + o_attr = one(o_dbattr).O_BATTR[107].O_ATTR[106]() + fn = mk_derived_attribute(metaclass, o_dbattr) + setattr(metaclass.clazz, o_attr.Name, fn) + + return metaclass def mk_simple_association(m, inst): @@ -3425,7 +3525,7 @@ def mk_component(bp_model, c_c=None, derived_attributes=False): Optionally, restrict to classes and associations contained in the component c_c. ''' - target = xtuml.MetaModel() + target = Domain() c_c_filt = lambda sel: c_c is None or is_contained_in(sel, c_c) @@ -3435,6 +3535,26 @@ def mk_component(bp_model, c_c=None, derived_attributes=False): for r_rel in bp_model.select_many('R_REL', c_c_filt): mk_association(target, r_rel) + for s_sync in bp_model.select_many('S_SYNC', c_c_filt): + fn = mk_function(target, s_sync) + target.add_symbol(s_sync.Name, fn) + + for s_dt in bp_model.select_many('S_DT', c_c_filt): + s_edt = one(s_dt).S_EDT[17]() + if s_edt: + enum = mk_enum(s_edt) + target.add_symbol(s_dt.Name, enum) + + for cnst_csp in bp_model.select_many('CNST_CSP', c_c_filt): + for cnst_syc in many(cnst_csp).CNST_SYC[1504](): + value = mk_constant(cnst_syc) + target.add_symbol(cnst_syc.Name, value) + + for ass in target.associations: + ass.formalize() + + target.add_symbol('LOG', LOG) + return target @@ -3485,7 +3605,7 @@ def build_component(self, name=None, derived_attributes=False): raise Exception('Unable to find the component %s' % name) else: return mk_component(mm, c_c, derived_attributes) - + def load_metamodel(resource=None, load_globals=True): ''' From d07e56b34d6c8aab77727c61151c9f8996ff5789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 19 May 2017 23:42:58 +0200 Subject: [PATCH 156/216] remove dead, unused code --- bridgepoint/interpret.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/bridgepoint/interpret.py b/bridgepoint/interpret.py index 2bedcbe..7cd8e4e 100644 --- a/bridgepoint/interpret.py +++ b/bridgepoint/interpret.py @@ -109,9 +109,6 @@ def find_symbol(self, name, default=None): return self.domain.find_symbol(name) - def __str__(self): - return str(list(itertools.chain(*self._scopes))) - class ReturnException(Exception): pass From 68f3291b3dfa969e17a39df9819f140f50f2b608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 19 May 2017 23:52:10 +0200 Subject: [PATCH 157/216] test: add basic test for bridgepoint interpreter --- tests/test_bridgepoint/test_interpret.py | 2647 ++++++++++++++++++++++ 1 file changed, 2647 insertions(+) create mode 100644 tests/test_bridgepoint/test_interpret.py diff --git a/tests/test_bridgepoint/test_interpret.py b/tests/test_bridgepoint/test_interpret.py new file mode 100644 index 0000000..c57f341 --- /dev/null +++ b/tests/test_bridgepoint/test_interpret.py @@ -0,0 +1,2647 @@ +import unittest + + +model = """ +-- root-types-contained: Package_c +-- BP 7.1 content: StreamData syschar: 3 persistence-version: 7.1.6 + +INSERT INTO EP_PKG + VALUES ("96ec2ddc-da38-40da-8372-025532bfdb1d", + "d8ca6d9b-7cf6-4f9b-9224-bf1bbd4de04a", + "d8ca6d9b-7cf6-4f9b-9224-bf1bbd4de04a", + 'Stimuli', + '', + 0); +INSERT INTO GD_MD + VALUES ("47f372d5-f768-4a0a-94f3-341d16ad507d", + 112, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + 108, + 0, + 0, + 1, + 1, + 1, + 12, + 1, + 0, + 0, + 200, + 150, + 0, + '4.1.17', + 'Test::Stimuli'); +INSERT INTO GD_GE + VALUES ("3c217645-a850-4d24-8e8e-5b0faad0cdb3", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 21, + 0, + 'Test::Stimuli::Class'); +INSERT INTO GD_SHP + VALUES ("3c217645-a850-4d24-8e8e-5b0faad0cdb3"); +INSERT INTO GD_NCS + VALUES ("3c217645-a850-4d24-8e8e-5b0faad0cdb3"); +INSERT INTO DIM_ND + VALUES (589.000000, + 217.000000, + "3c217645-a850-4d24-8e8e-5b0faad0cdb3"); +INSERT INTO DIM_GE + VALUES (24.000000, + 48.000000, + "3c217645-a850-4d24-8e8e-5b0faad0cdb3", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("3c217645-a850-4d24-8e8e-5b0faad0cdb3", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("68bec42f-065f-49e6-a5c4-1572b894956b", + 613.000000, + 96.000000, + "3c217645-a850-4d24-8e8e-5b0faad0cdb3"); +INSERT INTO DIM_CON + VALUES ("ccdc9074-dbe9-4686-be0b-464c278fa7a5", + 497.000000, + 265.000000, + "3c217645-a850-4d24-8e8e-5b0faad0cdb3"); +INSERT INTO DIM_CON + VALUES ("ec7b54a2-3ed3-4f7a-8d3d-5ae469f6d4d8", + 204.000000, + 265.000000, + "3c217645-a850-4d24-8e8e-5b0faad0cdb3"); +INSERT INTO GD_GE + VALUES ("cc3d9222-c7db-401f-88cb-b2912a95b268", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + 24, + 0, + 'Test::Stimuli::R1'); +INSERT INTO GD_CON + VALUES ("cc3d9222-c7db-401f-88cb-b2912a95b268", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("440f8de2-63e7-4476-af63-ed9d78d9582e", + "cc3d9222-c7db-401f-88cb-b2912a95b268", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "440f8de2-63e7-4476-af63-ed9d78d9582e"); +INSERT INTO DIM_GE + VALUES (623.000000, + 106.000000, + "440f8de2-63e7-4476-af63-ed9d78d9582e", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("440f8de2-63e7-4476-af63-ed9d78d9582e", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("8e457573-102d-44c7-82c7-0c0713c22039", + "cc3d9222-c7db-401f-88cb-b2912a95b268", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "8e457573-102d-44c7-82c7-0c0713c22039"); +INSERT INTO DIM_GE + VALUES (688.000000, + 295.000000, + "8e457573-102d-44c7-82c7-0c0713c22039", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("8e457573-102d-44c7-82c7-0c0713c22039", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("a79ba264-fe9a-4531-95fd-0a9cb1d36e77", + "cc3d9222-c7db-401f-88cb-b2912a95b268", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "a79ba264-fe9a-4531-95fd-0a9cb1d36e77"); +INSERT INTO DIM_GE + VALUES (502.000000, + 270.000000, + "a79ba264-fe9a-4531-95fd-0a9cb1d36e77", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("a79ba264-fe9a-4531-95fd-0a9cb1d36e77", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("b9f1a5fb-6d7a-4d9a-bde2-ba149af8ff36", + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "00000000-0000-0000-0000-000000000000", + "b66f047f-0b04-44f7-b2cd-fb53b1e37ab2", + "a03d45c1-af19-4e1d-ab1a-ea1c829cf0c3"); +INSERT INTO GD_LS + VALUES ("8b39f93c-62de-49af-9d91-f22f1d04e059", + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "b9f1a5fb-6d7a-4d9a-bde2-ba149af8ff36", + "a03d45c1-af19-4e1d-ab1a-ea1c829cf0c3", + "49846951-7ed1-4c03-9406-bcd3ff7145d5"); +INSERT INTO GD_LS + VALUES ("1a7b7cde-5bdd-40c2-8771-25ce32f26e78", + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "8b39f93c-62de-49af-9d91-f22f1d04e059", + "49846951-7ed1-4c03-9406-bcd3ff7145d5", + "90d8d349-9729-407e-a54c-85ea0e9170f6"); +INSERT INTO GD_AOS + VALUES ("2f920c1c-7f9d-4a65-9326-b971fd7db646", + "1a7b7cde-5bdd-40c2-8771-25ce32f26e78"); +INSERT INTO GD_LS + VALUES ("c78816c0-1d71-4d2d-bb40-bcfb2ed9d410", + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "1a7b7cde-5bdd-40c2-8771-25ce32f26e78", + "90d8d349-9729-407e-a54c-85ea0e9170f6", + "094fa291-d349-45b9-8bc8-9f2cdbf81794"); +INSERT INTO DIM_WAY + VALUES ("b66f047f-0b04-44f7-b2cd-fb53b1e37ab2", + 613.000000, + 96.000000, + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("094fa291-d349-45b9-8bc8-9f2cdbf81794", + 497.000000, + 265.000000, + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "00000000-0000-0000-0000-000000000000", + "b66f047f-0b04-44f7-b2cd-fb53b1e37ab2"); +INSERT INTO DIM_WAY + VALUES ("a03d45c1-af19-4e1d-ab1a-ea1c829cf0c3", + 663.000000, + 96.000000, + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("49846951-7ed1-4c03-9406-bcd3ff7145d5", + 663.000000, + 324.000000, + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("90d8d349-9729-407e-a54c-85ea0e9170f6", + 497.000000, + 324.000000, + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "cc3d9222-c7db-401f-88cb-b2912a95b268", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("cc3d9222-c7db-401f-88cb-b2912a95b268", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("2f920c1c-7f9d-4a65-9326-b971fd7db646", + 588.000000, + 324.000000, + "cc3d9222-c7db-401f-88cb-b2912a95b268"); +INSERT INTO DIM_ED + VALUES ("68bec42f-065f-49e6-a5c4-1572b894956b", + "ccdc9074-dbe9-4686-be0b-464c278fa7a5", + "cc3d9222-c7db-401f-88cb-b2912a95b268"); +INSERT INTO GD_GE + VALUES ("a7c794aa-76d0-4ded-b2f5-374559ef8a3c", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "64f50cf1-3265-4c67-8b20-8f67c6584598", + 21, + 0, + 'Test::Stimuli::Assoc'); +INSERT INTO GD_SHP + VALUES ("a7c794aa-76d0-4ded-b2f5-374559ef8a3c"); +INSERT INTO GD_NCS + VALUES ("a7c794aa-76d0-4ded-b2f5-374559ef8a3c"); +INSERT INTO DIM_ND + VALUES (229.000000, + 121.000000, + "a7c794aa-76d0-4ded-b2f5-374559ef8a3c"); +INSERT INTO DIM_GE + VALUES (420.000000, + 384.000000, + "a7c794aa-76d0-4ded-b2f5-374559ef8a3c", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("a7c794aa-76d0-4ded-b2f5-374559ef8a3c", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("aa81276a-ee69-4ceb-8116-2edc77a68e1e", + 588.000000, + 384.000000, + "a7c794aa-76d0-4ded-b2f5-374559ef8a3c"); +INSERT INTO GD_GE + VALUES ("2e92522d-a662-4d14-a06a-02894f9a222c", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + 34, + 0, + 'Test::Stimuli::R1::Assoc'); +INSERT INTO GD_CON + VALUES ("2e92522d-a662-4d14-a06a-02894f9a222c", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("048e856f-5889-4582-964b-6faefe1a19a2", + "2e92522d-a662-4d14-a06a-02894f9a222c", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "048e856f-5889-4582-964b-6faefe1a19a2"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "048e856f-5889-4582-964b-6faefe1a19a2", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("048e856f-5889-4582-964b-6faefe1a19a2", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("42440c46-073b-4d33-98e9-f2a7da71e2e6", + "2e92522d-a662-4d14-a06a-02894f9a222c", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "42440c46-073b-4d33-98e9-f2a7da71e2e6"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "42440c46-073b-4d33-98e9-f2a7da71e2e6", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("42440c46-073b-4d33-98e9-f2a7da71e2e6", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("969134f8-f96a-4538-b2f6-1be6db77bfbf", + "2e92522d-a662-4d14-a06a-02894f9a222c", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "969134f8-f96a-4538-b2f6-1be6db77bfbf"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "969134f8-f96a-4538-b2f6-1be6db77bfbf", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("969134f8-f96a-4538-b2f6-1be6db77bfbf", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("a930d008-5e21-4e59-b0a5-816b0d299205", + "2e92522d-a662-4d14-a06a-02894f9a222c", + "00000000-0000-0000-0000-000000000000", + "c7448b4b-a973-4321-a260-138ce3e1e283", + "ba3d6a75-65f0-494d-9079-15c793380d91"); +INSERT INTO DIM_WAY + VALUES ("c7448b4b-a973-4321-a260-138ce3e1e283", + 588.000000, + 384.000000, + "2e92522d-a662-4d14-a06a-02894f9a222c", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("ba3d6a75-65f0-494d-9079-15c793380d91", + 588.000000, + 324.000000, + "2e92522d-a662-4d14-a06a-02894f9a222c", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "2e92522d-a662-4d14-a06a-02894f9a222c", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("2e92522d-a662-4d14-a06a-02894f9a222c", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ED + VALUES ("aa81276a-ee69-4ceb-8116-2edc77a68e1e", + "2f920c1c-7f9d-4a65-9326-b971fd7db646", + "2e92522d-a662-4d14-a06a-02894f9a222c"); +INSERT INTO GD_GE + VALUES ("302cadae-7055-4e33-a0fe-654d71848985", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "e38009f0-429b-474c-8dc9-a73076783263", + 12, + 0, + 'Test::Stimuli::Architecture'); +INSERT INTO GD_SHP + VALUES ("302cadae-7055-4e33-a0fe-654d71848985"); +INSERT INTO GD_NCS + VALUES ("302cadae-7055-4e33-a0fe-654d71848985"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "302cadae-7055-4e33-a0fe-654d71848985"); +INSERT INTO DIM_GE + VALUES (876.000000, + 108.000000, + "302cadae-7055-4e33-a0fe-654d71848985", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("302cadae-7055-4e33-a0fe-654d71848985", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_GE + VALUES ("3463fd6a-5bb3-4a21-b855-fecba1c785ee", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 12, + 0, + 'Test::Stimuli::Logging'); +INSERT INTO GD_SHP + VALUES ("3463fd6a-5bb3-4a21-b855-fecba1c785ee"); +INSERT INTO GD_NCS + VALUES ("3463fd6a-5bb3-4a21-b855-fecba1c785ee"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "3463fd6a-5bb3-4a21-b855-fecba1c785ee"); +INSERT INTO DIM_GE + VALUES (1096.000000, + 108.000000, + "3463fd6a-5bb3-4a21-b855-fecba1c785ee", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("3463fd6a-5bb3-4a21-b855-fecba1c785ee", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_GE + VALUES ("c73d68fc-3e94-416e-8275-e86ceadceadf", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 12, + 0, + 'Test::Stimuli::Time'); +INSERT INTO GD_SHP + VALUES ("c73d68fc-3e94-416e-8275-e86ceadceadf"); +INSERT INTO GD_NCS + VALUES ("c73d68fc-3e94-416e-8275-e86ceadceadf"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "c73d68fc-3e94-416e-8275-e86ceadceadf"); +INSERT INTO DIM_GE + VALUES (1316.000000, + 108.000000, + "c73d68fc-3e94-416e-8275-e86ceadceadf", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("c73d68fc-3e94-416e-8275-e86ceadceadf", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_GE + VALUES ("7fc12262-2a21-4611-ac0b-df4abc259481", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "53446f65-84b1-424b-bc68-cf0164d24a57", + 21, + 0, + 'Test::Stimuli::Other_Class'); +INSERT INTO GD_SHP + VALUES ("7fc12262-2a21-4611-ac0b-df4abc259481"); +INSERT INTO GD_NCS + VALUES ("7fc12262-2a21-4611-ac0b-df4abc259481"); +INSERT INTO DIM_ND + VALUES (240.000000, + 144.000000, + "7fc12262-2a21-4611-ac0b-df4abc259481"); +INSERT INTO DIM_GE + VALUES (84.000000, + 432.000000, + "7fc12262-2a21-4611-ac0b-df4abc259481", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("7fc12262-2a21-4611-ac0b-df4abc259481", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("eafb3f5c-266f-49f5-ad9c-ac834866f6cb", + 204.000000, + 432.000000, + "7fc12262-2a21-4611-ac0b-df4abc259481"); +INSERT INTO GD_GE + VALUES ("e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "749e0026-f26e-4df3-a33c-1a16c865d54a", + 24, + 0, + 'Test::Stimuli::R2'); +INSERT INTO GD_CON + VALUES ("e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("c701e9d4-7d03-44a0-aec1-89d991dba745", + "e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "c701e9d4-7d03-44a0-aec1-89d991dba745"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "c701e9d4-7d03-44a0-aec1-89d991dba745", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("c701e9d4-7d03-44a0-aec1-89d991dba745", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("8826ea45-bf5e-4752-8cc1-48dee667ff93", + "e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "8826ea45-bf5e-4752-8cc1-48dee667ff93"); +INSERT INTO DIM_GE + VALUES (221.000000, + 326.000000, + "8826ea45-bf5e-4752-8cc1-48dee667ff93", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("8826ea45-bf5e-4752-8cc1-48dee667ff93", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("a1b8bbbf-f8a6-42ca-a872-d8bea4b08641", + "e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "a1b8bbbf-f8a6-42ca-a872-d8bea4b08641"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "a1b8bbbf-f8a6-42ca-a872-d8bea4b08641", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("a1b8bbbf-f8a6-42ca-a872-d8bea4b08641", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("67663959-4ce5-47d4-b0f5-e518522bc1ce", + "e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + "00000000-0000-0000-0000-000000000000", + "71236bd3-9a44-46bd-9304-145f2fb06270", + "ed8de97e-3217-46f5-9971-24e824b18fb6"); +INSERT INTO DIM_WAY + VALUES ("71236bd3-9a44-46bd-9304-145f2fb06270", + 204.000000, + 432.000000, + "e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("ed8de97e-3217-46f5-9971-24e824b18fb6", + 204.000000, + 265.000000, + "e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("e0aa0de1-3cf6-4a01-9248-d8fa9e666c45", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ED + VALUES ("eafb3f5c-266f-49f5-ad9c-ac834866f6cb", + "ec7b54a2-3ed3-4f7a-8d3d-5ae469f6d4d8", + "e0aa0de1-3cf6-4a01-9248-d8fa9e666c45"); +INSERT INTO GD_GE + VALUES ("2d64b6db-f30f-4636-a1cb-7347d1a4d6aa", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "0065df20-dd20-47f8-80fa-f2a356522d79", + 52, + 0, + 'Test::Stimuli::My_Enum'); +INSERT INTO GD_SHP + VALUES ("2d64b6db-f30f-4636-a1cb-7347d1a4d6aa"); +INSERT INTO GD_NCS + VALUES ("2d64b6db-f30f-4636-a1cb-7347d1a4d6aa"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "2d64b6db-f30f-4636-a1cb-7347d1a4d6aa"); +INSERT INTO DIM_GE + VALUES (1536.000000, + 108.000000, + "2d64b6db-f30f-4636-a1cb-7347d1a4d6aa", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("2d64b6db-f30f-4636-a1cb-7347d1a4d6aa", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_GE + VALUES ("12d256e1-6472-4c90-bfe5-66df689bb0d6", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "0eff6918-06c2-4e6d-ade0-a89e852c4628", + 109, + 0, + 'Test::Stimuli::My_Constants'); +INSERT INTO GD_SHP + VALUES ("12d256e1-6472-4c90-bfe5-66df689bb0d6"); +INSERT INTO GD_NCS + VALUES ("12d256e1-6472-4c90-bfe5-66df689bb0d6"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "12d256e1-6472-4c90-bfe5-66df689bb0d6"); +INSERT INTO DIM_GE + VALUES (1756.000000, + 108.000000, + "12d256e1-6472-4c90-bfe5-66df689bb0d6", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("12d256e1-6472-4c90-bfe5-66df689bb0d6", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_GE + VALUES ("fc91b55d-4cbd-4960-9e6c-6913808d263b", + "47f372d5-f768-4a0a-94f3-341d16ad507d", + "8d35d15f-ff91-47a8-a970-ec892e1f2714", + 101, + 0, + 'Test::Stimuli::My_Struct'); +INSERT INTO GD_SHP + VALUES ("fc91b55d-4cbd-4960-9e6c-6913808d263b"); +INSERT INTO GD_NCS + VALUES ("fc91b55d-4cbd-4960-9e6c-6913808d263b"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "fc91b55d-4cbd-4960-9e6c-6913808d263b"); +INSERT INTO DIM_GE + VALUES (1976.000000, + 108.000000, + "fc91b55d-4cbd-4960-9e6c-6913808d263b", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("fc91b55d-4cbd-4960-9e6c-6913808d263b", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_DIA + VALUES ("47f372d5-f768-4a0a-94f3-341d16ad507d", + '', + 1.000000, + 0.000000, + 0.000000, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 4); +INSERT INTO O_OBJ + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 'Class', + 1, + 'Class', + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO O_TFR + VALUES ("e758f1a3-58a7-4b23-ab94-1f532641886d", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 'Instance_Based_Operation', + '', + "ba5eda7a-def5-0000-0000-000000000002", + 1, + 'return param.P1 + param.P2 + self.Derived_Attribute;', + 1, + '', + "00000000-0000-0000-0000-000000000000", + 0); +INSERT INTO O_TPARM + VALUES ("983f2053-433b-4237-bb78-e1f6cafdbc9b", + "e758f1a3-58a7-4b23-ab94-1f532641886d", + 'P1', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO O_TPARM + VALUES ("2faf254a-033e-416a-892e-8258b0c5163c", + "e758f1a3-58a7-4b23-ab94-1f532641886d", + 'P2', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "983f2053-433b-4237-bb78-e1f6cafdbc9b", + ''); +INSERT INTO O_TFR + VALUES ("f7e47536-70cf-4c6d-8224-1c06e6dc43d5", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 'Class_Based_Operation', + '', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + 'return param.P1 + param.P2;', + 1, + '', + "e758f1a3-58a7-4b23-ab94-1f532641886d", + 0); +INSERT INTO O_TPARM + VALUES ("9b8a6a4b-c46e-4ee4-b2bf-ee151a370682", + "f7e47536-70cf-4c6d-8224-1c06e6dc43d5", + 'P1', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO O_TPARM + VALUES ("436f7f35-a505-4202-98fb-9137182e00d9", + "f7e47536-70cf-4c6d-8224-1c06e6dc43d5", + 'P2', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "9b8a6a4b-c46e-4ee4-b2bf-ee151a370682", + ''); +INSERT INTO O_TFR + VALUES ("984c087c-6886-4ed5-b58c-3aac38dec6b2", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 'Transform_Function', + '', + "ba5eda7a-def5-0000-0000-000000000000", + 0, + '', + 3, + '', + "f7e47536-70cf-4c6d-8224-1c06e6dc43d5", + 0); +INSERT INTO O_NBATTR + VALUES ("429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9"); +INSERT INTO O_BATTR + VALUES ("429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9"); +INSERT INTO O_ATTR + VALUES ("429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "00000000-0000-0000-0000-000000000000", + 'ID', + '', + '', + 'ID', + 0, + "ba5eda7a-def5-0000-0000-000000000005", + '', + ''); +INSERT INTO O_DBATTR + VALUES ("b8161e1a-e49e-4c4f-8938-289cb6ebe107", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 'self.Derived_Attribute = 42;', + 1, + 0); +INSERT INTO O_BATTR + VALUES ("b8161e1a-e49e-4c4f-8938-289cb6ebe107", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9"); +INSERT INTO O_ATTR + VALUES ("b8161e1a-e49e-4c4f-8938-289cb6ebe107", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "429f668f-92bd-4661-a074-7328a5d4e4ba", + 'Derived_Attribute', + '', + '', + 'Derived_Attribute', + 0, + "ba5eda7a-def5-0000-0000-000000000002", + '', + ''); +INSERT INTO O_ID + VALUES (0, + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9"); +INSERT INTO O_OIDA + VALUES ("429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 0, + 'ID'); +INSERT INTO O_ID + VALUES (1, + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9"); +INSERT INTO O_ID + VALUES (2, + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9"); +INSERT INTO PE_PE + VALUES ("83517940-72ca-47ec-ad7d-a04d06f560b6", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 9); +INSERT INTO R_REL + VALUES ("83517940-72ca-47ec-ad7d-a04d06f560b6", + 1, + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_ASSOC + VALUES ("83517940-72ca-47ec-ad7d-a04d06f560b6"); +INSERT INTO R_AONE + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "a20ed88b-6494-4ecf-acf9-171949cb909c", + 0, + 1, + 'one'); +INSERT INTO O_RTIDA + VALUES ("429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 0, + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "a20ed88b-6494-4ecf-acf9-171949cb909c"); +INSERT INTO R_RTO + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "a20ed88b-6494-4ecf-acf9-171949cb909c", + 0); +INSERT INTO R_OIR + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "a20ed88b-6494-4ecf-acf9-171949cb909c", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_AOTH + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "1721e766-d80d-4750-b780-e82bda8e3bc3", + 0, + 1, + 'other'); +INSERT INTO O_RTIDA + VALUES ("429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 0, + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "1721e766-d80d-4750-b780-e82bda8e3bc3"); +INSERT INTO R_RTO + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "1721e766-d80d-4750-b780-e82bda8e3bc3", + 0); +INSERT INTO R_OIR + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "1721e766-d80d-4750-b780-e82bda8e3bc3", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_ASSR + VALUES ("64f50cf1-3265-4c67-8b20-8f67c6584598", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "d129b4a8-22ca-4360-a33f-f384fe0cd6f6", + 0); +INSERT INTO R_RGO + VALUES ("64f50cf1-3265-4c67-8b20-8f67c6584598", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "d129b4a8-22ca-4360-a33f-f384fe0cd6f6"); +INSERT INTO R_OIR + VALUES ("64f50cf1-3265-4c67-8b20-8f67c6584598", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "d129b4a8-22ca-4360-a33f-f384fe0cd6f6", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("64f50cf1-3265-4c67-8b20-8f67c6584598", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 4); +INSERT INTO O_OBJ + VALUES ("64f50cf1-3265-4c67-8b20-8f67c6584598", + 'Assoc', + 2, + 'Assoc', + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO O_REF + VALUES ("64f50cf1-3265-4c67-8b20-8f67c6584598", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 0, + "429f668f-92bd-4661-a074-7328a5d4e4ba", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "d129b4a8-22ca-4360-a33f-f384fe0cd6f6", + "a20ed88b-6494-4ecf-acf9-171949cb909c", + "2261d0fb-67d6-49cc-9796-9ce0d984e77e", + "7b2cfbf2-323d-4192-8e10-821fa833cea0", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Class', + 'ID', + 'R1.''one'''); +INSERT INTO O_RATTR + VALUES ("2261d0fb-67d6-49cc-9796-9ce0d984e77e", + "64f50cf1-3265-4c67-8b20-8f67c6584598", + "429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 1, + 'ID'); +INSERT INTO O_ATTR + VALUES ("2261d0fb-67d6-49cc-9796-9ce0d984e77e", + "64f50cf1-3265-4c67-8b20-8f67c6584598", + "00000000-0000-0000-0000-000000000000", + 'One_ID', + '', + 'One_', + 'ID', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + ''); +INSERT INTO O_REF + VALUES ("64f50cf1-3265-4c67-8b20-8f67c6584598", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 0, + "429f668f-92bd-4661-a074-7328a5d4e4ba", + "83517940-72ca-47ec-ad7d-a04d06f560b6", + "d129b4a8-22ca-4360-a33f-f384fe0cd6f6", + "1721e766-d80d-4750-b780-e82bda8e3bc3", + "057fa7d0-fe76-4dbc-85e4-5ebd0510d10d", + "11832eed-df45-4211-aea8-cd9a9d42a825", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Class', + 'ID', + 'R1.''other'''); +INSERT INTO O_RATTR + VALUES ("057fa7d0-fe76-4dbc-85e4-5ebd0510d10d", + "64f50cf1-3265-4c67-8b20-8f67c6584598", + "429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 1, + 'ID'); +INSERT INTO O_ATTR + VALUES ("057fa7d0-fe76-4dbc-85e4-5ebd0510d10d", + "64f50cf1-3265-4c67-8b20-8f67c6584598", + "2261d0fb-67d6-49cc-9796-9ce0d984e77e", + 'Other_ID', + '', + 'Other_', + 'ID', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + ''); +INSERT INTO O_ID + VALUES (0, + "64f50cf1-3265-4c67-8b20-8f67c6584598"); +INSERT INTO O_OIDA + VALUES ("2261d0fb-67d6-49cc-9796-9ce0d984e77e", + "64f50cf1-3265-4c67-8b20-8f67c6584598", + 0, + 'One_ID'); +INSERT INTO O_OIDA + VALUES ("057fa7d0-fe76-4dbc-85e4-5ebd0510d10d", + "64f50cf1-3265-4c67-8b20-8f67c6584598", + 0, + 'Other_ID'); +INSERT INTO O_ID + VALUES (1, + "64f50cf1-3265-4c67-8b20-8f67c6584598"); +INSERT INTO O_ID + VALUES (2, + "64f50cf1-3265-4c67-8b20-8f67c6584598"); +INSERT INTO PE_PE + VALUES ("9685d027-a90e-4cc6-8ec7-e0e354a5d7a0", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("9685d027-a90e-4cc6-8ec7-e0e354a5d7a0", + "00000000-0000-0000-0000-000000000000", + 'Function', + '', + '', + "ba5eda7a-def5-0000-0000-000000000002", + 3, + '', + 0); +INSERT INTO S_SPARM + VALUES ("7f918896-4e70-4a91-beff-11adebc48e30", + "9685d027-a90e-4cc6-8ec7-e0e354a5d7a0", + 'P1', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_SPARM + VALUES ("a2aaf229-5680-4349-ae5d-343269d27a3e", + "9685d027-a90e-4cc6-8ec7-e0e354a5d7a0", + 'P2', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "7f918896-4e70-4a91-beff-11adebc48e30", + ''); +INSERT INTO PE_PE + VALUES ("e38009f0-429b-474c-8dc9-a73076783263", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 5); +INSERT INTO S_EE + VALUES ("e38009f0-429b-474c-8dc9-a73076783263", + 'Architecture', + '', + 'ARCH', + "00000000-0000-0000-0000-000000000000", + '', + 'Architecture', + 1); +INSERT INTO S_BRG + VALUES ("7219f7b0-0397-40dc-97f6-de0a41208412", + "e38009f0-429b-474c-8dc9-a73076783263", + 'shutdown', + '', + 0, + "ba5eda7a-def5-0000-0000-000000000000", + 'control stop;', + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 5); +INSERT INTO S_EE + VALUES ("770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 'Logging', + '', + 'LOG', + "00000000-0000-0000-0000-000000000000", + '', + 'Logging', + 1); +INSERT INTO S_BRG + VALUES ("61fe08cd-9cf3-4023-a487-7aa292e7a20e", + "770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 'LogSuccess', + '', + 0, + "ba5eda7a-def5-0000-0000-000000000000", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("c6072874-c495-4730-b5ec-5d5f1549bf1a", + "61fe08cd-9cf3-4023-a487-7aa292e7a20e", + 'message', + "ba5eda7a-def5-0000-0000-000000000004", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("d3998ddd-97b6-4fae-b749-e4e9c6e3936d", + "770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 'LogFailure', + '', + 0, + "ba5eda7a-def5-0000-0000-000000000000", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("a5b0512d-91d6-4c84-8265-c2422917dbd0", + "d3998ddd-97b6-4fae-b749-e4e9c6e3936d", + 'message', + "ba5eda7a-def5-0000-0000-000000000004", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("9632064d-37ed-4279-afb5-d197096dca00", + "770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 'LogInfo', + '', + 0, + "ba5eda7a-def5-0000-0000-000000000000", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("68318d83-f022-4f1f-8362-19701df14b42", + "9632064d-37ed-4279-afb5-d197096dca00", + 'message', + "ba5eda7a-def5-0000-0000-000000000004", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("3c3863c6-d669-4c50-b129-48665a57b837", + "770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 'LogDate', + '', + 0, + "ba5eda7a-def5-0000-0000-000000000000", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("99c0c5b7-9454-4438-963a-44cfabd43fdc", + "3c3863c6-d669-4c50-b129-48665a57b837", + 'd', + "ba5eda7a-def5-0000-0000-00000000000e", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BPARM + VALUES ("ad473ace-130f-4bed-9991-80821413bcfa", + "3c3863c6-d669-4c50-b129-48665a57b837", + 'message', + "ba5eda7a-def5-0000-0000-000000000004", + 0, + '', + "99c0c5b7-9454-4438-963a-44cfabd43fdc", + ''); +INSERT INTO S_BRG + VALUES ("e8ecbf2e-2cd2-492c-aee8-0ae74a9e4f5d", + "770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 'LogTime', + '', + 0, + "ba5eda7a-def5-0000-0000-000000000000", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("153a7d76-d2ca-40fc-99ce-c1069ea1a6f8", + "e8ecbf2e-2cd2-492c-aee8-0ae74a9e4f5d", + 't', + "ba5eda7a-def5-0000-0000-000000000010", + 0, + '', + "924677ab-5703-4dd9-bf11-62cd0f2a7bd5", + ''); +INSERT INTO S_BPARM + VALUES ("924677ab-5703-4dd9-bf11-62cd0f2a7bd5", + "e8ecbf2e-2cd2-492c-aee8-0ae74a9e4f5d", + 'message', + "ba5eda7a-def5-0000-0000-000000000004", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("6f3d4410-eb6d-4a2d-bfb4-27a52bb964d7", + "770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 'LogReal', + '', + 0, + "ba5eda7a-def5-0000-0000-000000000000", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("eac566ab-d8d1-4ef1-a80f-85870d0f2e72", + "6f3d4410-eb6d-4a2d-bfb4-27a52bb964d7", + 'r', + "ba5eda7a-def5-0000-0000-000000000003", + 0, + '', + "3dc0dc76-4d72-4d8d-aaec-d38d894becc3", + ''); +INSERT INTO S_BPARM + VALUES ("3dc0dc76-4d72-4d8d-aaec-d38d894becc3", + "6f3d4410-eb6d-4a2d-bfb4-27a52bb964d7", + 'message', + "ba5eda7a-def5-0000-0000-000000000004", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("cbf6251f-5367-4bad-a673-a9a609eb4e53", + "770ebc2c-a252-4f4a-8f8b-d6d669a3c690", + 'LogInteger', + '', + 0, + "ba5eda7a-def5-0000-0000-000000000000", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("cc97ce8d-7f54-465b-9998-ff94c43684cf", + "cbf6251f-5367-4bad-a673-a9a609eb4e53", + 'message', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO PE_PE + VALUES ("6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 5); +INSERT INTO S_EE + VALUES ("6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'Time', + 'The Time external entity provides date, timestamp, and timer related operations.', + 'TIM', + "00000000-0000-0000-0000-000000000000", + '', + 'Time', + 1); +INSERT INTO S_BRG + VALUES ("7170e958-105e-46a5-abe5-7f87287f3984", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'current_date', + '', + 1, + "ba5eda7a-def5-0000-0000-00000000000e", + '', + 1, + '', + 0); +INSERT INTO S_BRG + VALUES ("5c51f8f7-9ee4-4353-a408-7e1d773d7083", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'create_date', + '', + 1, + "ba5eda7a-def5-0000-0000-00000000000e", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("7ac00be5-803f-4718-b33d-c37de04fc5fd", + "5c51f8f7-9ee4-4353-a408-7e1d773d7083", + 'second', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "69ec20c5-d050-42fd-9cfd-b8bed00a9dfb", + ''); +INSERT INTO S_BPARM + VALUES ("1e4627c5-8c62-4dc7-bc1b-37436e5d5bf3", + "5c51f8f7-9ee4-4353-a408-7e1d773d7083", + 'minute', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "f8d0aa3c-a0a3-4208-9334-c796d06ad15a", + ''); +INSERT INTO S_BPARM + VALUES ("f8d0aa3c-a0a3-4208-9334-c796d06ad15a", + "5c51f8f7-9ee4-4353-a408-7e1d773d7083", + 'hour', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "65c22f3d-5b0d-4f67-a2dd-c0f7a0f40f31", + ''); +INSERT INTO S_BPARM + VALUES ("65c22f3d-5b0d-4f67-a2dd-c0f7a0f40f31", + "5c51f8f7-9ee4-4353-a408-7e1d773d7083", + 'day', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BPARM + VALUES ("69ec20c5-d050-42fd-9cfd-b8bed00a9dfb", + "5c51f8f7-9ee4-4353-a408-7e1d773d7083", + 'month', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "1e4627c5-8c62-4dc7-bc1b-37436e5d5bf3", + ''); +INSERT INTO S_BPARM + VALUES ("e7d4f610-1a2d-4d22-978d-1738799e4cea", + "5c51f8f7-9ee4-4353-a408-7e1d773d7083", + 'year', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "7ac00be5-803f-4718-b33d-c37de04fc5fd", + ''); +INSERT INTO S_BRG + VALUES ("0441f231-1284-4094-aa46-5dee9c8b738f", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'get_second', + '', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("fb50e6e5-09b0-4d0c-bde7-7a5c0d9fd0e8", + "0441f231-1284-4094-aa46-5dee9c8b738f", + 'date', + "ba5eda7a-def5-0000-0000-00000000000e", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("a967695e-424d-43d6-979c-05c81a18883d", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'get_minute', + '', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("846f87fe-15db-4e76-8e8e-fa5e207c78d3", + "a967695e-424d-43d6-979c-05c81a18883d", + 'date', + "ba5eda7a-def5-0000-0000-00000000000e", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("f690ac85-7a78-450a-bbb0-86db7f6a7b09", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'get_hour', + '', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("005b7517-8086-4cc4-91a9-94c5b1baa3ac", + "f690ac85-7a78-450a-bbb0-86db7f6a7b09", + 'date', + "ba5eda7a-def5-0000-0000-00000000000e", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("f668b556-0ce1-4cc9-8c28-fc7640fafa7d", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'get_day', + '', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("85aa9858-33df-4944-8caa-66bbbb9efc9d", + "f668b556-0ce1-4cc9-8c28-fc7640fafa7d", + 'date', + "ba5eda7a-def5-0000-0000-00000000000e", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("1ca488a2-7e00-4d14-a33c-a392964c1105", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'get_month', + '', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("35b5239a-eb3b-4d6f-9a85-0d202e9471f3", + "1ca488a2-7e00-4d14-a33c-a392964c1105", + 'date', + "ba5eda7a-def5-0000-0000-00000000000e", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("e3caf312-3b09-47fd-843d-35df16332061", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'get_year', + '', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("99c554c0-149e-4419-89be-87978653444f", + "e3caf312-3b09-47fd-843d-35df16332061", + 'date', + "ba5eda7a-def5-0000-0000-00000000000e", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("73ca7c37-3ccd-4498-8bdd-735cf21f21f6", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'current_clock', + '', + 1, + "ba5eda7a-def5-0000-0000-000000000010", + '', + 1, + '', + 0); +INSERT INTO S_BRG + VALUES ("3aff102e-fb0d-49f1-b058-5692011d4547", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'timer_start', + 'This bridge operation starts a timer set to expire in the specified number of +microseconds, generating the passed event upon expiration. Returns the instance +handle of the timer.', + 1, + "ba5eda7a-def5-0000-0000-00000000000f", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("1e4b88e6-d7bd-44b3-b9a5-5e4b4e263652", + "3aff102e-fb0d-49f1-b058-5692011d4547", + 'microseconds', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "87589024-8660-4248-9599-91be6b6cd684", + ''); +INSERT INTO S_BPARM + VALUES ("87589024-8660-4248-9599-91be6b6cd684", + "3aff102e-fb0d-49f1-b058-5692011d4547", + 'event_inst', + "ba5eda7a-def5-0000-0000-00000000000a", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("117f254c-2850-4253-b929-867f506ac3fe", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'timer_start_recurring', + 'This bridge operation starts a timer set to expire in the specified number of +microseconds, generating the passed event upon expiration. Upon expiration, the +timer will be restarted and fire again in the specified number of microseconds +generating the passed event. This bridge operation returns the instance handle +of the timer.', + 1, + "ba5eda7a-def5-0000-0000-00000000000f", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("90113d6f-cc00-49b4-979c-2e1e266d51c4", + "117f254c-2850-4253-b929-867f506ac3fe", + 'microseconds', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "15253241-3d27-4b89-a5e7-ad1fd721e0e0", + ''); +INSERT INTO S_BPARM + VALUES ("15253241-3d27-4b89-a5e7-ad1fd721e0e0", + "117f254c-2850-4253-b929-867f506ac3fe", + 'event_inst', + "ba5eda7a-def5-0000-0000-00000000000a", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("23e76176-4a6d-4d95-8ee4-00190c9d69bb", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'timer_remaining_time', + 'Returns the time remaining (in microseconds) for the passed timer instance. If +the timer has expired, a zero value is returned.', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("37b23826-9cfc-4591-80de-b38559e09739", + "23e76176-4a6d-4d95-8ee4-00190c9d69bb", + 'timer_inst_ref', + "ba5eda7a-def5-0000-0000-00000000000f", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("8e34546f-016d-44e9-bf83-09079f1ef3d2", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'timer_reset_time', + 'This bridge operation attempts to set the passed existing timer to expire in +the specified number of microseconds. If the timer exists (that is, it has not +expired), a TRUE value is returned. If the timer no longer exists, a FALSE value +is returned.', + 1, + "ba5eda7a-def5-0000-0000-000000000001", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("3640e433-1322-4ddc-a2ea-bb9a9aa8b716", + "8e34546f-016d-44e9-bf83-09079f1ef3d2", + 'timer_inst_ref', + "ba5eda7a-def5-0000-0000-00000000000f", + 0, + '', + "898578a1-a47b-43cd-b751-b9ee14c31b12", + ''); +INSERT INTO S_BPARM + VALUES ("898578a1-a47b-43cd-b751-b9ee14c31b12", + "8e34546f-016d-44e9-bf83-09079f1ef3d2", + 'microseconds', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("2d11503e-b9b3-4424-bc0e-e63fd1f7826d", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'timer_add_time', + 'This bridge operation attempts to add the specified number of microseconds to a +passed existing timer. If the timer exists (that is, it has not expired), a TRUE +value is returned. If the timer no longer exists, a FALSE value is returned.', + 1, + "ba5eda7a-def5-0000-0000-000000000001", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("c74fea9b-7bec-4074-a94d-d36a38ec7f7b", + "2d11503e-b9b3-4424-bc0e-e63fd1f7826d", + 'timer_inst_ref', + "ba5eda7a-def5-0000-0000-00000000000f", + 0, + '', + "814c3d46-0987-48b4-b81e-1f3711a3a026", + ''); +INSERT INTO S_BPARM + VALUES ("814c3d46-0987-48b4-b81e-1f3711a3a026", + "2d11503e-b9b3-4424-bc0e-e63fd1f7826d", + 'microseconds', + "ba5eda7a-def5-0000-0000-000000000002", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_BRG + VALUES ("3d225bb3-3e93-4136-aa66-840f43a4fc91", + "6f37183c-b5c6-4a88-a6a5-22d58f5889f1", + 'timer_cancel', + 'This bridge operation cancels and deletes the passed timer instance. If the +timer exists (that is, it had not expired), a TRUE value is returned. If the +timer no longer exists, a FALSE value is returned.', + 1, + "ba5eda7a-def5-0000-0000-000000000001", + '', + 1, + '', + 0); +INSERT INTO S_BPARM + VALUES ("fbbb00e3-6076-4b7e-a082-b90f7b7df417", + "3d225bb3-3e93-4136-aa66-840f43a4fc91", + 'timer_inst_ref', + "ba5eda7a-def5-0000-0000-00000000000f", + 0, + '', + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO PE_PE + VALUES ("53446f65-84b1-424b-bc68-cf0164d24a57", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 4); +INSERT INTO O_OBJ + VALUES ("53446f65-84b1-424b-bc68-cf0164d24a57", + 'Other_Class', + 3, + 'Other_Class', + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO O_NBATTR + VALUES ("e1e5b8ee-5304-4701-88fe-54f5f21e972e", + "53446f65-84b1-424b-bc68-cf0164d24a57"); +INSERT INTO O_BATTR + VALUES ("e1e5b8ee-5304-4701-88fe-54f5f21e972e", + "53446f65-84b1-424b-bc68-cf0164d24a57"); +INSERT INTO O_ATTR + VALUES ("e1e5b8ee-5304-4701-88fe-54f5f21e972e", + "53446f65-84b1-424b-bc68-cf0164d24a57", + "00000000-0000-0000-0000-000000000000", + 'ID', + '', + '', + 'ID', + 0, + "ba5eda7a-def5-0000-0000-000000000005", + '', + ''); +INSERT INTO O_REF + VALUES ("53446f65-84b1-424b-bc68-cf0164d24a57", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 0, + "429f668f-92bd-4661-a074-7328a5d4e4ba", + "749e0026-f26e-4df3-a33c-1a16c865d54a", + "6aad37f6-2c85-4cb8-991b-9d866a382f49", + "54f4406e-145d-46f9-b866-d68d00b6a58f", + "fbc0067c-bc8a-41d7-ae02-be016a67c320", + "8faf711a-075c-43ac-958a-6d1f2106f49d", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Class', + 'ID', + 'R2'); +INSERT INTO O_RATTR + VALUES ("fbc0067c-bc8a-41d7-ae02-be016a67c320", + "53446f65-84b1-424b-bc68-cf0164d24a57", + "429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 1, + 'ID'); +INSERT INTO O_ATTR + VALUES ("fbc0067c-bc8a-41d7-ae02-be016a67c320", + "53446f65-84b1-424b-bc68-cf0164d24a57", + "e1e5b8ee-5304-4701-88fe-54f5f21e972e", + 'Class_ID', + '', + 'Class_', + 'ID', + 1, + "ba5eda7a-def5-0000-0000-000000000002", + '', + ''); +INSERT INTO O_ID + VALUES (0, + "53446f65-84b1-424b-bc68-cf0164d24a57"); +INSERT INTO O_OIDA + VALUES ("e1e5b8ee-5304-4701-88fe-54f5f21e972e", + "53446f65-84b1-424b-bc68-cf0164d24a57", + 0, + 'ID'); +INSERT INTO O_ID + VALUES (1, + "53446f65-84b1-424b-bc68-cf0164d24a57"); +INSERT INTO O_ID + VALUES (2, + "53446f65-84b1-424b-bc68-cf0164d24a57"); +INSERT INTO PE_PE + VALUES ("749e0026-f26e-4df3-a33c-1a16c865d54a", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 9); +INSERT INTO R_REL + VALUES ("749e0026-f26e-4df3-a33c-1a16c865d54a", + 2, + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_SIMP + VALUES ("749e0026-f26e-4df3-a33c-1a16c865d54a"); +INSERT INTO R_FORM + VALUES ("53446f65-84b1-424b-bc68-cf0164d24a57", + "749e0026-f26e-4df3-a33c-1a16c865d54a", + "6aad37f6-2c85-4cb8-991b-9d866a382f49", + 0, + 1, + ''); +INSERT INTO R_RGO + VALUES ("53446f65-84b1-424b-bc68-cf0164d24a57", + "749e0026-f26e-4df3-a33c-1a16c865d54a", + "6aad37f6-2c85-4cb8-991b-9d866a382f49"); +INSERT INTO R_OIR + VALUES ("53446f65-84b1-424b-bc68-cf0164d24a57", + "749e0026-f26e-4df3-a33c-1a16c865d54a", + "6aad37f6-2c85-4cb8-991b-9d866a382f49", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_PART + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "749e0026-f26e-4df3-a33c-1a16c865d54a", + "54f4406e-145d-46f9-b866-d68d00b6a58f", + 0, + 0, + ''); +INSERT INTO O_RTIDA + VALUES ("429f668f-92bd-4661-a074-7328a5d4e4ba", + "7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + 0, + "749e0026-f26e-4df3-a33c-1a16c865d54a", + "54f4406e-145d-46f9-b866-d68d00b6a58f"); +INSERT INTO R_RTO + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "749e0026-f26e-4df3-a33c-1a16c865d54a", + "54f4406e-145d-46f9-b866-d68d00b6a58f", + 0); +INSERT INTO R_OIR + VALUES ("7b476efe-6f27-47ac-80ba-00eca6ef4ad9", + "749e0026-f26e-4df3-a33c-1a16c865d54a", + "54f4406e-145d-46f9-b866-d68d00b6a58f", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("0065df20-dd20-47f8-80fa-f2a356522d79", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("0065df20-dd20-47f8-80fa-f2a356522d79", + "00000000-0000-0000-0000-000000000000", + 'My_Enum', + '', + ''); +INSERT INTO S_EDT + VALUES ("0065df20-dd20-47f8-80fa-f2a356522d79"); +INSERT INTO S_ENUM + VALUES ("7ca13587-746c-419d-9354-6788971215d7", + 'E1', + '', + "0065df20-dd20-47f8-80fa-f2a356522d79", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO S_ENUM + VALUES ("a66d6fac-f124-41cd-b761-c6d1f4e30b7e", + 'E2', + '', + "0065df20-dd20-47f8-80fa-f2a356522d79", + "7ca13587-746c-419d-9354-6788971215d7"); +INSERT INTO S_ENUM + VALUES ("5c83431e-8337-43e5-b316-c3b0ca1ad858", + 'E3', + '', + "0065df20-dd20-47f8-80fa-f2a356522d79", + "a66d6fac-f124-41cd-b761-c6d1f4e30b7e"); +INSERT INTO PE_PE + VALUES ("0eff6918-06c2-4e6d-ade0-a89e852c4628", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 10); +INSERT INTO CNST_CSP + VALUES ("0eff6918-06c2-4e6d-ade0-a89e852c4628", + 'My_Constants', + ''); +INSERT INTO CNST_SYC + VALUES ("fd9b7f62-283f-4fa9-ae4b-56e368f0f34f", + 'PI', + '', + "ba5eda7a-def5-0000-0000-000000000003", + "0eff6918-06c2-4e6d-ade0-a89e852c4628", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO CNST_LFSC + VALUES ("fd9b7f62-283f-4fa9-ae4b-56e368f0f34f", + "ba5eda7a-def5-0000-0000-000000000003"); +INSERT INTO CNST_LSC + VALUES ("fd9b7f62-283f-4fa9-ae4b-56e368f0f34f", + "ba5eda7a-def5-0000-0000-000000000003", + '3.14'); +INSERT INTO PE_PE + VALUES ("8d35d15f-ff91-47a8-a970-ec892e1f2714", + 1, + "96ec2ddc-da38-40da-8372-025532bfdb1d", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("8d35d15f-ff91-47a8-a970-ec892e1f2714", + "00000000-0000-0000-0000-000000000000", + 'My_Struct', + '', + ''); +INSERT INTO S_SDT + VALUES ("8d35d15f-ff91-47a8-a970-ec892e1f2714"); +INSERT INTO S_MBR + VALUES ("0af1de93-1245-4592-bc8f-6f87aa2e8982", + 'M1', + '', + "8d35d15f-ff91-47a8-a970-ec892e1f2714", + "ba5eda7a-def5-0000-0000-000000000002", + "00000000-0000-0000-0000-000000000000", + ''); +INSERT INTO S_MBR + VALUES ("e1b8b5cd-616a-49df-abce-66e959122718", + 'M2', + '', + "8d35d15f-ff91-47a8-a970-ec892e1f2714", + "ba5eda7a-def5-0000-0000-000000000002", + "0af1de93-1245-4592-bc8f-6f87aa2e8982", + ''); +INSERT INTO S_MBR + VALUES ("7cad597c-0c74-4b99-8aa6-a0ea5814bcea", + 'M3', + '', + "8d35d15f-ff91-47a8-a970-ec892e1f2714", + "ba5eda7a-def5-0000-0000-000000000002", + "e1b8b5cd-616a-49df-abce-66e959122718", + ''); +INSERT INTO PE_PE + VALUES ("96ec2ddc-da38-40da-8372-025532bfdb1d", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 7); +INSERT INTO EP_PKG + VALUES ("f70c1519-babf-4219-93e7-abd938a6ea5e", + "d8ca6d9b-7cf6-4f9b-9224-bf1bbd4de04a", + "d8ca6d9b-7cf6-4f9b-9224-bf1bbd4de04a", + 'Test_Cases', + '', + 0); +INSERT INTO GD_MD + VALUES ("07b38155-6b4a-4e98-8f8a-e6032b5ec52f", + 112, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + 108, + 0, + 0, + 1, + 1, + 1, + 12, + 1, + 0, + 0, + 0, + 0, + 0, + '', + 'Test::Test_Cases'); +INSERT INTO DIM_DIA + VALUES ("07b38155-6b4a-4e98-8f8a-e6032b5ec52f", + '', + 1.000000, + 0.000000, + 0.000000, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("d83582ce-8ebd-4c19-975b-db17b819e783", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("d83582ce-8ebd-4c19-975b-db17b819e783", + "00000000-0000-0000-0000-000000000000", + 'Test', + '', + 'rc = True; + +if ::Test_Array() + LOG::LogSuccess(message: "Test_Array"); +else + LOG::LogFailure(message: "Test_Array"); + rc = False; +end if; + + +if ::Test_Break_For_Each() + LOG::LogSuccess(message: "Test_Break_For_Each"); +else + LOG::LogFailure(message: "Test_Break_For_Each"); + rc = False; +end if; + + +if ::Test_Break_While() + LOG::LogSuccess(message: "Test_Break_While"); +else + LOG::LogFailure(message: "Test_Break_While"); + rc = False; +end if; + +if ::Test_Continue_For_Each() + LOG::LogSuccess(message: "Test_Continue_For_Each"); +else + LOG::LogFailure(message: "Test_Continue_For_Each"); + rc = False; +end if; + +if ::Test_Continue_While() + LOG::LogSuccess(message: "Test_Continue_While"); +else + LOG::LogFailure(message: "Test_Continue_While"); + rc = False; +end if; + +if ::Test_Create_Object() + LOG::LogSuccess(message: "Test_Create_Object"); +else + LOG::LogFailure(message: "Test_Create_Object"); + rc = False; +end if; + +if ::Test_Create_Object_No_Var() + LOG::LogSuccess(message: "Test_Create_Object_No_Var"); +else + LOG::LogFailure(message: "Test_Create_Object_No_Var"); + rc = False; +end if; + +if ::Test_Delete_Object() + LOG::LogSuccess(message: "Test_Delete_Object"); +else + LOG::LogFailure(message: "Test_Delete_Object"); + rc = False; +end if; + +if ::Test_ElIf() + LOG::LogSuccess(message: "Test_ElIf"); +else + LOG::LogFailure(message: "Test_ElIf"); + rc = False; +end if; + +if ::Test_Else() + LOG::LogSuccess(message: "Test_Else"); +else + LOG::LogFailure(message: "Test_Else"); + rc = False; +end if; + +if ::Test_If() + LOG::LogSuccess(message: "Test_If"); +else + LOG::LogFailure(message: "Test_If"); + rc = False; +end if; + +if ::Test_Invoke() + LOG::LogSuccess(message: "Test_Invoke"); +else + LOG::LogFailure(message: "Test_Invoke"); + rc = False; +end if; + +if ::Test_Literals() + LOG::LogSuccess(message: "Test_Literals"); +else + LOG::LogFailure(message: "Test_Literals"); + rc = False; +end if; + +if ::Test_Relate() + LOG::LogSuccess(message: "Test_Relate"); +else + LOG::LogFailure(message: "Test_Relate"); + rc = False; +end if; + +if ::Test_Relate_Using() + LOG::LogSuccess(message: "Test_Relate_Using"); +else + LOG::LogFailure(message: "Test_Relate_Using"); + rc = False; +end if; + +if ::Test_Related_Where() + LOG::LogSuccess(message: "Test_Related_Where"); +else + LOG::LogFailure(message: "Test_Related_Where"); + rc = False; +end if; + +if ::Test_Unrelate() + LOG::LogSuccess(message: "Test_Unrelate"); +else + LOG::LogFailure(message: "Test_Unrelate"); + rc = False; +end if; + +if ::Test_Unrelate_Using() + LOG::LogSuccess(message: "Test_Unrelate_Using"); +else + LOG::LogFailure(message: "Test_Unrelate_Using"); + rc = False; +end if; + +if ::Test_Where() + LOG::LogSuccess(message: "Test_Where"); +else + LOG::LogFailure(message: "Test_Where"); + rc = False; +end if; + +return rc; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("79148343-ecb1-4291-8aab-cbc60fd2e85c", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("79148343-ecb1-4291-8aab-cbc60fd2e85c", + "00000000-0000-0000-0000-000000000000", + 'Test_Break_While', + '', + 'Loop_Count = 0; +Iter_Count = 0; +while Loop_Count < 10 + Loop_Count = Loop_Count + 1; + if Loop_Count <= 5 + continue; + end if; + + Iter_Count = Iter_Count + 1; +end while; + +return Iter_Count == 5; + +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("1f9ed69b-ae26-414f-9d53-36e843a37d9f", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("1f9ed69b-ae26-414f-9d53-36e843a37d9f", + "00000000-0000-0000-0000-000000000000", + 'Test_Continue_While', + '', + 'Loop_Count = 0; + +while True + Loop_Count = Loop_Count + 1; + if Loop_Count == 10 + break; + end if; +end while; + +return Loop_Count == 10; + +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("a7424729-766b-4f97-8045-a080603ba46d", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("a7424729-766b-4f97-8045-a080603ba46d", + "00000000-0000-0000-0000-000000000000", + 'Test_Control_Stop', + '', + 'control stop; +return False;', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("d059230f-8b33-49c5-bd1f-134ff65880fd", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("d059230f-8b33-49c5-bd1f-134ff65880fd", + "00000000-0000-0000-0000-000000000000", + 'Test_Create_Object', + '', + 'create object instance inst of Class; +return not_empty inst; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("4ac9fddb-6b8a-41f5-861a-1b05a3128760", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("4ac9fddb-6b8a-41f5-861a-1b05a3128760", + "00000000-0000-0000-0000-000000000000", + 'Test_Create_Object_No_Var', + '', + 'select many Classes from instances of Class; +count = cardinality Classes; + +create object instance of Class; +create object instance of Class; +create object instance of Class; + +select many Classes from instances of Class; +return (count + 3) == (cardinality Classes); +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("fbceceb0-b1aa-411f-8fbb-2806dfa0e80e", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("fbceceb0-b1aa-411f-8fbb-2806dfa0e80e", + "00000000-0000-0000-0000-000000000000", + 'Test_Delete_Object', + '', + 'select many Classes from instances of Class; +count = cardinality Classes; + +create object instance inst of Class; +delete object instance inst; + +select many Classes from instances of Class; +return count == cardinality Classes; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("b3e8b823-6b8b-4170-ba05-af5a65de4578", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("b3e8b823-6b8b-4170-ba05-af5a65de4578", + "00000000-0000-0000-0000-000000000000", + 'Test_For_Each', + '', + 'create object instance of Class; +create object instance of Class; +create object instance of Class; + +select many insts from instances of Class; +count = 0; + +for each inst in insts + count = count + 1; +end for; + +return count == cardinality insts; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("6208aacb-10ee-4c47-984f-cfa10777df18", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("6208aacb-10ee-4c47-984f-cfa10777df18", + "00000000-0000-0000-0000-000000000000", + 'Test_Break_For_Each', + '', + 'create object instance of Class; +create object instance of Class; +create object instance of Class; + +select many insts from instances of Class; +count = 0; + +for each inst in insts + count = count + 1; + if count == 2 + break; + end if; +end for; + +return count == 2; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("9de8d2c7-3e23-4a25-a241-1f3ce4099550", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("9de8d2c7-3e23-4a25-a241-1f3ce4099550", + "00000000-0000-0000-0000-000000000000", + 'Test_Continue_For_Each', + '', + 'create object instance of Class; +create object instance of Class; +create object instance of Class; + +select many insts from instances of Class; +count = 0; +chosen = 0; + +for each inst in insts + count = count + 1; + if count > cardinality insts - 2 + chosen = chosen + 1; + end if; +end for; + +return chosen == 2; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("dc841230-2fa3-457d-a050-1473a55927e0", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("dc841230-2fa3-457d-a050-1473a55927e0", + "00000000-0000-0000-0000-000000000000", + 'Test_If', + '', + 'if True + return True; +elif False + return False; +else + return False; +end if; + +return False; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("04773d46-44ff-4616-aca7-fa5b9ed7f004", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("04773d46-44ff-4616-aca7-fa5b9ed7f004", + "00000000-0000-0000-0000-000000000000", + 'Test_ElIf', + '', + 'if False + return False; +elif True + return True; +else + return False; +end if; + +return False; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("9c26c61e-3850-499e-ac88-74a1b5f3d2a2", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("9c26c61e-3850-499e-ac88-74a1b5f3d2a2", + "00000000-0000-0000-0000-000000000000", + 'Test_Else', + '', + 'if False + return False; +elif False + return False; +else + return True; +end if; + +return False; +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("06471909-c97f-414d-b2e2-99efa7b07984", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("06471909-c97f-414d-b2e2-99efa7b07984", + "00000000-0000-0000-0000-000000000000", + 'Test_Relate_Using', + '', + 'create object instance inst1 of Class; +create object instance inst2 of Class; +create object instance assoc of Assoc; + +relate inst1 to inst2 across R1.''one'' using assoc; + +return (assoc.Other_ID == inst1.ID); +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("c16f0659-2296-4833-b7ba-c47b981cc083", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("c16f0659-2296-4833-b7ba-c47b981cc083", + "00000000-0000-0000-0000-000000000000", + 'Test_Relate', + '', + 'create object instance cls of Class; +create object instance other_cls of Other_Class; +relate cls to other_cls across R2; + +return cls.ID == other_cls.Class_ID; + +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("68c929c4-1c74-4098-a42a-c5556b0e9027", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("68c929c4-1c74-4098-a42a-c5556b0e9027", + "00000000-0000-0000-0000-000000000000", + 'Test_Unrelate', + '', + 'create object instance cls of Class; +create object instance other_cls of Other_Class; +relate cls to other_cls across R2; + +select one inst related by cls->Other_Class[R2]; +if empty inst + return False; +end if; + + +unrelate cls from other_cls across R2; + +select one inst related by cls->Other_Class[R2]; +return empty inst; + + +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("e01ab4f8-fbe8-4e44-8740-2c6ddd206922", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("e01ab4f8-fbe8-4e44-8740-2c6ddd206922", + "00000000-0000-0000-0000-000000000000", + 'Test_Unrelate_Using', + '', + 'create object instance inst1 of Class; +create object instance inst2 of Class; +create object instance assoc of Assoc; + +relate inst1 to inst2 across R1.''one'' using assoc; + +select one inst related by inst1->Assoc[R1.''other'']; +if empty inst + return False; +end if; + +unrelate inst1 from inst2 across R1.''one'' using assoc; + +select one inst related by inst1->Assoc[R1.''other'']; + +return empty inst; + +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("5f789389-381f-4191-9e54-b026a8d23e8e", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("5f789389-381f-4191-9e54-b026a8d23e8e", + "00000000-0000-0000-0000-000000000000", + 'Test_Literals', + '', + 'if 0 > 1 + return False; +end if; + +if "s1" == "s2" + return False; +end if; + +if 1.0 < 0.0 + return False; +end if; + +if True == False + return False; +end if; + +if 3.0 > PI + return False; +end if; + +if 3.2 < PI + return False; +end if; + +if My_Enum::E1 == My_Enum::E2 + return False; +end if; + +return True;', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("48f306e1-877a-4e2b-83a8-4c8803fd77e3", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("48f306e1-877a-4e2b-83a8-4c8803fd77e3", + "00000000-0000-0000-0000-000000000000", + 'Test_Array', + '', + 'Array[10][10] = 10; +Array[10][9] = 9; +Array[10][8] = 8; + +if Array[10][9] != 9 + return False; +end if; + +return True; + + +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("2d12fbab-0014-4ebd-9831-65935a36a401", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("2d12fbab-0014-4ebd-9831-65935a36a401", + "00000000-0000-0000-0000-000000000000", + 'Test_Invoke', + '', + 'transform Class::Transform_Function(); + +if 3 != Class::Class_Based_Operation(P1: 1, P2: 2) + return False; +end if; + +create object instance inst of Class; +if 44 != inst.Instance_Based_Operation(P1: 1, P2: 1) + return False; +end if; + + +return True;', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("d2d385ce-dd8e-4556-97ad-59746c93516b", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("d2d385ce-dd8e-4556-97ad-59746c93516b", + "00000000-0000-0000-0000-000000000000", + 'Test_Where', + '', + 'create object instance inst1 of Class; +create object instance inst2 of Class; + +select any inst from instances of Class where (False); +if not_empty inst + return False; +end if; + +select any inst3 from instances of Class where (selected.ID == inst1.ID); + +return inst1.ID == inst3.ID; + +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("bed3ece3-e50c-453f-aa1d-03ad64f60cdf", + 1, + "f70c1519-babf-4219-93e7-abd938a6ea5e", + "00000000-0000-0000-0000-000000000000", + 1); +INSERT INTO S_SYNC + VALUES ("bed3ece3-e50c-453f-aa1d-03ad64f60cdf", + "00000000-0000-0000-0000-000000000000", + 'Test_Related_Where', + '', + 'create object instance inst1 of Class; +create object instance inst2 of Other_Class; + +relate inst1 to inst2 across R2; + +select one inst related by inst2->Class[R2] where (False); +if not_empty inst + return False; +end if; + +select one inst3 related by inst2->Class[R2] where (selected.ID == inst1.ID); + +return inst1.ID == inst3.ID; + +', + "ba5eda7a-def5-0000-0000-000000000001", + 1, + '', + 0); +INSERT INTO PE_PE + VALUES ("f70c1519-babf-4219-93e7-abd938a6ea5e", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 7); +INSERT INTO GD_GE + VALUES ("bf019bfd-2759-48e0-a435-8c2cc80314df", + "42f26458-c76d-4c4d-9a77-185fb21c49aa", + "96ec2ddc-da38-40da-8372-025532bfdb1d", + 108, + 0, + 'Test::Stimuli'); +INSERT INTO GD_SHP + VALUES ("bf019bfd-2759-48e0-a435-8c2cc80314df"); +INSERT INTO GD_NCS + VALUES ("bf019bfd-2759-48e0-a435-8c2cc80314df"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "bf019bfd-2759-48e0-a435-8c2cc80314df"); +INSERT INTO DIM_GE + VALUES (220.000000, + 0.000000, + "bf019bfd-2759-48e0-a435-8c2cc80314df", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("bf019bfd-2759-48e0-a435-8c2cc80314df", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_GE + VALUES ("8d93b8a9-a6fe-4f59-8997-dabb2df460a0", + "42f26458-c76d-4c4d-9a77-185fb21c49aa", + "f70c1519-babf-4219-93e7-abd938a6ea5e", + 108, + 0, + 'Test::Test_Cases'); +INSERT INTO GD_SHP + VALUES ("8d93b8a9-a6fe-4f59-8997-dabb2df460a0"); +INSERT INTO GD_NCS + VALUES ("8d93b8a9-a6fe-4f59-8997-dabb2df460a0"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "8d93b8a9-a6fe-4f59-8997-dabb2df460a0"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "8d93b8a9-a6fe-4f59-8997-dabb2df460a0", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("8d93b8a9-a6fe-4f59-8997-dabb2df460a0", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO S_SYS_PROXY + VALUES ("d8ca6d9b-7cf6-4f9b-9224-bf1bbd4de04a", + 'Test', + 1, + '../Test.xtuml'); +""" + + +from bridgepoint import ooaofooa + + +class TestModel(unittest.TestCase): + + def test_model(self): + l = ooaofooa.Loader(load_globals=True) + l.input(model, 'Test model') + c = l.build_component() + func = c.find_symbol('Test') + self.assertTrue(func()) + + + +if __name__ == "__main__": + #import sys;sys.argv = ['', 'Test.testName'] + unittest.main() \ No newline at end of file From 7ef93fff358114a9faa3278ffccb213421d789a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 19 May 2017 23:55:57 +0200 Subject: [PATCH 158/216] fix python3 issues --- bridgepoint/interpret.py | 9 ++++++--- bridgepoint/ooaofooa.py | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/bridgepoint/interpret.py b/bridgepoint/interpret.py index 7cd8e4e..e526c07 100644 --- a/bridgepoint/interpret.py +++ b/bridgepoint/interpret.py @@ -22,10 +22,11 @@ import optparse import functools -import oal -import ooaofooa import xtuml +from bridgepoint import oal +from bridgepoint import ooaofooa + from functools import partial @@ -154,7 +155,9 @@ def accept_BodyNode(self, node): try: self.accept(node.block) - except ReturnException, StopException: + except ReturnException: + pass + except StopException: pass self.symtab.leave_scope() diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 042c653..1e10f2b 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -27,7 +27,7 @@ from xtuml import navigate_subtype as subtype from xtuml import where_eq as where -import interpret +from bridgepoint import interpret logger = logging.getLogger(__name__) From 0771bc75172580184434d9d779a6cf82438edd24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 19 May 2017 23:58:28 +0200 Subject: [PATCH 159/216] fix import issues --- bridgepoint/interpret.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bridgepoint/interpret.py b/bridgepoint/interpret.py index e526c07..6192ade 100644 --- a/bridgepoint/interpret.py +++ b/bridgepoint/interpret.py @@ -25,7 +25,6 @@ import xtuml from bridgepoint import oal -from bridgepoint import ooaofooa from functools import partial @@ -560,6 +559,7 @@ def main(): } logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG)) + from bridgepoint import ooaofooa mm = ooaofooa.load_metamodel(args) domain = ooaofooa.mk_component(mm, derived_attributes=False) From d23b66fdb8737352e0d7a595c0ddc5f93376542b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 01:00:15 +0200 Subject: [PATCH 160/216] interpret: support assigning values to fields --- bridgepoint/interpret.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bridgepoint/interpret.py b/bridgepoint/interpret.py index 6192ade..644b1d2 100644 --- a/bridgepoint/interpret.py +++ b/bridgepoint/interpret.py @@ -336,7 +336,8 @@ def accept_AssignmentNode(self, node): def accept_FieldAccessNode(self, node): handle = self.accept(node.handle).fget() - return property(lambda: getattr(handle, node.name)) + return property(fget=lambda: getattr(handle, node.name), + fset=lambda value: setattr(handle, node.name, value)) def accept_IndexAccessNode(self, node, default=None): index = self.accept(node.expression).fget() From df012a7c05b72d8849f6786cab1cba8218bcc5fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 01:01:00 +0200 Subject: [PATCH 161/216] interpret: allow selecting component to execute --- bridgepoint/interpret.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bridgepoint/interpret.py b/bridgepoint/interpret.py index 644b1d2..691fe9e 100644 --- a/bridgepoint/interpret.py +++ b/bridgepoint/interpret.py @@ -25,6 +25,7 @@ import xtuml from bridgepoint import oal +from xtuml import where_eq as where from functools import partial @@ -545,7 +546,11 @@ def main(): default=1, help="increase debug logging level") parser.add_option("-f", "--function", dest='function', action="store", - metavar='NAME', help="invoke function named NAME") + help="invoke function named NAME", metavar='NAME') + + parser.add_option("-c", "--component", dest='component', action="store", + help="look for the function in a component named NAME", + metavar='NAME', default=None) (opts, args) = parser.parse_args() if len(args) == 0 or not opts.function: @@ -562,7 +567,8 @@ def main(): from bridgepoint import ooaofooa mm = ooaofooa.load_metamodel(args) - domain = ooaofooa.mk_component(mm, derived_attributes=False) + c_c = mm.select_any('C_C', where(Name=opts.component)) + domain = ooaofooa.mk_component(mm, c_c, derived_attributes=False) func = domain.find_symbol(opts.function) return func() From b3ee5e6c7eda7e068aa2fb62a083821859192abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 01:23:37 +0200 Subject: [PATCH 162/216] ooaofooa: display warning on unformalized associations --- bridgepoint/ooaofooa.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 1e10f2b..d648430 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3396,7 +3396,7 @@ def mk_simple_association(m, inst): r_part = one(inst).R_PART[207]() if None in [r_form, r_part]: - logger.info('Omitting unformalized association R%s' % (r_rel.Numb)) + logger.warning('Omitting unformalized association R%s' % (r_rel.Numb)) return r_rgo = one(r_form).R_RGO[205]() From 0c41664b330bf32513ecad39cc65b46b246b244a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 09:13:00 +0200 Subject: [PATCH 163/216] ooaofooa: populate unformalized associations correctly --- bridgepoint/ooaofooa.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index d648430..5e34b66 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3395,13 +3395,14 @@ def mk_simple_association(m, inst): r_form = one(inst).R_FORM[208]() r_part = one(inst).R_PART[207]() - if None in [r_form, r_part]: - logger.warning('Omitting unformalized association R%s' % (r_rel.Numb)) - return - r_rgo = one(r_form).R_RGO[205]() r_rto = one(r_part).R_RTO[204]() + if not r_form: + logger.info('unformalized association R%s' % (r_rel.Numb)) + r_form = one(inst).R_PART[207](lambda sel: sel != r_part) + r_rgo = one(r_form).R_RTO[204]() + source_o_obj = one(r_rgo).R_OIR[203].O_OBJ[201]() target_o_obj = one(r_rto).R_OIR[203].O_OBJ[201]() source_ids, target_ids = get_related_attributes(r_rgo, r_rto) @@ -3459,10 +3460,6 @@ def _mk_assoc(side1, side2): r_aone = one(inst).R_AONE[209]() r_aoth = one(inst).R_AOTH[210]() - if None in [r_rgo, r_aone, r_aoth]: - logger.info('Omitting unformalized association R%s' % (r_rel.Numb)) - return - _mk_assoc(r_aone, r_aoth) _mk_assoc(r_aoth, r_aone) @@ -3475,10 +3472,6 @@ def mk_subsuper_association(m, inst): r_rto = one(inst).R_SUPER[212].R_RTO[204]() target_o_obj = one(r_rto).R_OIR[203].O_OBJ[201]() - if not r_rto: - logger.info('Omitting unformalized association R%s' % (r_rel.Numb)) - return - for r_sub in many(inst).R_SUB[213](): r_rgo = one(r_sub).R_RGO[205]() From e99a07ce86c8681b537764bc141f28cb70a16a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 09:39:00 +0200 Subject: [PATCH 164/216] interpret: improve logging of errors --- bridgepoint/interpret.py | 28 +++++++++++++++++++++------- bridgepoint/oal.py | 8 +++++--- bridgepoint/ooaofooa.py | 20 ++++++++++++++------ 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/bridgepoint/interpret.py b/bridgepoint/interpret.py index 691fe9e..ed9d45e 100644 --- a/bridgepoint/interpret.py +++ b/bridgepoint/interpret.py @@ -30,6 +30,9 @@ from functools import partial +logger = logging.getLogger(__name__) + + class SymtabException(Exception): pass @@ -147,8 +150,19 @@ def __init__(self, domain): self.symtab = SymbolTable(domain) xtuml.Walker.__init__(self) + def accept(self, node, **kwargs): + try: + return xtuml.Walker.accept(self, node, **kwargs) + except xtuml.MetaException as e: + logger.error('%s:%d:%s' % (node.position.label, + node.position.start_line, + e)) + def default_accept(self, node, **kwargs): - sys.stderr.write(node.__class__.__name__ + '\n') + logger.error("%s:%d:%s '%s'" % (node.position.label, + node.position.start_line, + 'unsupported statement', + node.character_stream.splitlines()[0])) def accept_BodyNode(self, node): self.symtab.enter_scope() @@ -474,10 +488,10 @@ def accept_SelfAccessNode(self, node): return property(lambda: self.instance) -def run_operation(metaclass, action, kwargs, inst): +def run_operation(metaclass, label, action, kwargs, inst): w = OperationWalker(metaclass.metamodel, kwargs, inst) #w.visitors.append(NodePrintVisitor()) - root = oal.parse(action) + root = oal.parse(action, label) w.accept(root) return w.return_value @@ -506,10 +520,10 @@ def accept_FieldAccessNode(self, node): fset=functools.partial(setattr, inst, node.name)) -def run_derived_attribute(metaclass, action, attribute_name, inst): +def run_derived_attribute(metaclass, label, action, attribute_name, inst): w = DerivedAttributeWalker(metaclass.metamodel, attribute_name, inst) #w.visitors.append(NodePrintVisitor()) - root = oal.parse(action) + root = oal.parse(action, label) w.accept(root) return w.return_value @@ -526,10 +540,10 @@ def accept_ParamAccessNode(self, node): return property(lambda: value) -def run_function(domain, action, kwargs): +def run_function(domain, label, action, kwargs): w = FunctionWalker(domain, kwargs) #w.visitors.append(NodePrintVisitor()) - root = oal.parse(action) + root = oal.parse(action, label) w.accept(root) return w.return_value diff --git a/bridgepoint/oal.py b/bridgepoint/oal.py index 4ee9811..132bc1c 100644 --- a/bridgepoint/oal.py +++ b/bridgepoint/oal.py @@ -779,6 +779,7 @@ def set_positional_info(node, p): set positional information on a node ''' node.position = Position() + node.position.label = p.lexer.label node.position.start_stream = p.lexpos(1) node.position.start_line = p.lineno(1) node.position.start_column = find_column(p.lexer.lexdata, @@ -924,7 +925,7 @@ def __init__(self): outputdir=os.path.dirname(__file__), tabmodule='bridgepoint.__oal_parsetab') - def text_input(self, text): + def text_input(self, text, label=''): lexer = lex.lex(debuglog=logger, errorlog=logger, optimize=1, @@ -932,6 +933,7 @@ def text_input(self, text): outputdir=os.path.dirname(__file__), lextab="bridgepoint.__oal_lextab") + lexer.label = label return self.parser.parse(lexer=lexer, input=text, tracking=1) @@ -1987,13 +1989,13 @@ def p_error(self, p): raise ParseException("unknown parsing error") -def parse(action_code): +def parse(action_code, label=''): ''' Parse and construct an abstract syntax tree for text expressed in the Object Action Language (OAL). ''' parser = OALParser() - return parser.text_input(action_code + '\n') + return parser.text_input(action_code + '\n', label) if __name__ == '__main__': diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 5e34b66..c89413a 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3302,7 +3302,9 @@ def mk_enum(s_edt): def mk_function(metamodel, s_sync): action = s_sync.Action_Semantics_internal - return lambda **kwargs: interpret.run_function(metamodel, action, kwargs) + label = s_sync.Name + return lambda **kwargs: interpret.run_function(metamodel, label, + action, kwargs) def mk_constant(cnst_syc): @@ -3323,19 +3325,25 @@ def mk_constant(cnst_syc): def mk_operation(metaclass, o_tfr): + o_obj = one(o_tfr).O_OBJ[115]() action = o_tfr.Action_Semantics_internal - + label = '%s::%s' % (o_obj.Name, o_tfr.Name) + run = interpret.run_operation + if o_tfr.Instance_Based: - return lambda self, **kwargs: interpret.run_operation(metaclass, action, kwargs, self) + return lambda self, **kwargs: run(metaclass, label, action, kwargs, self) else: - fn = lambda cls, **kwargs: interpret.run_operation(metaclass, action, kwargs, None) + fn = lambda cls, **kwargs: run(metaclass, label, action, kwargs, None) return classmethod(fn) def mk_derived_attribute(metaclass, o_dbattr): - action = o_dbattr.Action_Semantics_internal o_attr = one(o_dbattr).O_BATTR[107].O_ATTR[106]() - fget = functools.partial(interpret.run_derived_attribute, metaclass, action, o_attr.Name) + o_obj = one(o_attr).O_OBJ[102]() + action = o_dbattr.Action_Semantics_internal + label = '%s::%s' % (o_obj.Name, o_attr.Name) + fget = functools.partial(interpret.run_derived_attribute, metaclass, + label, action, o_attr.Name) return property(fget) From de44d18bdd25abefb1c0e4839ae3f09bcb85eced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 09:51:07 +0200 Subject: [PATCH 165/216] cosmetics --- bridgepoint/ooaofooa.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index c89413a..330a3e6 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -3163,6 +3163,10 @@ ''' +class OoaOfOoaException(Exception): + pass + + class LOG(object): @staticmethod @@ -3199,7 +3203,7 @@ def find_symbol(self, name): try: return self.find_class(name) except: - raise Exception('Unknown symbol %s' % name) + raise OoaOfOoaException('Unknown symbol %s' % name) def is_contained_in(pe_pe, root): @@ -3293,6 +3297,9 @@ def get_related_attributes(r_rgo, r_rto): def mk_enum(s_edt): + ''' + Create a named tuple from a BridgePoint enumeration. + ''' s_dt = one(s_edt).S_DT[17]() enums = many(s_edt).S_ENUM[27]() enums = [enum.Name for enum in enums] @@ -3301,6 +3308,9 @@ def mk_enum(s_edt): def mk_function(metamodel, s_sync): + ''' + Create a python function from a BridgePoint function. + ''' action = s_sync.Action_Semantics_internal label = s_sync.Name return lambda **kwargs: interpret.run_function(metamodel, label, @@ -3308,6 +3318,9 @@ def mk_function(metamodel, s_sync): def mk_constant(cnst_syc): + ''' + Create a python value from a BridgePoint constant. + ''' s_dt = one(cnst_syc).S_DT[1500]() cnst_lsc = one(cnst_syc).CNST_LFSC[1502].CNST_LSC[1503]() @@ -3325,6 +3338,10 @@ def mk_constant(cnst_syc): def mk_operation(metaclass, o_tfr): + ''' + Create a python function that interprets that action of a BridgePoint class + operation. + ''' o_obj = one(o_tfr).O_OBJ[115]() action = o_tfr.Action_Semantics_internal label = '%s::%s' % (o_obj.Name, o_tfr.Name) @@ -3338,6 +3355,10 @@ def mk_operation(metaclass, o_tfr): def mk_derived_attribute(metaclass, o_dbattr): + ''' + Create a python property that interprets that action of a BridgePoint derived + attribute. + ''' o_attr = one(o_dbattr).O_BATTR[107].O_ATTR[106]() o_obj = one(o_attr).O_OBJ[102]() action = o_dbattr.Action_Semantics_internal @@ -3603,7 +3624,7 @@ def build_component(self, name=None, derived_attributes=False): if c_c: return mk_component(mm, c_c, derived_attributes) elif name: - raise Exception('Unable to find the component %s' % name) + raise OoaOfOoaException('Unable to find the component %s' % name) else: return mk_component(mm, c_c, derived_attributes) From 8a85e092ea91b5a67f9c75dbb4ab345791f0bced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 16:01:50 +0200 Subject: [PATCH 166/216] meta: add cardinality function that operate on instances or sets --- xtuml/meta.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/xtuml/meta.py b/xtuml/meta.py index 52a4432..31bfdbf 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -995,6 +995,19 @@ def delete(instance): return instance.__metaclass__.delete(instance) +def cardinality(instance_or_set): + ''' + Get the cardinality of an *instance_or_set*. + ''' + if not instance_or_set: + return 0 + + if isinstance(instance_or_set, Class): + return 1 + + return len(instance_or_set) + + class MetaModel(object): ''' A metamodel contains metaclasses with associations between them. From cd6ef3ba634c97eab20c9f9702188b7ea5fa0537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 16:02:56 +0200 Subject: [PATCH 167/216] interpret: improve binary and unary operator support --- bridgepoint/interpret.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bridgepoint/interpret.py b/bridgepoint/interpret.py index ed9d45e..2b4c81e 100644 --- a/bridgepoint/interpret.py +++ b/bridgepoint/interpret.py @@ -372,6 +372,7 @@ def accept_BinaryOperationNode(self, node): '-': lambda lhs, rhs: (lhs - rhs), '*': lambda lhs, rhs: (lhs * rhs), '/': lambda lhs, rhs: (lhs / rhs), + '%': lambda lhs, rhs: (lhs % rhs), '<': lambda lhs, rhs: (lhs < rhs), '<=': lambda lhs, rhs: (lhs <= rhs), '>': lambda lhs, rhs: (lhs > rhs), @@ -391,9 +392,10 @@ def accept_BinaryOperationNode(self, node): def accept_UnaryOperationNode(self, node): ops = { - '-': lambda value:-value, + '-': lambda value: -value, + '+': lambda value: +value, 'not': lambda value: not value, - 'cardinality': lambda value: len(value), + 'cardinality': lambda value: xtuml.cardinality(value), 'empty': lambda value: not value, 'not_empty': lambda value: not not value, } From 8c62838b84261c79e13105b52262a6fb1980a20b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=83=C2=B6rnblom?= Date: Sat, 20 May 2017 16:03:36 +0200 Subject: [PATCH 168/216] interpret: import support for external entities --- bridgepoint/external_entities.py | 70 ++++++++++++++++++++++++++++++++ bridgepoint/ooaofooa.py | 52 +++++++++++++++--------- 2 files changed, 102 insertions(+), 20 deletions(-) create mode 100644 bridgepoint/external_entities.py diff --git a/bridgepoint/external_entities.py b/bridgepoint/external_entities.py new file mode 100644 index 0000000..e5ef375 --- /dev/null +++ b/bridgepoint/external_entities.py @@ -0,0 +1,70 @@ +import datetime +import sys + + +class LOG(object): + + @staticmethod + def LogInteger(message): + print('LogInteger: %d' % message) + + @staticmethod + def LogInfo(message): + print('LogInfo: %s' % message) + + @staticmethod + def LogFailure(message): + print('LogFailure: %s' % message) + + @staticmethod + def LogSuccess(message): + print('LogSuccess: %s' % message) + + +class TIM(object): + + @staticmethod + def create_date(day, hour, minute, month, second, year): + return datetime.datetime(year, month, day, hour, minute, second) + + @staticmethod + def get_day(date): + return date.day + + @staticmethod + def get_month(date): + return date.month + + @staticmethod + def get_hour(date): + return date.hour + + +class ARCH(object): + + @staticmethod + def shutdown(): + sys.exit() + + +class PERSIST(object): + + @staticmethod + def commit(): + return 0 + + +class NVS(object): + + @staticmethod + def format(): + return 0 + + @staticmethod + def version(first, second): + return 0 + + @staticmethod + def checksum(first, second): + return 0 + diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 330a3e6..8b224b9 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -28,6 +28,7 @@ from xtuml import where_eq as where from bridgepoint import interpret +from bridgepoint import external_entities as builtin_ee logger = logging.getLogger(__name__) @@ -3167,25 +3168,7 @@ class OoaOfOoaException(Exception): pass -class LOG(object): - - @staticmethod - def LogInteger(message): - print('LogInteger: %d' % message) - - @staticmethod - def LogInfo(message): - print('LogInfo: %s' % message) - - @staticmethod - def LogFailure(message): - print('LogFailure: %s' % message) - - @staticmethod - def LogSuccess(message): - print('LogSuccess: %s' % message) - - + class Domain(xtuml.MetaModel): symbols = None @@ -3307,6 +3290,29 @@ def mk_enum(s_edt): return Enum(*range(len(enums))) +def mk_bridge(metamodel, s_brg): + ''' + Create a python function from a BridgePoint bridge. + ''' + action = s_brg.Action_Semantics_internal + label = s_brg.Name + return lambda **kwargs: interpret.run_function(metamodel, label, + action, kwargs) + + +def mk_external_entity(metamodel, s_ee): + bridges = many(s_ee).S_BRG[19]() + names = [brg.Name for brg in bridges] + EE = collections.namedtuple(s_ee.Key_Lett, names) + + funcs = list() + for s_brg in many(s_ee).S_BRG[19](): + fn = mk_bridge(metamodel, s_brg) + funcs.append(fn) + + return EE(*funcs) + + def mk_function(metamodel, s_sync): ''' Create a python function from a BridgePoint function. @@ -3575,7 +3581,13 @@ def mk_component(bp_model, c_c=None, derived_attributes=False): for ass in target.associations: ass.formalize() - target.add_symbol('LOG', LOG) + for s_ee in bp_model.select_many('S_EE', c_c_filt): + if s_ee.Key_Lett in ['LOG', 'ARCH', 'TIM', 'NVS', 'PERSIST']: + target.add_symbol(s_ee.Key_Lett, getattr(builtin_ee, s_ee.Key_Lett)) + + else: + ee = mk_external_entity(target, s_ee) + target.add_symbol(s_ee.Key_Lett, ee) return target From 928e67e0ef909c2c53d1f5b6efa31da655f1492a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 16:08:32 +0200 Subject: [PATCH 169/216] add cardinality to api --- docs/api-reference.rst | 1 + xtuml/__init__.py | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/api-reference.rst b/docs/api-reference.rst index 86f3f9e..bb51cb6 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -25,6 +25,7 @@ Metamodel Operations .. autofunction:: xtuml.relate .. autofunction:: xtuml.unrelate .. autofunction:: xtuml.delete +.. autofunction:: xtuml.cardinality .. autofunction:: xtuml.where_eq .. autofunction:: xtuml.sort_reflexive diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 2507cd2..5e114ac 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -73,6 +73,7 @@ from xtuml.meta import relate from xtuml.meta import unrelate from xtuml.meta import delete +from xtuml.meta import cardinality from xtuml.meta import where_eq from xtuml.meta import sort_reflexive From eaae90d6843c7678858b5696b14cadb1df3b0f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 20 May 2017 16:19:54 +0200 Subject: [PATCH 170/216] bridgepoint: add more builtin bridges to TIM --- bridgepoint/external_entities.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/bridgepoint/external_entities.py b/bridgepoint/external_entities.py index e5ef375..e507a29 100644 --- a/bridgepoint/external_entities.py +++ b/bridgepoint/external_entities.py @@ -1,5 +1,6 @@ import datetime import sys +import time class LOG(object): @@ -28,17 +29,37 @@ def create_date(day, hour, minute, month, second, year): return datetime.datetime(year, month, day, hour, minute, second) @staticmethod - def get_day(date): - return date.day + def current_date(): + return datetime.datetime.now() + + @staticmethod + def current_clock(): + return time.time() + + @staticmethod + def get_year(date): + return date.year @staticmethod def get_month(date): return date.month + @staticmethod + def get_day(date): + return date.day + @staticmethod def get_hour(date): return date.hour - + + @staticmethod + def get_minute(date): + return date.minute + + @staticmethod + def get_second(date): + return date.second + class ARCH(object): From 3ad092a09d64a3089686a495eb311b95e2fe8fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=83=C2=B6rnblom?= Date: Sun, 21 May 2017 11:11:08 +0200 Subject: [PATCH 171/216] meta: support navigation across association classes without explicitly specifying the association class --- tests/test_xtuml/test_navigate.py | 15 +++++++++++++++ tests/test_xtuml/test_phrase.py | 6 ++++++ xtuml/meta.py | 23 ++++++++++++++++++++--- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/tests/test_xtuml/test_navigate.py b/tests/test_xtuml/test_navigate.py index 6b7d1cc..a05a8fe 100644 --- a/tests/test_xtuml/test_navigate.py +++ b/tests/test_xtuml/test_navigate.py @@ -47,6 +47,21 @@ def test_navigate_suptype(self): self.assertTrue(s_cdt) self.assertIsInstance(s_cdt, self.m.find_class('S_CDT')) + def test_navigate_assoc(self): + s_sys = self.m.new('S_SYS') + g_eis = self.m.new('G_EIS') + s_dt = self.m.select_any('S_DT', xtuml.where_eq(Name='void')) + pe_pe = xtuml.navigate_one(s_dt).PE_PE[8001]() + + self.assertTrue(xtuml.relate(g_eis, s_sys, 9100)) + self.assertTrue(xtuml.relate(g_eis, pe_pe, 9100)) + + self.assertTrue(xtuml.navigate_one(s_sys).G_EIS[9100].PE_PE[9100]()) + self.assertTrue(xtuml.navigate_one(pe_pe).G_EIS[9100].S_SYS[9100]()) + + inst = xtuml.navigate_one(pe_pe).S_SYS[9100]() + self.assertEqual(inst, s_sys) + def test_navigate_none(self): self.assertIsNone(xtuml.navigate_one(None)()) self.assertIsNone(xtuml.navigate_subtype(None, 0)) diff --git a/tests/test_xtuml/test_phrase.py b/tests/test_xtuml/test_phrase.py index 0a0765e..444fb68 100644 --- a/tests/test_xtuml/test_phrase.py +++ b/tests/test_xtuml/test_phrase.py @@ -121,6 +121,12 @@ def test_relate_assoc_to_two_classes(self): self.assertTrue(relate(assoc, cls1, 1, 'one')) self.assertTrue(relate(assoc, cls2, 1, 'other')) + + self.assertTrue(one(cls1).Class[1, 'one']()) + self.assertFalse(one(cls2).Class[1, 'one']()) + + self.assertFalse(one(cls1).Class[1, 'other']()) + self.assertTrue(one(cls2).Class[1, 'other']()) def test_relate_assoc_to_two_classes_incorrectly(self): cls1 = self.m.new('Class') diff --git a/xtuml/meta.py b/xtuml/meta.py index 31bfdbf..abbcfd2 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -656,6 +656,18 @@ def select_many(self, where_clause=None): return QuerySet(s) + def _find_assoc_links(self, kind, rel_id, phrase=''): + key = (kind.upper(), rel_id, phrase) + for link in self.links.values(): + if link.rel_id != rel_id or link.phrase != phrase: + continue + + metaclass = self.metamodel.find_metaclass(link.kind) + if key in metaclass.links: + return link, metaclass.links[key] + + raise UnknownLinkException(self.kind, kind, rel_id, phrase) + def navigate(self, inst, kind, rel_id, phrase=''): ''' Navigate across a link with some *rel_id* and *phrase* that yields @@ -665,9 +677,14 @@ def navigate(self, inst, kind, rel_id, phrase=''): if key in self.links: link = self.links[key] return link.navigate(inst) - else: - raise UnknownLinkException(self.kind, kind, rel_id, phrase) - + + link1, link2 = self._find_assoc_links(kind, rel_id, phrase) + inst_set = xtuml.OrderedSet() + for inst in link1.navigate(inst): + inst_set |= link2.navigate(inst) + + return inst_set + def query(self, dictonary_of_values): ''' Query the instance pool for instances with attributes that match a given From ad1c18f84eea946c5d225e25c403579b69f317f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 21 May 2017 12:48:13 +0200 Subject: [PATCH 172/216] oal: cosmetics --- bridgepoint/oal.py | 54 +++++++++++++++++++-------------- bridgepoint/prebuild.py | 4 +-- tests/test_bridgepoint/utils.py | 2 -- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/bridgepoint/oal.py b/bridgepoint/oal.py index 132bc1c..b1e60ff 100644 --- a/bridgepoint/oal.py +++ b/bridgepoint/oal.py @@ -179,15 +179,15 @@ def children(self): class GenerateInstanceEventNode(Node): event_specification = None - variable_name = None + variable_access = None - def __init__(self, event_specification, variable_name): + def __init__(self, event_specification, variable_access): self.event_specification = event_specification - self.variable_name = variable_name + self.variable_access = variable_access @property def children(self): - return (self.event_specification,) + return (self.event_specification, self.variable_access) class CreateClassEventNode(Node): @@ -223,16 +223,16 @@ def children(self): class CreateInstanceEventNode(Node): variable_name = None event_specification = None - to_variable_name = None + to_variable_access = None - def __init__(self, variable_name, event_specification, to_variable_name): + def __init__(self, variable_name, event_specification, to_variable_access): self.variable_name = variable_name self.event_specification = event_specification - self.to_variable_name = to_variable_name + self.to_variable_access = to_variable_access @property def children(self): - return (self.event_specification,) + return (self.event_specification, self.to_variable_access) class GeneratePreexistingNode(Node): @@ -682,14 +682,6 @@ def children(self): return (self.left, self.right) -class SelfAccessNode(Node): - pass - - -class SelectedAccessNode(Node): - pass - - class VariableAccessNode(Node): variable_name = None @@ -697,6 +689,18 @@ def __init__(self, variable_name): self.variable_name = variable_name +class SelfAccessNode(VariableAccessNode): + + def __init__(self, variable_name='self'): + VariableAccessNode.__init__(self, variable_name) + + +class SelectedAccessNode(VariableAccessNode): + + def __init__(self, variable_name='selected'): + VariableAccessNode.__init__(self, variable_name) + + class ParamAccessNode(Node): variable_name = None @@ -1281,9 +1285,15 @@ def p_generate_creator_event_statement(self, p): @track_production def p_generate_instance_event_statement_1(self, p): - '''statement : GENERATE event_specification TO identifier''' + '''statement : GENERATE event_specification TO variable_access''' + p[0] = GenerateInstanceEventNode(event_specification=p[2], + variable_access=p[4]) + + @track_production + def p_generate_instance_event_statement_2(self, p): + '''statement : GENERATE event_specification TO self_access''' p[0] = GenerateInstanceEventNode(event_specification=p[2], - variable_name=p[4]) + variable_access=p[4]) @track_production def p_create_class_event_statement(self, p): @@ -1308,17 +1318,17 @@ def p_create_creator_event_statement(self, p): @track_production def p_create_instance_event_statement_1(self, p): - '''statement : CREATE EVENT INSTANCE variable_name OF event_specification TO variable_name''' + '''statement : CREATE EVENT INSTANCE variable_name OF event_specification TO variable_access''' p[0] = CreateInstanceEventNode(variable_name=p[4], event_specification=p[6], - to_variable_name=p[8]) + to_variable_access=p[8]) @track_production def p_create_instance_event_statement_2(self, p): - '''statement : CREATE EVENT INSTANCE variable_name OF event_specification TO SELF''' + '''statement : CREATE EVENT INSTANCE variable_name OF event_specification TO self_access''' p[0] = CreateInstanceEventNode(variable_name=p[4], event_specification=p[6], - to_variable_name=p[8]) + to_variable_access=p[8]) @track_production def p_generate_preexisting_event_statement(self, p): diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index 35b48e2..6dca8c9 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1137,7 +1137,7 @@ def accept_GenerateCreatorEventNode(self, node): return one(e_gsme).E_GES[703].E_ESS[701].ACT_SMT[603]() def accept_GenerateInstanceEventNode(self, node): - v_var = self.find_symbol(node, name=node.variable_name) + v_var = self.find_symbol(node, name=node.variable_access.variable_name) o_obj = one(v_var).V_INT[814].O_OBJ[818]() evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or sel.Drv_Lbl == node.event_specification.identifier + '*') @@ -1160,7 +1160,7 @@ def accept_CreateInstanceEventNode(self, node): v_var = one(v_trn).V_VAR[814]() relate(v_var, s_dt, 848) - v_var_to = self.find_symbol(node, name=node.to_variable_name) + v_var_to = self.find_symbol(node, name=node.to_variable_access.variable_name) o_obj = one(v_var_to).V_INT[814].O_OBJ[818]() evt_filter = lambda sel: (sel.Drv_Lbl == node.event_specification.identifier or sel.Drv_Lbl == node.event_specification.identifier + '*') diff --git a/tests/test_bridgepoint/utils.py b/tests/test_bridgepoint/utils.py index 4d45919..a9e3c35 100644 --- a/tests/test_bridgepoint/utils.py +++ b/tests/test_bridgepoint/utils.py @@ -78,13 +78,11 @@ def compare_GenerateCreatorEventNode(self, x, y): self.compare(x, y) def compare_GenerateInstanceEventNode(self, x, y): - self.assertEqual(x.variable_name, y.variable_name) for x, y in zip(x.children, y.children): self.compare(x, y) def compare_CreateInstanceEventNode(self, x, y): self.assertEqual(x.variable_name, y.variable_name) - self.assertEqual(x.to_variable_name, y.to_variable_name) for x, y in zip(x.children, y.children): self.compare(x, y) From 6f0349f625da845d709274f0e7b2506858fb7b1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 21 May 2017 13:57:59 +0200 Subject: [PATCH 173/216] ee: add stub for PERSIST.restore --- bridgepoint/external_entities.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bridgepoint/external_entities.py b/bridgepoint/external_entities.py index e507a29..793cf2a 100644 --- a/bridgepoint/external_entities.py +++ b/bridgepoint/external_entities.py @@ -74,6 +74,10 @@ class PERSIST(object): def commit(): return 0 + @staticmethod + def restore(): + return 0 + class NVS(object): From 1b64fd9b9936fffe64b8d1e02906ca9b268ba26f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 21 May 2017 19:34:37 +0200 Subject: [PATCH 174/216] ooaofooa: move schema to its own module --- bridgepoint/ooaofooa.py | 3139 +------------------------------------- bridgepoint/schema.py | 3149 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 3154 insertions(+), 3134 deletions(-) create mode 100644 bridgepoint/schema.py diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 8b224b9..051ae29 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -29,3146 +29,15 @@ from bridgepoint import interpret from bridgepoint import external_entities as builtin_ee - +from bridgepoint import schema logger = logging.getLogger(__name__) -__version__ = 5.2 - - -schema = ''' -CREATE TABLE ACT_ACT ( - Action_ID UNIQUE_ID, - Type STRING, - LoopLevel INTEGER, - Block_ID UNIQUE_ID, - CurrentScope_ID UNIQUE_ID, - return_value INTEGER, - Label STRING, - Parsed_Block_ID UNIQUE_ID -); -CREATE TABLE ACT_AI ( - Statement_ID UNIQUE_ID, - r_Value_ID UNIQUE_ID, - l_Value_ID UNIQUE_ID, - attributeLineNumber INTEGER, - attributeColumn INTEGER -); -CREATE TABLE ACT_BLK ( - Block_ID UNIQUE_ID, - WhereSpecOK BOOLEAN, - InWhereSpec BOOLEAN, - SelectedFound BOOLEAN, - TempBuffer STRING, - SupData1 STRING, - SupData2 STRING, - CurrentLine INTEGER, - CurrentCol INTEGER, - currentKeyLettersLineNumber INTEGER, - currentKeyLettersColumn INTEGER, - currentParameterAssignmentNameLineNumber INTEGER, - currentParameterAssignmentNameColumn INTEGER, - currentAssociationNumberLineNumber INTEGER, - currentAssociationNumberColumn INTEGER, - currentAssociationPhraseLineNumber INTEGER, - currentAssociationPhraseColumn INTEGER, - currentDataTypeNameLineNumber INTEGER, - currentDataTypeNameColumn INTEGER, - blockInStackFrameCreated BOOLEAN, - Action_ID UNIQUE_ID, - Parsed_Action_ID UNIQUE_ID -); -CREATE TABLE ACT_BRB ( - Action_ID UNIQUE_ID, - Brg_ID UNIQUE_ID -); -CREATE TABLE ACT_BRG ( - Statement_ID UNIQUE_ID, - Brg_ID UNIQUE_ID, - bridgeNameLineNumber INTEGER, - bridgeNameColumn INTEGER, - externalEntityKeyLettersLineNumber INTEGER, - externalEntityKeyLettersColumn INTEGER -); -CREATE TABLE ACT_BRK ( - Statement_ID UNIQUE_ID -); -CREATE TABLE ACT_CNV ( - Statement_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER -); -CREATE TABLE ACT_CON ( - Statement_ID UNIQUE_ID -); -CREATE TABLE ACT_CR ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - is_implicit BOOLEAN, - Obj_ID UNIQUE_ID, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER -); -CREATE TABLE ACT_CTL ( - Statement_ID UNIQUE_ID -); -CREATE TABLE ACT_DAB ( - Action_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - AttributeWritten BOOLEAN -); -CREATE TABLE ACT_DEL ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID -); -CREATE TABLE ACT_E ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - If_Statement_ID UNIQUE_ID -); -CREATE TABLE ACT_EL ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Value_ID UNIQUE_ID, - If_Statement_ID UNIQUE_ID -); -CREATE TABLE ACT_FIO ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - is_implicit BOOLEAN, - cardinality STRING, - Obj_ID UNIQUE_ID, - extentLineNumber INTEGER, - extentColumn INTEGER -); -CREATE TABLE ACT_FIW ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - is_implicit BOOLEAN, - cardinality STRING, - Where_Clause_Value_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - extentLineNumber INTEGER, - extentColumn INTEGER -); -CREATE TABLE ACT_FNB ( - Action_ID UNIQUE_ID, - Sync_ID UNIQUE_ID -); -CREATE TABLE ACT_FNC ( - Statement_ID UNIQUE_ID, - Sync_ID UNIQUE_ID, - functionNameLineNumber INTEGER, - functionNameColumn INTEGER -); -CREATE TABLE ACT_FOR ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - is_implicit BOOLEAN, - Loop_Var_ID UNIQUE_ID, - Set_Var_ID UNIQUE_ID, - Obj_ID UNIQUE_ID -); -CREATE TABLE ACT_IF ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Value_ID UNIQUE_ID, - Elif_Statement_ID UNIQUE_ID, - Else_Statement_ID UNIQUE_ID -); -CREATE TABLE ACT_IOP ( - Statement_ID UNIQUE_ID, - opNameLineNumber INTEGER, - opNameColumn INTEGER, - ownerNameLineNumber INTEGER, - ownerNameColumn INTEGER, - ProvidedOp_Id UNIQUE_ID, - RequiredOp_Id UNIQUE_ID, - Value_ID UNIQUE_ID -); -CREATE TABLE ACT_LNK ( - Link_ID UNIQUE_ID, - Rel_Phrase STRING, - Statement_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - Next_Link_ID UNIQUE_ID, - Mult INTEGER, - Obj_ID UNIQUE_ID, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - phraseLineNumber INTEGER, - phraseColumn INTEGER -); -CREATE TABLE ACT_OPB ( - Action_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID -); -CREATE TABLE ACT_POB ( - Action_ID UNIQUE_ID, - Id UNIQUE_ID -); -CREATE TABLE ACT_PSB ( - Action_ID UNIQUE_ID, - Id UNIQUE_ID -); -CREATE TABLE ACT_REL ( - Statement_ID UNIQUE_ID, - One_Side_Var_ID UNIQUE_ID, - Other_Side_Var_ID UNIQUE_ID, - relationship_phrase STRING, - Rel_ID UNIQUE_ID, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - associationPhraseLineNumber INTEGER, - associationPhraseColumn INTEGER -); -CREATE TABLE ACT_RET ( - Statement_ID UNIQUE_ID, - Value_ID UNIQUE_ID -); -CREATE TABLE ACT_ROB ( - Action_ID UNIQUE_ID, - Id UNIQUE_ID -); -CREATE TABLE ACT_RSB ( - Action_ID UNIQUE_ID, - Id UNIQUE_ID -); -CREATE TABLE ACT_RU ( - Statement_ID UNIQUE_ID, - One_Side_Var_ID UNIQUE_ID, - Other_Side_Var_ID UNIQUE_ID, - Associative_Var_ID UNIQUE_ID, - relationship_phrase STRING, - Rel_ID UNIQUE_ID, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - associationPhraseLineNumber INTEGER, - associationPhraseColumn INTEGER -); -CREATE TABLE ACT_SAB ( - Action_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Act_ID UNIQUE_ID -); -CREATE TABLE ACT_SEL ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - is_implicit BOOLEAN, - cardinality STRING, - Value_ID UNIQUE_ID -); -CREATE TABLE ACT_SGN ( - Statement_ID UNIQUE_ID, - sigNameLineNumber INTEGER, - sigNameColumn INTEGER, - ownerNameLineNumber INTEGER, - ownerNameColumn INTEGER, - ProvidedSig_Id UNIQUE_ID, - RequiredSig_Id UNIQUE_ID, - Value_ID UNIQUE_ID -); -CREATE TABLE ACT_SMT ( - Statement_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Previous_Statement_ID UNIQUE_ID, - LineNumber INTEGER, - StartPosition INTEGER, - Label STRING -); -CREATE TABLE ACT_SR ( - Statement_ID UNIQUE_ID -); -CREATE TABLE ACT_SRW ( - Statement_ID UNIQUE_ID, - Where_Clause_Value_ID UNIQUE_ID -); -CREATE TABLE ACT_TAB ( - Action_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Act_ID UNIQUE_ID -); -CREATE TABLE ACT_TFM ( - Statement_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - operationNameLineNumber INTEGER, - operationNameColumn INTEGER, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER -); -CREATE TABLE ACT_UNR ( - Statement_ID UNIQUE_ID, - One_Side_Var_ID UNIQUE_ID, - Other_Side_Var_ID UNIQUE_ID, - relationship_phrase STRING, - Rel_ID UNIQUE_ID, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - associationPhraseLineNumber INTEGER, - associationPhraseColumn INTEGER -); -CREATE TABLE ACT_URU ( - Statement_ID UNIQUE_ID, - One_Side_Var_ID UNIQUE_ID, - Other_Side_Var_ID UNIQUE_ID, - Associative_Var_ID UNIQUE_ID, - relationship_phrase STRING, - Rel_ID UNIQUE_ID, - associationNumberLineNumber INTEGER, - associationNumberColumn INTEGER, - associationPhraseLineNumber INTEGER, - associationPhraseColumn INTEGER -); -CREATE TABLE ACT_WHL ( - Statement_ID UNIQUE_ID, - Value_ID UNIQUE_ID, - Block_ID UNIQUE_ID -); -CREATE TABLE A_ACT ( - Id UNIQUE_ID -); -CREATE TABLE A_AE ( - Id UNIQUE_ID -); -CREATE TABLE A_AEA ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE A_AF ( - Id UNIQUE_ID, - Descrip STRING -); -CREATE TABLE A_AP ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE A_ATE ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE A_CTL ( - Id UNIQUE_ID -); -CREATE TABLE A_DM ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE A_E ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID, - Guard STRING, - Descrip STRING, - TargetId UNIQUE_ID, - SourceId UNIQUE_ID -); -CREATE TABLE A_FF ( - Id UNIQUE_ID, - Descrip STRING -); -CREATE TABLE A_FJ ( - Id UNIQUE_ID, - Descrip STRING, - GuardCondition STRING -); -CREATE TABLE A_GA ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE A_INI ( - Id UNIQUE_ID, - Descrip STRING -); -CREATE TABLE A_N ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID -); -CREATE TABLE A_OBJ ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE A_SS ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE BP_BP ( - Breakpoint_ID UNIQUE_ID, - enabled BOOLEAN, - condition_enabled BOOLEAN, - hit_count INTEGER, - target_hit_count INTEGER, - for_step BOOLEAN -); -CREATE TABLE BP_CON ( - Breakpoint_ID UNIQUE_ID, - Expression STRING -); -CREATE TABLE BP_EV ( - Breakpoint_ID UNIQUE_ID, - onEnqueue BOOLEAN, - onDequeue BOOLEAN, - onEventIgnored BOOLEAN, - onCantHappen BOOLEAN, - SMevt_ID UNIQUE_ID -); -CREATE TABLE BP_OAL ( - Statement_ID UNIQUE_ID, - Breakpoint_ID UNIQUE_ID -); -CREATE TABLE BP_ST ( - Breakpoint_ID UNIQUE_ID, - onEntry BOOLEAN, - onExit BOOLEAN, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID -); -CREATE TABLE CA_ACC ( - APath_ID UNIQUE_ID, - SS_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - IObj_ID UNIQUE_ID -); -CREATE TABLE CA_COMM ( - CPath_ID UNIQUE_ID, - SS_ID UNIQUE_ID -); -CREATE TABLE CA_EESMC ( - CPath_ID UNIQUE_ID, - EEmod_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - SM_ID UNIQUE_ID -); -CREATE TABLE CA_EESME ( - CPath_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID -); -CREATE TABLE CA_SMEEA ( - APath_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEmod_ID UNIQUE_ID -); -CREATE TABLE CA_SMEEC ( - CPath_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEmod_ID UNIQUE_ID -); -CREATE TABLE CA_SMEED ( - APath_ID UNIQUE_ID, - EEdi_ID UNIQUE_ID, - EE_ID UNIQUE_ID -); -CREATE TABLE CA_SMEEE ( - CPath_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEevt_ID UNIQUE_ID -); -CREATE TABLE CA_SMOA ( - APath_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - IObj_ID UNIQUE_ID -); -CREATE TABLE CA_SMOAA ( - APath_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID -); -CREATE TABLE CA_SMSMC ( - CPath_ID UNIQUE_ID, - OSM_ID UNIQUE_ID, - DSM_ID UNIQUE_ID, - OIObj_ID UNIQUE_ID, - DIObj_ID UNIQUE_ID -); -CREATE TABLE CA_SMSME ( - CPath_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID -); -CREATE TABLE CL_IC ( - Id UNIQUE_ID, - AssignedComp_Id UNIQUE_ID, - ParentComp_Id UNIQUE_ID, - Component_Package_ID UNIQUE_ID, - Mult INTEGER, - ClassifierName STRING, - Name STRING, - Descrip STRING -); -CREATE TABLE CL_IIR ( - Id UNIQUE_ID, - Ref_Id UNIQUE_ID, - CL_POR_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE CL_IP ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE CL_IPINS ( - Satisfaction_Id UNIQUE_ID, - ImportedProvision_Id UNIQUE_ID -); -CREATE TABLE CL_IR ( - Id UNIQUE_ID, - Satisfaction_Element_Id UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE CL_POR ( - CL_IC_Id UNIQUE_ID, - C_PO_Id UNIQUE_ID, - Name STRING, - Id UNIQUE_ID -); -CREATE TABLE CNST_CSP ( - Constant_Spec_ID UNIQUE_ID, - InformalGroupName STRING, - Descrip STRING -); -CREATE TABLE CNST_LFSC ( - Const_ID UNIQUE_ID, - DT_ID UNIQUE_ID -); -CREATE TABLE CNST_LSC ( - Const_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - Value STRING -); -CREATE TABLE CNST_SYC ( - Const_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID, - Constant_Spec_ID UNIQUE_ID, - Previous_Const_ID UNIQUE_ID, - Previous_DT_DT_ID UNIQUE_ID -); -CREATE TABLE COMM_LNK ( - Link_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - Numb STRING, - Descrip STRING, - StartText STRING, - EndText STRING, - isFormal BOOLEAN, - StartVisibility INTEGER, - EndVisibility INTEGER, - Start_Part_ID UNIQUE_ID, - Destination_Part_ID UNIQUE_ID -); -CREATE TABLE CSME_CIE ( - CIE_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Package_ID UNIQUE_ID, - Label STRING -); -CREATE TABLE C_AS ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Direction INTEGER, - Previous_Id UNIQUE_ID -); -CREATE TABLE C_C ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID, - NestedComponent_Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Mult INTEGER, - Root_Package_ID UNIQUE_ID, - isRealized BOOLEAN, - Realized_Class_Path STRING -); -CREATE TABLE C_DG ( - Id UNIQUE_ID, - Name STRING -); -CREATE TABLE C_EP ( - Id UNIQUE_ID, - Interface_Id UNIQUE_ID, - Direction INTEGER, - Name STRING, - Descrip STRING -); -CREATE TABLE C_I ( - Id UNIQUE_ID, - Package_ID UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE C_IO ( - Id UNIQUE_ID, - DT_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Direction INTEGER, - Return_Dimensions STRING, - Previous_Id UNIQUE_ID -); -CREATE TABLE C_IR ( - Id UNIQUE_ID, - Formal_Interface_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID, - Port_Id UNIQUE_ID -); -CREATE TABLE C_P ( - Provision_Id UNIQUE_ID, - Name STRING, - InformalName STRING, - Descrip STRING, - pathFromComponent STRING -); -CREATE TABLE C_PO ( - Id UNIQUE_ID, - Component_Id UNIQUE_ID, - Name STRING, - Mult INTEGER, - DoNotShowPortOnCanvas BOOLEAN -); -CREATE TABLE C_PP ( - PP_Id UNIQUE_ID, - Signal_Id UNIQUE_ID, - DT_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - By_Ref INTEGER, - Dimensions STRING, - Previous_PP_Id UNIQUE_ID -); -CREATE TABLE C_R ( - Requirement_Id UNIQUE_ID, - Name STRING, - Descrip STRING, - InformalName STRING, - reversePathFromComponent STRING -); -CREATE TABLE C_RID ( - Reference_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID -); -CREATE TABLE C_SF ( - Id UNIQUE_ID, - Requirement_Id UNIQUE_ID, - Provision_Id UNIQUE_ID, - Descrip STRING, - Label STRING -); -CREATE TABLE EP_PKG ( - Package_ID UNIQUE_ID, - Sys_ID UNIQUE_ID, - Direct_Sys_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Num_Rng INTEGER -); -CREATE TABLE E_CEA ( - Statement_ID UNIQUE_ID -); -CREATE TABLE E_CEC ( - Statement_ID UNIQUE_ID -); -CREATE TABLE E_CEE ( - Statement_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEevt_ID UNIQUE_ID -); -CREATE TABLE E_CEI ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID -); -CREATE TABLE E_CES ( - Statement_ID UNIQUE_ID, - is_implicit BOOLEAN, - Var_ID UNIQUE_ID -); -CREATE TABLE E_CSME ( - Statement_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID -); -CREATE TABLE E_ESS ( - Statement_ID UNIQUE_ID, - ParmListOK BOOLEAN, - PEIndicated BOOLEAN, - eventDerivedLabelLineNumber INTEGER, - eventDerivedLabelColumn INTEGER, - eventMeaningLineNumber INTEGER, - eventMeaningColumn INTEGER, - eventTargetKeyLettersLineNumber INTEGER, - eventTargetKeyLettersColumn INTEGER, - firstEventDataItemNameLineNumber INTEGER, - firstEventDataItemNameColumn INTEGER, - currentLaterEventDataItemNameLineNumber INTEGER, - currentLaterEventDataItemNameColumn INTEGER -); -CREATE TABLE E_GAR ( - Statement_ID UNIQUE_ID -); -CREATE TABLE E_GEC ( - Statement_ID UNIQUE_ID -); -CREATE TABLE E_GEE ( - Statement_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - EEevt_ID UNIQUE_ID -); -CREATE TABLE E_GEN ( - Statement_ID UNIQUE_ID, - Var_ID UNIQUE_ID -); -CREATE TABLE E_GES ( - Statement_ID UNIQUE_ID -); -CREATE TABLE E_GPR ( - Statement_ID UNIQUE_ID, - Value_ID UNIQUE_ID -); -CREATE TABLE E_GSME ( - Statement_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID -); -CREATE TABLE G_EIS ( - Element_ID UNIQUE_ID, - Sys_ID UNIQUE_ID -); -CREATE TABLE IA_UCP ( - Part_ID UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE I_AVL ( - Inst_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - Value STRING, - Label STRING, - RuntimeValue_ID UNIQUE_ID -); -CREATE TABLE I_BSF ( - Block_ID UNIQUE_ID, - Stack_Frame_ID UNIQUE_ID, - Statement_ID UNIQUE_ID, - isExecuting BOOLEAN -); -CREATE TABLE I_CIN ( - Container_ID UNIQUE_ID -); -CREATE TABLE I_DIV ( - DIV_ID UNIQUE_ID, - Event_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMedi_ID UNIQUE_ID, - RuntimeValue_ID UNIQUE_ID, - PP_Id UNIQUE_ID -); -CREATE TABLE I_EQE ( - Event_Queue_Entry_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - Event_ID UNIQUE_ID, - Next_Event_Queue_Entry_ID UNIQUE_ID -); -CREATE TABLE I_EVI ( - Event_ID UNIQUE_ID, - isExecuting BOOLEAN, - isCreation BOOLEAN, - SMevt_ID UNIQUE_ID, - Target_Inst_ID UNIQUE_ID, - nextEvent_ID UNIQUE_ID, - Sent_By_Inst_ID UNIQUE_ID, - next_self_Event_ID UNIQUE_ID, - Sent_By_CIE_ID UNIQUE_ID, - CIE_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - Originating_Execution_Engine_ID UNIQUE_ID, - Label STRING -); -CREATE TABLE I_EXE ( - Running BOOLEAN, - Execution_Engine_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - Component_Id UNIQUE_ID, - Package_ID UNIQUE_ID, - Next_Unique_ID INTEGER, - Next_Instance_ID INTEGER, - ImportedComponent_Id UNIQUE_ID, - Label STRING, - Container_ID UNIQUE_ID -); -CREATE TABLE I_ICQE ( - Stack_ID UNIQUE_ID, - Stack_Frame_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID -); -CREATE TABLE I_INS ( - Inst_ID UNIQUE_ID, - Name STRING, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - Trans_ID UNIQUE_ID, - CIE_ID UNIQUE_ID, - Label STRING, - Default_Name STRING -); -CREATE TABLE I_LIP ( - Participation_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - Inst_ID UNIQUE_ID, - Label STRING -); -CREATE TABLE I_LNK ( - Link_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - Participation_ID UNIQUE_ID, - Formalizing_Participation_ID UNIQUE_ID, - Associator_Participation_ID UNIQUE_ID -); -CREATE TABLE I_MON ( - Execution_Engine_ID UNIQUE_ID, - Inst_ID UNIQUE_ID, - enabled BOOLEAN -); -CREATE TABLE I_RCH ( - Channel_Id UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - other_Execution_Engine_ID UNIQUE_ID, - Satisfaction_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID, - Next_provider_Channel_Id UNIQUE_ID -); -CREATE TABLE I_SQE ( - Self_Queue_Entry_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - Event_ID UNIQUE_ID, - Next_Self_Queue_Entry_ID UNIQUE_ID -); -CREATE TABLE I_STACK ( - Stack_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID, - runState INTEGER, - suspendReason STRING -); -CREATE TABLE I_STF ( - Stack_Frame_ID UNIQUE_ID, - Created_For_Wired_Bridge BOOLEAN, - readyForInterrupt BOOLEAN, - Bridge_Caller_Stack_Frame_ID UNIQUE_ID, - Child_Stack_Frame_ID UNIQUE_ID, - Top_Stack_Frame_Stack_ID UNIQUE_ID, - Stack_ID UNIQUE_ID, - Inst_ID UNIQUE_ID, - Value_Q_Stack_ID UNIQUE_ID, - Blocking_Stack_Frame_ID UNIQUE_ID -); -CREATE TABLE I_TIM ( - Timer_ID UNIQUE_ID, - delay INTEGER, - running BOOLEAN, - recurring BOOLEAN, - Event_ID UNIQUE_ID, - Label STRING -); -CREATE TABLE I_VSF ( - ValueInStackFrame_ID UNIQUE_ID, - RuntimeValue_ID UNIQUE_ID, - Value_ID UNIQUE_ID, - Stack_Frame_ID UNIQUE_ID -); -CREATE TABLE L_IIR ( - Inst_ID UNIQUE_ID, - RuntimeValue_ID UNIQUE_ID, - Next_Inst_ID UNIQUE_ID -); -CREATE TABLE L_IWC ( - Local_ID UNIQUE_ID, - Inst_ID UNIQUE_ID, - Next_Inst_ID UNIQUE_ID -); -CREATE TABLE L_LCL ( - Local_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Stack_Frame_ID UNIQUE_ID, - TParm_ID UNIQUE_ID, - BParm_ID UNIQUE_ID, - SParm_ID UNIQUE_ID, - RuntimeValue_ID UNIQUE_ID -); -CREATE TABLE L_LCR ( - Local_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - RuntimeValue_ID UNIQUE_ID, - Inst_ID UNIQUE_ID -); -CREATE TABLE L_LSR ( - Local_ID UNIQUE_ID -); -CREATE TABLE L_LVL ( - Local_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - Value_ID UNIQUE_ID, - PP_Id UNIQUE_ID -); -CREATE TABLE MSG_A ( - Arg_ID UNIQUE_ID, - Informal_Msg_ID UNIQUE_ID, - Formal_Msg_ID UNIQUE_ID, - Label STRING, - Value STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN -); -CREATE TABLE MSG_AM ( - Msg_ID UNIQUE_ID, - InformalName STRING, - Descrip STRING, - GuardCondition STRING, - DurationObservation STRING, - DurationConstraint STRING, - isFormal BOOLEAN, - Label STRING, - SequenceNumb STRING -); -CREATE TABLE MSG_B ( - Msg_ID UNIQUE_ID, - Brg_ID UNIQUE_ID -); -CREATE TABLE MSG_BA ( - Arg_ID UNIQUE_ID, - BParm_ID UNIQUE_ID -); -CREATE TABLE MSG_E ( - Msg_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID -); -CREATE TABLE MSG_EA ( - Arg_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMedi_ID UNIQUE_ID -); -CREATE TABLE MSG_EPA ( - Arg_ID UNIQUE_ID, - PP_Id UNIQUE_ID -); -CREATE TABLE MSG_F ( - Msg_ID UNIQUE_ID, - Sync_ID UNIQUE_ID -); -CREATE TABLE MSG_FA ( - Arg_ID UNIQUE_ID, - SParm_ID UNIQUE_ID -); -CREATE TABLE MSG_IA ( - Arg_ID UNIQUE_ID -); -CREATE TABLE MSG_IAM ( - Msg_ID UNIQUE_ID -); -CREATE TABLE MSG_IOP ( - Msg_ID UNIQUE_ID, - Id UNIQUE_ID -); -CREATE TABLE MSG_ISM ( - Msg_ID UNIQUE_ID -); -CREATE TABLE MSG_M ( - Msg_ID UNIQUE_ID, - Receiver_Part_ID UNIQUE_ID, - Sender_Part_ID UNIQUE_ID -); -CREATE TABLE MSG_O ( - Msg_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID -); -CREATE TABLE MSG_OA ( - Arg_ID UNIQUE_ID, - TParm_ID UNIQUE_ID -); -CREATE TABLE MSG_R ( - Msg_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - GuardCondition STRING, - ResultTarget STRING, - ReturnValue STRING, - SequenceNumb STRING -); -CREATE TABLE MSG_SIG ( - Msg_ID UNIQUE_ID, - Id UNIQUE_ID -); -CREATE TABLE MSG_SM ( - Msg_ID UNIQUE_ID, - InformalName STRING, - Descrip STRING, - GuardCondition STRING, - ResultTarget STRING, - ReturnValue STRING, - isFormal BOOLEAN, - Label STRING, - SequenceNumb STRING -); -CREATE TABLE O_ATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - PAttr_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Prefix STRING, - Root_Nam STRING, - Pfx_Mode INTEGER, - DT_ID UNIQUE_ID, - Dimensions STRING, - DefaultValue STRING -); -CREATE TABLE O_BATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID -); -CREATE TABLE O_DBATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Action_Semantics_internal STRING, - Suc_Pars INTEGER -); -CREATE TABLE O_ID ( - Oid_ID INTEGER, - Obj_ID UNIQUE_ID -); -CREATE TABLE O_IOBJ ( - IObj_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Modl_Typ INTEGER, - SS_ID UNIQUE_ID, - Obj_Name STRING, - Obj_KL STRING -); -CREATE TABLE O_NBATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID -); -CREATE TABLE O_OBJ ( - Obj_ID UNIQUE_ID, - Name STRING, - Numb INTEGER, - Key_Lett STRING, - Descrip STRING, - SS_ID UNIQUE_ID -); -CREATE TABLE O_OIDA ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Oid_ID INTEGER, - localAttributeName STRING -); -CREATE TABLE O_RATTR ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - BAttr_ID UNIQUE_ID, - BObj_ID UNIQUE_ID, - Ref_Mode INTEGER, - BaseAttrName STRING -); -CREATE TABLE O_REF ( - Obj_ID UNIQUE_ID, - RObj_ID UNIQUE_ID, - ROid_ID INTEGER, - RAttr_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - ROIR_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - ARef_ID UNIQUE_ID, - PARef_ID UNIQUE_ID, - Is_Cstrd BOOLEAN, - Descrip STRING, - RObj_Name STRING, - RAttr_Name STRING, - Rel_Name STRING -); -CREATE TABLE O_RTIDA ( - Attr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Oid_ID INTEGER, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID -); -CREATE TABLE O_TFR ( - Tfr_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID, - Instance_Based INTEGER, - Action_Semantics_internal STRING, - Suc_Pars INTEGER, - Return_Dimensions STRING, - Previous_Tfr_ID UNIQUE_ID -); -CREATE TABLE O_TPARM ( - TParm_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID, - Name STRING, - DT_ID UNIQUE_ID, - By_Ref INTEGER, - Dimensions STRING, - Previous_TParm_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE PA_DIC ( - Component_Id UNIQUE_ID, - Delegation_Id UNIQUE_ID -); -CREATE TABLE PA_SIC ( - Component_Id UNIQUE_ID, - Satisfaction_Id UNIQUE_ID -); -CREATE TABLE PE_PE ( - Element_ID UNIQUE_ID, - Visibility INTEGER, - Package_ID UNIQUE_ID, - Component_ID UNIQUE_ID, - type INTEGER -); -CREATE TABLE RV_AVL ( - RuntimeValue_ID UNIQUE_ID -); -CREATE TABLE RV_CRV ( - RuntimeValue_ID UNIQUE_ID, - Execution_Engine_ID UNIQUE_ID -); -CREATE TABLE RV_IRV ( - RuntimeValue_ID UNIQUE_ID -); -CREATE TABLE RV_RVL ( - RuntimeValue_ID UNIQUE_ID, - Label STRING, - DT_ID UNIQUE_ID, - Stack_Frame_ID UNIQUE_ID -); -CREATE TABLE RV_SCV ( - RuntimeValue_ID UNIQUE_ID -); -CREATE TABLE RV_SMV ( - RuntimeValue_ID UNIQUE_ID -); -CREATE TABLE RV_SVL ( - RuntimeValue_ID UNIQUE_ID -); -CREATE TABLE RV_VIA ( - RuntimeValue_ID UNIQUE_ID, - ContainedRuntimeValue_ID UNIQUE_ID, - Index INTEGER -); -CREATE TABLE RV_VIS ( - RuntimeValue_ID UNIQUE_ID, - ContainedRuntimeValue_ID UNIQUE_ID, - Name STRING -); -CREATE TABLE R_AONE ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING -); -CREATE TABLE R_AOTH ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING -); -CREATE TABLE R_ASSOC ( - Rel_ID UNIQUE_ID -); -CREATE TABLE R_ASSR ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER -); -CREATE TABLE R_COMP ( - Rel_ID UNIQUE_ID, - Rel_Chn STRING -); -CREATE TABLE R_CONE ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING -); -CREATE TABLE R_COTH ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING -); -CREATE TABLE R_FORM ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING -); -CREATE TABLE R_OIR ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - IObj_ID UNIQUE_ID -); -CREATE TABLE R_PART ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Mult INTEGER, - Cond INTEGER, - Txt_Phrs STRING -); -CREATE TABLE R_REL ( - Rel_ID UNIQUE_ID, - Numb INTEGER, - Descrip STRING, - SS_ID UNIQUE_ID -); -CREATE TABLE R_RGO ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID -); -CREATE TABLE R_RTO ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID, - Oid_ID INTEGER -); -CREATE TABLE R_SIMP ( - Rel_ID UNIQUE_ID -); -CREATE TABLE R_SUB ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID -); -CREATE TABLE R_SUBSUP ( - Rel_ID UNIQUE_ID -); -CREATE TABLE R_SUPER ( - Obj_ID UNIQUE_ID, - Rel_ID UNIQUE_ID, - OIR_ID UNIQUE_ID -); -CREATE TABLE SM_ACT ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Suc_Pars INTEGER, - Action_Semantics_internal STRING, - Descrip STRING -); -CREATE TABLE SM_AH ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID -); -CREATE TABLE SM_ASM ( - SM_ID UNIQUE_ID, - Obj_ID UNIQUE_ID -); -CREATE TABLE SM_CH ( - SMstt_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE SM_CRTXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID -); -CREATE TABLE SM_EIGN ( - SMstt_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE SM_EVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Numb INTEGER, - Mning STRING, - Is_Lbl_U INTEGER, - Unq_Lbl STRING, - Drv_Lbl STRING, - Descrip STRING -); -CREATE TABLE SM_EVTDI ( - SMedi_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID, - Dimensions STRING, - SMevt_ID UNIQUE_ID, - Previous_SMedi_ID UNIQUE_ID -); -CREATE TABLE SM_ISM ( - SM_ID UNIQUE_ID, - Obj_ID UNIQUE_ID -); -CREATE TABLE SM_LEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID -); -CREATE TABLE SM_MEAH ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Trans_ID UNIQUE_ID -); -CREATE TABLE SM_MEALY ( - SM_ID UNIQUE_ID -); -CREATE TABLE SM_MOAH ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID -); -CREATE TABLE SM_MOORE ( - SM_ID UNIQUE_ID -); -CREATE TABLE SM_NETXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID -); -CREATE TABLE SM_NLEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - polySMevt_ID UNIQUE_ID, - polySM_ID UNIQUE_ID, - polySMspd_ID UNIQUE_ID, - Local_Meaning STRING -); -CREATE TABLE SM_NSTXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID -); -CREATE TABLE SM_PEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - localClassName STRING, - localClassKL STRING, - localEventMning STRING -); -CREATE TABLE SM_SDI ( - SMedi_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - SM_ID UNIQUE_ID -); -CREATE TABLE SM_SEME ( - SMstt_ID UNIQUE_ID, - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID -); -CREATE TABLE SM_SEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID -); -CREATE TABLE SM_SGEVT ( - SMevt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Provided_Signal_Id UNIQUE_ID, - Required_Signal_Id UNIQUE_ID, - signal_name STRING -); -CREATE TABLE SM_SM ( - SM_ID UNIQUE_ID, - Descrip STRING, - Config_ID INTEGER -); -CREATE TABLE SM_STATE ( - SMstt_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID, - Name STRING, - Numb INTEGER, - Final INTEGER -); -CREATE TABLE SM_SUPDT ( - SMspd_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Non_Local BOOLEAN -); -CREATE TABLE SM_TAH ( - Act_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - Trans_ID UNIQUE_ID -); -CREATE TABLE SM_TXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID -); -CREATE TABLE SPR_PEP ( - Id UNIQUE_ID, - ExecutableProperty_Id UNIQUE_ID, - Provision_Id UNIQUE_ID -); -CREATE TABLE SPR_PO ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - Suc_Pars INTEGER -); -CREATE TABLE SPR_PS ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - Suc_Pars INTEGER -); -CREATE TABLE SPR_REP ( - Id UNIQUE_ID, - ExecutableProperty_Id UNIQUE_ID, - Requirement_Id UNIQUE_ID -); -CREATE TABLE SPR_RO ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - Suc_Pars INTEGER -); -CREATE TABLE SPR_RS ( - Id UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - Suc_Pars INTEGER -); -CREATE TABLE SQ_AP ( - Part_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - LS_Part_ID UNIQUE_ID -); -CREATE TABLE SQ_AV ( - Av_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - Label STRING, - Value STRING, - InformalName STRING, - Informal_Part_ID UNIQUE_ID, - Formal_Part_ID UNIQUE_ID, - Descrip STRING, - isFormal BOOLEAN -); -CREATE TABLE SQ_CIP ( - Part_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Name STRING, - InformalClassName STRING, - Label STRING, - Descrip STRING, - isFormal BOOLEAN -); -CREATE TABLE SQ_COP ( - Part_ID UNIQUE_ID, - Component_Id UNIQUE_ID, - Label STRING, - InformalComponentName STRING, - Descrip STRING, - isFormal BOOLEAN -); -CREATE TABLE SQ_CP ( - Part_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Label STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN -); -CREATE TABLE SQ_CPA ( - Ia_ID UNIQUE_ID, - Name STRING, - Type STRING, - Part_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE SQ_EEP ( - Part_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Label STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN -); -CREATE TABLE SQ_FA ( - Ia_ID UNIQUE_ID -); -CREATE TABLE SQ_FAV ( - Av_ID UNIQUE_ID -); -CREATE TABLE SQ_IA ( - Ia_ID UNIQUE_ID -); -CREATE TABLE SQ_IAV ( - Av_ID UNIQUE_ID -); -CREATE TABLE SQ_LS ( - Part_ID UNIQUE_ID, - Source_Part_ID UNIQUE_ID, - Descrip STRING, - Destroyed BOOLEAN -); -CREATE TABLE SQ_P ( - Part_ID UNIQUE_ID, - Sequence_Package_ID UNIQUE_ID -); -CREATE TABLE SQ_PP ( - Part_ID UNIQUE_ID, - Package_ID UNIQUE_ID, - Label STRING, - InformalName STRING, - Descrip STRING, - isFormal BOOLEAN -); -CREATE TABLE SQ_TM ( - Mark_ID UNIQUE_ID, - Name STRING, - Part_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE SQ_TS ( - Span_ID UNIQUE_ID, - Mark_ID UNIQUE_ID, - Prev_Mark_ID UNIQUE_ID, - Name STRING, - Descrip STRING -); -CREATE TABLE S_AW ( - Brg_ID UNIQUE_ID, - Sync_ID UNIQUE_ID -); -CREATE TABLE S_BPARM ( - BParm_ID UNIQUE_ID, - Brg_ID UNIQUE_ID, - Name STRING, - DT_ID UNIQUE_ID, - By_Ref INTEGER, - Dimensions STRING, - Previous_BParm_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE S_BRG ( - Brg_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Brg_Typ INTEGER, - DT_ID UNIQUE_ID, - Action_Semantics_internal STRING, - Suc_Pars INTEGER, - Return_Dimensions STRING -); -CREATE TABLE S_CDT ( - DT_ID UNIQUE_ID, - Core_Typ INTEGER -); -CREATE TABLE S_DIM ( - elementCount INTEGER, - dimensionCount INTEGER, - Sync_ID UNIQUE_ID, - SParm_ID UNIQUE_ID, - BParm_ID UNIQUE_ID, - Brg_ID UNIQUE_ID, - Id UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - TParm_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID, - Member_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - PP_Id UNIQUE_ID, - SM_ID UNIQUE_ID, - SMedi_ID UNIQUE_ID, - DIM_ID UNIQUE_ID, - Var_ID UNIQUE_ID -); -CREATE TABLE S_DT ( - DT_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DefaultValue STRING -); -CREATE TABLE S_EDT ( - DT_ID UNIQUE_ID -); -CREATE TABLE S_EE ( - EE_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Key_Lett STRING, - Dom_ID UNIQUE_ID, - Realized_Class_Path STRING, - Label STRING, - isRealized BOOLEAN -); -CREATE TABLE S_EEDI ( - EEdi_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID -); -CREATE TABLE S_EEEDI ( - EEedi_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - DT_ID UNIQUE_ID -); -CREATE TABLE S_EEEDT ( - EE_ID UNIQUE_ID, - EEevt_ID UNIQUE_ID, - EEedi_ID UNIQUE_ID -); -CREATE TABLE S_EEEVT ( - EEevt_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Numb INTEGER, - Mning STRING, - Is_Lbl_U INTEGER, - Unq_Lbl STRING, - Drv_Lbl STRING, - Descrip STRING -); -CREATE TABLE S_EEM ( - EEmod_ID UNIQUE_ID, - EE_ID UNIQUE_ID, - Modl_Typ INTEGER, - SS_ID UNIQUE_ID -); -CREATE TABLE S_ENUM ( - Enum_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - EDT_DT_ID UNIQUE_ID, - Previous_Enum_ID UNIQUE_ID -); -CREATE TABLE S_IRDT ( - DT_ID UNIQUE_ID, - isSet BOOLEAN, - Obj_ID UNIQUE_ID -); -CREATE TABLE S_MBR ( - Member_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Parent_DT_DT_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - Previous_Member_ID UNIQUE_ID, - Dimensions STRING -); -CREATE TABLE S_SDT ( - DT_ID UNIQUE_ID -); -CREATE TABLE S_SPARM ( - SParm_ID UNIQUE_ID, - Sync_ID UNIQUE_ID, - Name STRING, - DT_ID UNIQUE_ID, - By_Ref INTEGER, - Dimensions STRING, - Previous_SParm_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE S_SYNC ( - Sync_ID UNIQUE_ID, - Dom_ID UNIQUE_ID, - Name STRING, - Descrip STRING, - Action_Semantics_internal STRING, - DT_ID UNIQUE_ID, - Suc_Pars INTEGER, - Return_Dimensions STRING -); -CREATE TABLE S_SYS ( - Sys_ID UNIQUE_ID, - Name STRING, - useGlobals BOOLEAN -); -CREATE TABLE S_UDT ( - DT_ID UNIQUE_ID, - CDT_DT_ID UNIQUE_ID, - Gen_Type INTEGER -); -CREATE TABLE UC_BA ( - Assoc_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE UC_E ( - Assoc_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE UC_G ( - Assoc_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE UC_I ( - Assoc_ID UNIQUE_ID, - Descrip STRING -); -CREATE TABLE UC_UCA ( - Assoc_ID UNIQUE_ID, - Source_Part_ID UNIQUE_ID, - Destination_Part_ID UNIQUE_ID -); -CREATE TABLE V_AER ( - Value_ID UNIQUE_ID, - Root_Value_ID UNIQUE_ID, - Index_Value_ID UNIQUE_ID -); -CREATE TABLE V_ALV ( - Value_ID UNIQUE_ID, - Array_Value_ID UNIQUE_ID -); -CREATE TABLE V_AVL ( - Value_ID UNIQUE_ID, - Root_Value_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID -); -CREATE TABLE V_BIN ( - Value_ID UNIQUE_ID, - Right_Value_ID UNIQUE_ID, - Left_Value_ID UNIQUE_ID, - Operator STRING -); -CREATE TABLE V_BRV ( - Value_ID UNIQUE_ID, - Brg_ID UNIQUE_ID, - ParmListOK BOOLEAN, - externalEntityKeyLettersLineNumber INTEGER, - externalEntityKeyLettersColumn INTEGER -); -CREATE TABLE V_EDV ( - Value_ID UNIQUE_ID -); -CREATE TABLE V_EPR ( - Value_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMedi_ID UNIQUE_ID, - PP_Id UNIQUE_ID -); -CREATE TABLE V_FNV ( - Value_ID UNIQUE_ID, - Sync_ID UNIQUE_ID, - ParmListOK BOOLEAN -); -CREATE TABLE V_INS ( - Var_ID UNIQUE_ID, - Obj_ID UNIQUE_ID -); -CREATE TABLE V_INT ( - Var_ID UNIQUE_ID, - IsImplicitInFor BOOLEAN, - Obj_ID UNIQUE_ID -); -CREATE TABLE V_IRF ( - Value_ID UNIQUE_ID, - Var_ID UNIQUE_ID -); -CREATE TABLE V_ISR ( - Value_ID UNIQUE_ID, - Var_ID UNIQUE_ID -); -CREATE TABLE V_LBO ( - Value_ID UNIQUE_ID, - Value STRING -); -CREATE TABLE V_LEN ( - Value_ID UNIQUE_ID, - Enum_ID UNIQUE_ID, - dataTypeNameLineNumber INTEGER, - dataTypeNameColumn INTEGER -); -CREATE TABLE V_LIN ( - Value_ID UNIQUE_ID, - Value STRING -); -CREATE TABLE V_LOC ( - Id UNIQUE_ID, - LineNumber INTEGER, - StartPosition INTEGER, - EndPosition INTEGER, - Var_ID UNIQUE_ID -); -CREATE TABLE V_LRL ( - Value_ID UNIQUE_ID, - Value STRING -); -CREATE TABLE V_LST ( - Value_ID UNIQUE_ID, - Value STRING -); -CREATE TABLE V_MSV ( - Value_ID UNIQUE_ID, - PEP_Id UNIQUE_ID, - REP_Id UNIQUE_ID, - ParmListOK BOOLEAN, - ownerNameLineNumber INTEGER, - ownerNameColumn INTEGER, - Target_Value_ID UNIQUE_ID -); -CREATE TABLE V_MVL ( - Value_ID UNIQUE_ID, - Root_Value_ID UNIQUE_ID, - Member_ID UNIQUE_ID, - DT_DT_ID UNIQUE_ID -); -CREATE TABLE V_PAR ( - Value_ID UNIQUE_ID, - Statement_ID UNIQUE_ID, - Invocation_Value_ID UNIQUE_ID, - Name STRING, - Next_Value_ID UNIQUE_ID, - labelLineNumber INTEGER, - labelColumn INTEGER -); -CREATE TABLE V_PVL ( - Value_ID UNIQUE_ID, - BParm_ID UNIQUE_ID, - SParm_ID UNIQUE_ID, - TParm_ID UNIQUE_ID, - PP_Id UNIQUE_ID -); -CREATE TABLE V_SCV ( - Value_ID UNIQUE_ID, - Const_ID UNIQUE_ID, - DT_ID UNIQUE_ID -); -CREATE TABLE V_SLR ( - Value_ID UNIQUE_ID, - Obj_ID UNIQUE_ID, - Attr_ID UNIQUE_ID, - Op_Value_ID UNIQUE_ID -); -CREATE TABLE V_TRN ( - Var_ID UNIQUE_ID, - DT_ID UNIQUE_ID, - Dimensions STRING -); -CREATE TABLE V_TRV ( - Value_ID UNIQUE_ID, - Tfr_ID UNIQUE_ID, - Var_ID UNIQUE_ID, - ParmListOK BOOLEAN, - modelClassKeyLettersLineNumber INTEGER, - modelClassKeyLettersColumn INTEGER -); -CREATE TABLE V_TVL ( - Value_ID UNIQUE_ID, - Var_ID UNIQUE_ID -); -CREATE TABLE V_UNY ( - Value_ID UNIQUE_ID, - Operand_Value_ID UNIQUE_ID, - Operator STRING -); -CREATE TABLE V_VAL ( - Value_ID UNIQUE_ID, - isLValue BOOLEAN, - isImplicit BOOLEAN, - LineNumber INTEGER, - StartPosition INTEGER, - EndPosition INTEGER, - firstParameterLabelLineNumber INTEGER, - firstParameterLabelColumn INTEGER, - currentLaterParameterLabelLineNumber INTEGER, - currentLaterParameterLabelColumn INTEGER, - DT_ID UNIQUE_ID, - Block_ID UNIQUE_ID -); -CREATE TABLE V_VAR ( - Var_ID UNIQUE_ID, - Block_ID UNIQUE_ID, - Name STRING, - Declared BOOLEAN, - DT_ID UNIQUE_ID -); -CREATE ROP REF_ID R10 FROM MC S_EEEVT (EE_ID) TO 1 S_EE (EE_ID); -CREATE ROP REF_ID R1000 FROM MC MSG_A (Informal_Msg_ID) TO 1C MSG_M (Msg_ID); -CREATE ROP REF_ID R1001 FROM MC MSG_A (Formal_Msg_ID) TO 1C MSG_M (Msg_ID); -CREATE ROP REF_ID R1007 FROM MC MSG_M (Sender_Part_ID) TO 1C SQ_P (Part_ID); -CREATE ROP REF_ID R1008 FROM MC MSG_M (Receiver_Part_ID) TO 1C SQ_P (Part_ID); -CREATE ROP REF_ID R1009 FROM MC MSG_E (SMevt_ID) TO 1C SM_EVT (SMevt_ID); -CREATE ROP REF_ID R101 FROM MC O_IOBJ (Obj_ID) TO 1C O_OBJ (Obj_ID); -CREATE ROP REF_ID R1010 FROM MC MSG_F (Sync_ID) TO 1C S_SYNC (Sync_ID); -CREATE ROP REF_ID R1011 FROM MC MSG_O (Tfr_ID) TO 1C O_TFR (Tfr_ID); -CREATE ROP REF_ID R1012 FROM MC MSG_B (Brg_ID) TO 1C S_BRG (Brg_ID); -CREATE ROP REF_ID R1013 FROM 1C MSG_BA (Arg_ID) TO 1 MSG_A (Arg_ID); -CREATE ROP REF_ID R1013 FROM 1C MSG_OA (Arg_ID) TO 1 MSG_A (Arg_ID); -CREATE ROP REF_ID R1013 FROM 1C MSG_FA (Arg_ID) TO 1 MSG_A (Arg_ID); -CREATE ROP REF_ID R1013 FROM 1C MSG_EA (Arg_ID) TO 1 MSG_A (Arg_ID); -CREATE ROP REF_ID R1013 FROM 1C MSG_IA (Arg_ID) TO 1 MSG_A (Arg_ID); -CREATE ROP REF_ID R1013 FROM 1C MSG_EPA (Arg_ID) TO 1 MSG_A (Arg_ID); -CREATE ROP REF_ID R1014 FROM MC MSG_BA (BParm_ID) TO 1C S_BPARM (BParm_ID); -CREATE ROP REF_ID R1015 FROM MC MSG_OA (TParm_ID) TO 1C O_TPARM (TParm_ID); -CREATE ROP REF_ID R1016 FROM MC MSG_FA (SParm_ID) TO 1C S_SPARM (SParm_ID); -CREATE ROP REF_ID R1017 FROM MC MSG_EA (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); -CREATE ROP REF_ID R1018 FROM 1C MSG_AM (Msg_ID) TO 1 MSG_M (Msg_ID); -CREATE ROP REF_ID R1018 FROM 1C MSG_SM (Msg_ID) TO 1 MSG_M (Msg_ID); -CREATE ROP REF_ID R1018 FROM 1C MSG_R (Msg_ID) TO 1 MSG_M (Msg_ID); -CREATE ROP REF_ID R1019 FROM 1C MSG_E (Msg_ID) TO 1 MSG_AM (Msg_ID); -CREATE ROP REF_ID R1019 FROM 1C MSG_IAM (Msg_ID) TO 1 MSG_AM (Msg_ID); -CREATE ROP REF_ID R1019 FROM 1C MSG_SIG (Msg_ID) TO 1 MSG_AM (Msg_ID); -CREATE ROP REF_ID R102 FROM MC O_ATTR (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R1020 FROM 1C MSG_F (Msg_ID) TO 1 MSG_SM (Msg_ID); -CREATE ROP REF_ID R1020 FROM 1C MSG_O (Msg_ID) TO 1 MSG_SM (Msg_ID); -CREATE ROP REF_ID R1020 FROM 1C MSG_B (Msg_ID) TO 1 MSG_SM (Msg_ID); -CREATE ROP REF_ID R1020 FROM 1C MSG_ISM (Msg_ID) TO 1 MSG_SM (Msg_ID); -CREATE ROP REF_ID R1020 FROM 1C MSG_IOP (Msg_ID) TO 1 MSG_SM (Msg_ID); -CREATE ROP REF_ID R1021 FROM MC MSG_SIG (Id) TO 1C C_AS (Id); -CREATE ROP REF_ID R1022 FROM MC MSG_IOP (Id) TO 1C C_IO (Id); -CREATE ROP REF_ID R1023 FROM MC MSG_EPA (PP_Id) TO 1C C_PP (PP_Id); -CREATE ROP REF_ID R103 FROM 1C O_ATTR (PAttr_ID, Obj_ID) PHRASE 'succeeds' TO 1C O_ATTR (Attr_ID, Obj_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R104 FROM MC O_ID (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R105 FROM MC O_OIDA (Oid_ID, Obj_ID) TO 1 O_ID (Oid_ID, Obj_ID); -CREATE ROP REF_ID R105 FROM MC O_OIDA (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R106 FROM 1C O_BATTR (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R106 FROM 1C O_RATTR (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R107 FROM 1C O_DBATTR (Attr_ID, Obj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R107 FROM 1C O_NBATTR (Attr_ID, Obj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R108 FROM M O_REF (Attr_ID, Obj_ID) TO 1 O_RATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R109 FROM MC R_RTO (Oid_ID, Obj_ID) TO 1C O_ID (Oid_ID, Obj_ID); -CREATE ROP REF_ID R11 FROM MC S_EEDI (EE_ID) TO 1 S_EE (EE_ID); -CREATE ROP REF_ID R110 FROM M O_RTIDA (OIR_ID, Rel_ID, Oid_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Oid_ID, Obj_ID); -CREATE ROP REF_ID R110 FROM MC O_RTIDA (Attr_ID, Oid_ID, Obj_ID) TO 1 O_OIDA (Attr_ID, Oid_ID, Obj_ID); -CREATE ROP REF_ID R1103 FROM MC A_E (TargetId) TO 1 A_N (Id); -CREATE ROP REF_ID R1104 FROM MC A_E (SourceId) TO 1 A_N (Id); -CREATE ROP REF_ID R1105 FROM 1C A_ACT (Id) TO 1 A_N (Id); -CREATE ROP REF_ID R1105 FROM 1C A_OBJ (Id) TO 1 A_N (Id); -CREATE ROP REF_ID R1105 FROM 1C A_CTL (Id) TO 1 A_N (Id); -CREATE ROP REF_ID R1106 FROM 1C A_FF (Id) TO 1 A_CTL (Id); -CREATE ROP REF_ID R1106 FROM 1C A_AF (Id) TO 1 A_CTL (Id); -CREATE ROP REF_ID R1106 FROM 1C A_INI (Id) TO 1 A_CTL (Id); -CREATE ROP REF_ID R1106 FROM 1C A_DM (Id) TO 1 A_CTL (Id); -CREATE ROP REF_ID R1106 FROM 1C A_FJ (Id) TO 1 A_CTL (Id); -CREATE ROP REF_ID R1107 FROM 1C A_AE (Id) TO 1 A_ACT (Id); -CREATE ROP REF_ID R1107 FROM 1C A_GA (Id) TO 1 A_ACT (Id); -CREATE ROP REF_ID R1107 FROM 1C A_SS (Id) TO 1 A_ACT (Id); -CREATE ROP REF_ID R111 FROM MC O_REF (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R111 FROM MC O_REF (RAttr_ID, ROIR_ID, RObj_ID, ROid_ID, Rel_ID) TO 1 O_RTIDA (Attr_ID, OIR_ID, Obj_ID, Oid_ID, Rel_ID); -CREATE ROP REF_ID R1112 FROM 1C A_ATE (Id) TO 1 A_AE (Id); -CREATE ROP REF_ID R1112 FROM 1C A_AEA (Id) TO 1 A_AE (Id); -CREATE ROP REF_ID R112 FROM 1C O_REF (PARef_ID) PHRASE 'succeeds' TO 1C O_REF (ARef_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R1128 FROM MC COMM_LNK (Rel_ID) TO 1C R_REL (Rel_ID); -CREATE ROP REF_ID R113 FROM MC O_RATTR (BAttr_ID, BObj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R1133 FROM MC COMM_LNK (Start_Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R1134 FROM MC COMM_LNK (Destination_Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R114 FROM MC O_ATTR (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R115 FROM MC O_TFR (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R116 FROM MC O_TFR (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R117 FROM MC O_TPARM (Tfr_ID) TO 1 O_TFR (Tfr_ID); -CREATE ROP REF_ID R118 FROM MC O_TPARM (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R12 FROM MC S_EEEDI (EE_ID) TO 1 S_EE (EE_ID); -CREATE ROP REF_ID R120 FROM MC S_DIM (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R1206 FROM MC UC_UCA (Source_Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R1207 FROM MC UC_UCA (Destination_Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R121 FROM MC S_DIM (TParm_ID) TO 1C O_TPARM (TParm_ID); -CREATE ROP REF_ID R1210 FROM 1C UC_E (Assoc_ID) TO 1 UC_UCA (Assoc_ID); -CREATE ROP REF_ID R1210 FROM 1C UC_G (Assoc_ID) TO 1 UC_UCA (Assoc_ID); -CREATE ROP REF_ID R1210 FROM 1C UC_I (Assoc_ID) TO 1 UC_UCA (Assoc_ID); -CREATE ROP REF_ID R1210 FROM 1C UC_BA (Assoc_ID) TO 1 UC_UCA (Assoc_ID); -CREATE ROP REF_ID R122 FROM MC S_DIM (Tfr_ID) TO 1C O_TFR (Tfr_ID); -CREATE ROP REF_ID R123 FROM MC S_IRDT (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R124 FROM 1C O_TPARM (Previous_TParm_ID) PHRASE 'succeeds' TO 1C O_TPARM (TParm_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R125 FROM 1C O_TFR (Previous_Tfr_ID) PHRASE 'succeeds' TO 1C O_TFR (Tfr_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R13 FROM MC S_EEEDT (EEedi_ID, EE_ID) TO 1 S_EEEDI (EEedi_ID, EE_ID); -CREATE ROP REF_ID R13 FROM MC S_EEEDT (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); -CREATE ROP REF_ID R1401 FROM MC EP_PKG (Sys_ID) TO 1C S_SYS (Sys_ID); -CREATE ROP REF_ID R1405 FROM MC EP_PKG (Direct_Sys_ID) TO 1 S_SYS (Sys_ID); -CREATE ROP REF_ID R15 FROM MC S_EEDI (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R1500 FROM MC CNST_SYC (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R1502 FROM 1C CNST_LFSC (Const_ID, DT_ID) TO 1 CNST_SYC (Const_ID, DT_ID); -CREATE ROP REF_ID R1503 FROM 1C CNST_LSC (Const_ID, DT_ID) TO 1 CNST_LFSC (Const_ID, DT_ID); -CREATE ROP REF_ID R1504 FROM MC CNST_SYC (Constant_Spec_ID) TO 1 CNST_CSP (Constant_Spec_ID); -CREATE ROP REF_ID R1505 FROM 1C CNST_SYC (Previous_Const_ID, Previous_DT_DT_ID) PHRASE 'succeeds' TO 1C CNST_SYC (Const_ID, DT_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R16 FROM MC S_EEEDI (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R17 FROM 1C S_CDT (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R17 FROM 1C S_UDT (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R17 FROM 1C S_EDT (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R17 FROM 1C S_SDT (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R17 FROM 1C S_IRDT (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R18 FROM MC S_UDT (CDT_DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R19 FROM MC S_BRG (EE_ID) TO 1 S_EE (EE_ID); -CREATE ROP REF_ID R20 FROM MC S_BRG (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R201 FROM M R_OIR (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R201 FROM MC R_OIR (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R202 FROM MC R_OIR (IObj_ID) TO 1C O_IOBJ (IObj_ID); -CREATE ROP REF_ID R203 FROM 1C R_RTO (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R203 FROM 1C R_RGO (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R203 FROM 1C R_CONE (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R203 FROM 1C R_COTH (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R204 FROM 1C R_SUPER (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R204 FROM 1C R_PART (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R204 FROM 1C R_AONE (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R204 FROM 1C R_AOTH (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R205 FROM 1C R_SUB (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R205 FROM 1C R_FORM (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R205 FROM 1C R_ASSR (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); -CREATE ROP REF_ID R206 FROM 1C R_SIMP (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R206 FROM 1C R_COMP (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R206 FROM 1C R_ASSOC (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R206 FROM 1C R_SUBSUP (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R207 FROM M R_PART (Rel_ID) TO 1 R_SIMP (Rel_ID); -CREATE ROP REF_ID R208 FROM 1C R_FORM (Rel_ID) TO 1 R_SIMP (Rel_ID); -CREATE ROP REF_ID R209 FROM 1 R_AONE (Rel_ID) TO 1 R_ASSOC (Rel_ID); -CREATE ROP REF_ID R21 FROM MC S_BPARM (Brg_ID) TO 1 S_BRG (Brg_ID); -CREATE ROP REF_ID R210 FROM 1 R_AOTH (Rel_ID) TO 1 R_ASSOC (Rel_ID); -CREATE ROP REF_ID R211 FROM 1 R_ASSR (Rel_ID) TO 1 R_ASSOC (Rel_ID); -CREATE ROP REF_ID R212 FROM 1 R_SUPER (Rel_ID) TO 1 R_SUBSUP (Rel_ID); -CREATE ROP REF_ID R213 FROM MC R_SUB (Rel_ID) TO 1 R_SUBSUP (Rel_ID); -CREATE ROP REF_ID R214 FROM 1 R_CONE (Rel_ID) TO 1 R_COMP (Rel_ID); -CREATE ROP REF_ID R215 FROM 1 R_COTH (Rel_ID) TO 1 R_COMP (Rel_ID); -CREATE ROP REF_ID R22 FROM MC S_BPARM (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R24 FROM MC S_SPARM (Sync_ID) TO 1 S_SYNC (Sync_ID); -CREATE ROP REF_ID R25 FROM MC S_SYNC (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R26 FROM MC S_SPARM (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R27 FROM MC S_ENUM (EDT_DT_ID) TO 1 S_EDT (DT_ID); -CREATE ROP REF_ID R2901 FROM 1C I_LNK (Rel_ID, Participation_ID) TO 1 I_LIP (Rel_ID, Participation_ID); -CREATE ROP REF_ID R2902 FROM 1C I_LNK (Rel_ID, Formalizing_Participation_ID) TO 1 I_LIP (Rel_ID, Participation_ID); -CREATE ROP REF_ID R2903 FROM 1C I_LNK (Rel_ID, Associator_Participation_ID) TO 1C I_LIP (Rel_ID, Participation_ID); -CREATE ROP REF_ID R2904 FROM MC I_LNK (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R2906 FROM MC I_EVI (SMevt_ID) TO 1 SM_EVT (SMevt_ID); -CREATE ROP REF_ID R2907 FROM MC I_EVI (Target_Inst_ID) TO 1C I_INS (Inst_ID); -CREATE ROP REF_ID R2908 FROM 1C I_EVI (nextEvent_ID) PHRASE 'will be processed after' TO 1C I_EVI (Event_ID) PHRASE 'will be processed before'; -CREATE ROP REF_ID R2909 FROM MC I_AVL (Inst_ID) TO 1 I_INS (Inst_ID); -CREATE ROP REF_ID R2910 FROM MC I_AVL (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R2915 FROM MC I_INS (SM_ID, SMstt_ID) TO 1C SM_STATE (SM_ID, SMstt_ID); -CREATE ROP REF_ID R2923 FROM MC I_BSF (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R2923 FROM MC I_BSF (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); -CREATE ROP REF_ID R2928 FROM 1C I_STF (Child_Stack_Frame_ID) PHRASE 'next context' TO 1C I_STF (Stack_Frame_ID) PHRASE 'previous context'; -CREATE ROP REF_ID R2929 FROM 1C I_STF (Top_Stack_Frame_Stack_ID) TO 1C I_STACK (Stack_ID); -CREATE ROP REF_ID R2930 FROM 1 I_STACK (Execution_Engine_ID) TO 1C I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2931 FROM MC I_EVI (Sent_By_CIE_ID) TO 1C CSME_CIE (CIE_ID); -CREATE ROP REF_ID R2933 FROM MC I_DIV (Event_ID) TO 1 I_EVI (Event_ID); -CREATE ROP REF_ID R2934 FROM MC I_DIV (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); -CREATE ROP REF_ID R2935 FROM MC I_EVI (Target_Inst_ID) TO 1C I_INS (Inst_ID); -CREATE ROP REF_ID R2937 FROM MC I_EVI (Sent_By_Inst_ID) TO 1C I_INS (Inst_ID); -CREATE ROP REF_ID R2938 FROM MC I_EVI (CIE_ID) TO 1C CSME_CIE (CIE_ID); -CREATE ROP REF_ID R2939 FROM 1C I_EVI (next_self_Event_ID) PHRASE 'will be processed before' TO 1C I_EVI (Event_ID) PHRASE 'will be processed after'; -CREATE ROP REF_ID R2940 FROM 1C I_TIM (Event_ID) TO 1C I_EVI (Event_ID); -CREATE ROP REF_ID R2941 FROM MC I_BSF (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R2943 FROM MC I_STF (Stack_ID) TO 1C I_STACK (Stack_ID); -CREATE ROP REF_ID R2944 FROM MC I_EQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2944 FROM 1C I_EQE (Event_ID) TO 1 I_EVI (Event_ID); -CREATE ROP REF_ID R2945 FROM 1C I_EQE (Next_Event_Queue_Entry_ID) PHRASE 'follows' TO 1C I_EQE (Event_Queue_Entry_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R2946 FROM MC I_SQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2946 FROM 1C I_SQE (Event_ID) TO 1 I_EVI (Event_ID); -CREATE ROP REF_ID R2947 FROM 1C I_SQE (Next_Self_Queue_Entry_ID) PHRASE 'follows' TO 1C I_SQE (Self_Queue_Entry_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R2949 FROM 1C I_MON (Inst_ID) TO 1 I_INS (Inst_ID); -CREATE ROP REF_ID R2949 FROM MC I_MON (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2951 FROM MC I_VSF (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); -CREATE ROP REF_ID R2953 FROM MC I_INS (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); -CREATE ROP REF_ID R2954 FROM MC I_STF (Inst_ID) TO 1C I_INS (Inst_ID); -CREATE ROP REF_ID R2955 FROM MC I_EXE (Component_Id) TO 1C C_C (Id); -CREATE ROP REF_ID R2956 FROM MC I_DIV (PP_Id) TO 1C C_PP (PP_Id); -CREATE ROP REF_ID R2957 FROM MC I_INS (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2958 FROM MC I_LIP (Inst_ID) TO 1 I_INS (Inst_ID); -CREATE ROP REF_ID R2959 FROM MC I_LIP (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R2960 FROM MC CSME_CIE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2961 FROM MC CSME_CIE (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R2962 FROM MC I_INS (CIE_ID) TO 1 CSME_CIE (CIE_ID); -CREATE ROP REF_ID R2963 FROM MC I_EXE (ImportedComponent_Id) TO 1C CL_IC (Id); -CREATE ROP REF_ID R2964 FROM MC I_EVI (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2965 FROM 1C I_STF (Blocking_Stack_Frame_ID) PHRASE 'blocked by' TO 1C I_STF (Stack_Frame_ID) PHRASE 'blocks'; -CREATE ROP REF_ID R2966 FROM MC I_ICQE (Stack_ID) TO 1 I_STACK (Stack_ID); -CREATE ROP REF_ID R2966 FROM 1C I_ICQE (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); -CREATE ROP REF_ID R2967 FROM MC I_STF (Value_Q_Stack_ID) TO 1C I_STACK (Stack_ID); -CREATE ROP REF_ID R2968 FROM MC I_RCH (Execution_Engine_ID) PHRASE 'is interface provider to' TO 1 I_EXE (Execution_Engine_ID) PHRASE 'is interface requirer of'; -CREATE ROP REF_ID R2968 FROM MC I_RCH (other_Execution_Engine_ID) PHRASE 'is interface requirer of' TO 1 I_EXE (Execution_Engine_ID) PHRASE 'is interface provider to'; -CREATE ROP REF_ID R2969 FROM MC I_RCH (Satisfaction_Id) TO 1C C_SF (Id); -CREATE ROP REF_ID R2970 FROM 1C I_EXE (Package_ID) TO 1C EP_PKG (Package_ID); -CREATE ROP REF_ID R2971 FROM MC CSME_CIE (Package_ID) TO 1C EP_PKG (Package_ID); -CREATE ROP REF_ID R2972 FROM MC I_RCH (Delegation_Id) TO 1C C_DG (Id); -CREATE ROP REF_ID R2973 FROM 1C I_RCH (Next_provider_Channel_Id) PHRASE 'requirer' TO 1C I_RCH (Channel_Id) PHRASE 'provider'; -CREATE ROP REF_ID R2974 FROM 1C I_CIN (Container_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2975 FROM MC I_EXE (Container_ID) TO 1C I_CIN (Container_ID); -CREATE ROP REF_ID R2976 FROM MC I_EVI (Originating_Execution_Engine_ID) TO 1C I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2977 FROM MC I_ICQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R2978 FROM MC I_VSF (Value_ID) TO 1C V_VAL (Value_ID); -CREATE ROP REF_ID R3000 FROM MC L_LCL (Stack_Frame_ID, Block_ID) TO 1 I_BSF (Stack_Frame_ID, Block_ID); -CREATE ROP REF_ID R3001 FROM 1C L_LCR (Local_ID) TO 1 L_LCL (Local_ID); -CREATE ROP REF_ID R3001 FROM 1C L_LSR (Local_ID) TO 1 L_LCL (Local_ID); -CREATE ROP REF_ID R3001 FROM 1C L_LVL (Local_ID) TO 1 L_LCL (Local_ID); -CREATE ROP REF_ID R3003 FROM MC L_LCR (Var_ID) TO 1C V_INS (Var_ID); -CREATE ROP REF_ID R3004 FROM MC L_LCR (Var_ID) TO 1C V_INT (Var_ID); -CREATE ROP REF_ID R3005 FROM MC L_LVL (Var_ID) TO 1C V_TRN (Var_ID); -CREATE ROP REF_ID R3006 FROM 1C L_IWC (Local_ID) TO 1 L_LSR (Local_ID); -CREATE ROP REF_ID R3007 FROM MC L_LCL (SParm_ID) TO 1C S_SPARM (SParm_ID); -CREATE ROP REF_ID R3008 FROM MC L_LCL (TParm_ID) TO 1C O_TPARM (TParm_ID); -CREATE ROP REF_ID R3009 FROM MC L_LCL (BParm_ID) TO 1C S_BPARM (BParm_ID); -CREATE ROP REF_ID R3010 FROM 1C L_LVL (Value_ID) TO 1C V_VAL (Value_ID); -CREATE ROP REF_ID R3011 FROM 1C L_IIR (Next_Inst_ID, RuntimeValue_ID) PHRASE 'is before' TO 1C L_IIR (Inst_ID, RuntimeValue_ID) PHRASE 'is after'; -CREATE ROP REF_ID R3012 FROM MC L_LCR (RuntimeValue_ID, Inst_ID) TO 1C L_IIR (RuntimeValue_ID, Inst_ID); -CREATE ROP REF_ID R3013 FROM MC L_IIR (Inst_ID) TO 1C I_INS (Inst_ID); -CREATE ROP REF_ID R3014 FROM MC L_IWC (Inst_ID) TO 1 I_INS (Inst_ID); -CREATE ROP REF_ID R3016 FROM 1C L_IWC (Next_Inst_ID, Local_ID) PHRASE 'is before' TO 1C L_IWC (Inst_ID, Local_ID) PHRASE 'is after'; -CREATE ROP REF_ID R3017 FROM MC L_LVL (PP_Id) TO 1C C_PP (PP_Id); -CREATE ROP REF_ID R3100 FROM 1C BP_CON (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); -CREATE ROP REF_ID R3101 FROM 1C BP_OAL (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R3102 FROM 1C BP_OAL (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); -CREATE ROP REF_ID R3102 FROM 1C BP_EV (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); -CREATE ROP REF_ID R3102 FROM 1C BP_ST (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); -CREATE ROP REF_ID R3103 FROM 1C BP_EV (SMevt_ID) TO 1 SM_EVT (SMevt_ID); -CREATE ROP REF_ID R3104 FROM 1C BP_ST (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); -CREATE ROP REF_ID R3200 FROM 1C S_AW (Brg_ID) TO 1 S_BRG (Brg_ID); -CREATE ROP REF_ID R3201 FROM MC S_AW (Sync_ID) TO 1C S_SYNC (Sync_ID); -CREATE ROP REF_ID R3300 FROM 1C RV_SVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3300 FROM 1C RV_SMV (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3300 FROM 1C RV_AVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3301 FROM MC RV_VIS (RuntimeValue_ID) TO 1 RV_SVL (RuntimeValue_ID); -CREATE ROP REF_ID R3301 FROM 1C RV_VIS (ContainedRuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3302 FROM MC RV_VIA (RuntimeValue_ID) TO 1 RV_AVL (RuntimeValue_ID); -CREATE ROP REF_ID R3302 FROM 1C RV_VIA (ContainedRuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3303 FROM MC I_DIV (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3304 FROM MC I_AVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3305 FROM MC I_VSF (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3306 FROM MC L_LCL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); -CREATE ROP REF_ID R3307 FROM MC RV_RVL (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R3308 FROM 1C RV_SCV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); -CREATE ROP REF_ID R3308 FROM 1C RV_CRV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); -CREATE ROP REF_ID R3308 FROM 1C RV_IRV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); -CREATE ROP REF_ID R3309 FROM MC RV_CRV (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); -CREATE ROP REF_ID R3310 FROM MC RV_RVL (Stack_Frame_ID) TO 1C I_STF (Stack_Frame_ID); -CREATE ROP REF_ID R3311 FROM MC L_IIR (RuntimeValue_ID) TO 1 RV_IRV (RuntimeValue_ID); -CREATE ROP REF_ID R4002 FROM MC C_SF (Requirement_Id) TO 1 C_R (Requirement_Id); -CREATE ROP REF_ID R4002 FROM MC C_SF (Provision_Id) TO 1 C_P (Provision_Id); -CREATE ROP REF_ID R4003 FROM MC C_EP (Interface_Id) TO 1 C_I (Id); -CREATE ROP REF_ID R4004 FROM 1C C_IO (Id) TO 1 C_EP (Id); -CREATE ROP REF_ID R4004 FROM 1C C_AS (Id) TO 1 C_EP (Id); -CREATE ROP REF_ID R4006 FROM MC C_PP (Signal_Id) TO 1 C_EP (Id); -CREATE ROP REF_ID R4007 FROM MC C_PP (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R4008 FROM MC C_IO (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R4009 FROM 1C C_R (Requirement_Id) TO 1 C_IR (Id); -CREATE ROP REF_ID R4009 FROM 1C C_P (Provision_Id) TO 1 C_IR (Id); -CREATE ROP REF_ID R401 FROM 1C CA_EESMC (CPath_ID) TO 1 CA_COMM (CPath_ID); -CREATE ROP REF_ID R401 FROM 1C CA_SMEEC (CPath_ID) TO 1 CA_COMM (CPath_ID); -CREATE ROP REF_ID R401 FROM 1C CA_SMSMC (CPath_ID) TO 1 CA_COMM (CPath_ID); -CREATE ROP REF_ID R4010 FROM MC C_PO (Component_Id) TO 1 C_C (Id); -CREATE ROP REF_ID R4012 FROM MC C_IR (Formal_Interface_Id) TO 1C C_I (Id); -CREATE ROP REF_ID R4013 FROM MC C_RID (Reference_Id) TO 1 C_IR (Id); -CREATE ROP REF_ID R4013 FROM MC C_RID (Delegation_Id) TO 1 C_DG (Id); -CREATE ROP REF_ID R4014 FROM MC C_IR (Delegation_Id) TO 1C C_DG (Id); -CREATE ROP REF_ID R4016 FROM MC C_IR (Port_Id) TO 1 C_PO (Id); -CREATE ROP REF_ID R4017 FROM MC S_DIM (PP_Id) TO 1C C_PP (PP_Id); -CREATE ROP REF_ID R4018 FROM MC S_DIM (Id) TO 1C C_IO (Id); -CREATE ROP REF_ID R4019 FROM 1C C_IO (Previous_Id) PHRASE 'succeeds' TO 1C C_IO (Id) PHRASE 'precedes'; -CREATE ROP REF_ID R402 FROM MC CA_EESMC (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); -CREATE ROP REF_ID R4020 FROM 1C C_AS (Previous_Id) PHRASE 'succeeds' TO 1C C_AS (Id) PHRASE 'precedes'; -CREATE ROP REF_ID R4021 FROM 1C C_PP (Previous_PP_Id) PHRASE 'succeeds' TO 1C C_PP (PP_Id) PHRASE 'precedes'; -CREATE ROP REF_ID R403 FROM MC CA_EESMC (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R404 FROM MC CA_EESME (CPath_ID) TO 1 CA_EESMC (CPath_ID); -CREATE ROP REF_ID R405 FROM MC CA_EESME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); -CREATE ROP REF_ID R406 FROM MC CA_SMSMC (OSM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R407 FROM MC CA_SMSMC (DSM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R408 FROM MC CA_SMSME (CPath_ID) TO 1 CA_SMSMC (CPath_ID); -CREATE ROP REF_ID R409 FROM MC CA_SMSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); -CREATE ROP REF_ID R410 FROM MC CA_SMEEC (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R411 FROM MC CA_SMEEC (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); -CREATE ROP REF_ID R412 FROM MC CA_SMEEE (CPath_ID) TO 1 CA_SMEEC (CPath_ID); -CREATE ROP REF_ID R413 FROM MC CA_SMEEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); -CREATE ROP REF_ID R414 FROM MC CA_SMSMC (DIObj_ID) TO 1C O_IOBJ (IObj_ID); -CREATE ROP REF_ID R415 FROM 1C CA_SMOA (APath_ID) TO 1 CA_ACC (APath_ID); -CREATE ROP REF_ID R415 FROM 1C CA_SMEEA (APath_ID) TO 1 CA_ACC (APath_ID); -CREATE ROP REF_ID R416 FROM MC CA_ACC (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R417 FROM MC CA_SMOA (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R418 FROM MC CA_SMOAA (APath_ID, Obj_ID) TO 1 CA_SMOA (APath_ID, Obj_ID); -CREATE ROP REF_ID R419 FROM MC CA_SMOAA (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R420 FROM MC CA_SMOA (IObj_ID) TO 1C O_IOBJ (IObj_ID); -CREATE ROP REF_ID R4201 FROM MC CL_IC (AssignedComp_Id) TO 1C C_C (Id); -CREATE ROP REF_ID R421 FROM MC CA_SMEEA (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); -CREATE ROP REF_ID R422 FROM MC CA_SMEED (APath_ID, EE_ID) TO 1 CA_SMEEA (APath_ID, EE_ID); -CREATE ROP REF_ID R423 FROM MC CA_SMEED (EEdi_ID, EE_ID) TO 1 S_EEDI (EEdi_ID, EE_ID); -CREATE ROP REF_ID R424 FROM MC CA_SMSMC (OIObj_ID) TO 1C O_IOBJ (IObj_ID); -CREATE ROP REF_ID R425 FROM MC CA_ACC (IObj_ID) TO 1C O_IOBJ (IObj_ID); -CREATE ROP REF_ID R44 FROM MC S_MBR (Parent_DT_DT_ID) TO 1 S_SDT (DT_ID); -CREATE ROP REF_ID R45 FROM MC S_MBR (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R4500 FROM MC SPR_REP (ExecutableProperty_Id) TO 1 C_EP (Id); -CREATE ROP REF_ID R4500 FROM MC SPR_REP (Requirement_Id) TO 1 C_R (Requirement_Id); -CREATE ROP REF_ID R4501 FROM MC SPR_PEP (ExecutableProperty_Id) TO 1 C_EP (Id); -CREATE ROP REF_ID R4501 FROM MC SPR_PEP (Provision_Id) TO 1 C_P (Provision_Id); -CREATE ROP REF_ID R4502 FROM 1C SPR_RS (Id) TO 1 SPR_REP (Id); -CREATE ROP REF_ID R4502 FROM 1C SPR_RO (Id) TO 1 SPR_REP (Id); -CREATE ROP REF_ID R4503 FROM 1C SPR_PO (Id) TO 1 SPR_PEP (Id); -CREATE ROP REF_ID R4503 FROM 1C SPR_PS (Id) TO 1 SPR_PEP (Id); -CREATE ROP REF_ID R46 FROM 1C S_MBR (Previous_Member_ID, Parent_DT_DT_ID) PHRASE 'succeeds' TO 1C S_MBR (Member_ID, Parent_DT_DT_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R4701 FROM MC CL_IIR (Ref_Id) TO 1C C_IR (Id); -CREATE ROP REF_ID R4703 FROM 1C CL_IP (Id) TO 1 CL_IIR (Id); -CREATE ROP REF_ID R4703 FROM 1C CL_IR (Id) TO 1 CL_IIR (Id); -CREATE ROP REF_ID R4704 FROM 1C CL_IIR (Delegation_Id) TO 1C C_DG (Id); -CREATE ROP REF_ID R4705 FROM 1C CL_IPINS (Satisfaction_Id) TO 1 C_SF (Id); -CREATE ROP REF_ID R4705 FROM MC CL_IPINS (ImportedProvision_Id) TO 1 CL_IP (Id); -CREATE ROP REF_ID R4706 FROM 1C CL_IR (Satisfaction_Element_Id) TO 1C C_SF (Id); -CREATE ROP REF_ID R4707 FROM MC CL_POR (CL_IC_Id) TO 1 CL_IC (Id); -CREATE ROP REF_ID R4708 FROM MC CL_IIR (CL_POR_Id) TO 1 CL_POR (Id); -CREATE ROP REF_ID R4709 FROM MC CL_POR (C_PO_Id) TO 1C C_PO (Id); -CREATE ROP REF_ID R49 FROM MC S_DIM (BParm_ID) TO 1C S_BPARM (BParm_ID); -CREATE ROP REF_ID R50 FROM MC S_DIM (Brg_ID) TO 1C S_BRG (Brg_ID); -CREATE ROP REF_ID R501 FROM MC SM_STATE (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R502 FROM MC SM_EVT (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R503 FROM MC SM_SEME (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); -CREATE ROP REF_ID R503 FROM MC SM_SEME (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); -CREATE ROP REF_ID R504 FROM 1C SM_EIGN (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); -CREATE ROP REF_ID R504 FROM 1C SM_CH (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); -CREATE ROP REF_ID R504 FROM 1C SM_NSTXN (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); -CREATE ROP REF_ID R505 FROM MC SM_TXN (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R506 FROM MC SM_TXN (SMstt_ID, SM_ID) TO 1 SM_STATE (SMstt_ID, SM_ID); -CREATE ROP REF_ID R507 FROM 1C SM_NETXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); -CREATE ROP REF_ID R507 FROM 1C SM_CRTXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); -CREATE ROP REF_ID R507 FROM 1C SM_NSTXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); -CREATE ROP REF_ID R508 FROM MC SM_NETXN (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); -CREATE ROP REF_ID R509 FROM 1C SM_CRTXN (SM_ID, SMevt_ID) TO 1C SM_LEVT (SM_ID, SMevt_ID); -CREATE ROP REF_ID R51 FROM MC S_DIM (Sync_ID) TO 1C S_SYNC (Sync_ID); -CREATE ROP REF_ID R510 FROM 1C SM_MEALY (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R510 FROM 1C SM_MOORE (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R511 FROM MC SM_MOAH (SM_ID) TO 1 SM_MOORE (SM_ID); -CREATE ROP REF_ID R511 FROM 1C SM_MOAH (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); -CREATE ROP REF_ID R512 FROM M SM_MEAH (SM_ID) TO 1 SM_MEALY (SM_ID); -CREATE ROP REF_ID R512 FROM 1C SM_MEAH (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); -CREATE ROP REF_ID R513 FROM 1C SM_MOAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); -CREATE ROP REF_ID R513 FROM 1C SM_MEAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); -CREATE ROP REF_ID R513 FROM 1C SM_TAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); -CREATE ROP REF_ID R514 FROM 1 SM_AH (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); -CREATE ROP REF_ID R515 FROM MC SM_ACT (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R516 FROM MC SM_EVTDI (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R517 FROM 1C SM_ISM (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R517 FROM 1C SM_ASM (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R518 FROM 1C SM_ISM (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R519 FROM 1C SM_ASM (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R52 FROM MC S_DIM (SParm_ID) TO 1C S_SPARM (SParm_ID); -CREATE ROP REF_ID R520 FROM M SM_EVT (SM_ID) TO 1C SM_SUPDT (SM_ID); -CREATE ROP REF_ID R521 FROM MC SM_STATE (SM_ID) TO 1C SM_SUPDT (SM_ID); -CREATE ROP REF_ID R522 FROM MC SM_SDI (SM_ID) TO 1 SM_SUPDT (SM_ID); -CREATE ROP REF_ID R522 FROM MC SM_SDI (SM_ID, SMedi_ID) TO 1 SM_EVTDI (SM_ID, SMedi_ID); -CREATE ROP REF_ID R523 FROM MC SM_SUPDT (SM_ID) TO 1 SM_SM (SM_ID); -CREATE ROP REF_ID R524 FROM MC SM_EVTDI (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R525 FROM 1C SM_SEVT (SM_ID, SMevt_ID) TO 1 SM_EVT (SM_ID, SMevt_ID); -CREATE ROP REF_ID R525 FROM 1C SM_PEVT (SM_ID, SMevt_ID) TO 1 SM_EVT (SM_ID, SMevt_ID); -CREATE ROP REF_ID R526 FROM 1C SM_NLEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); -CREATE ROP REF_ID R526 FROM 1C SM_LEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); -CREATE ROP REF_ID R526 FROM 1C SM_SGEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); -CREATE ROP REF_ID R527 FROM MC SM_NLEVT (polySM_ID, polySMevt_ID) TO 1 SM_PEVT (SM_ID, SMevt_ID); -CREATE ROP REF_ID R528 FROM 1C SM_SGEVT (Provided_Signal_Id) TO 1C SPR_PS (Id); -CREATE ROP REF_ID R529 FROM 1C SM_SGEVT (Required_Signal_Id) TO 1C SPR_RS (Id); -CREATE ROP REF_ID R53 FROM MC S_DIM (DT_ID, Member_ID) TO 1C S_MBR (Parent_DT_DT_ID, Member_ID); -CREATE ROP REF_ID R530 FROM 1C SM_TAH (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); -CREATE ROP REF_ID R531 FROM MC S_DIM (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); -CREATE ROP REF_ID R532 FROM MC SM_EVTDI (SMevt_ID) TO 1 SM_EVT (SMevt_ID); -CREATE ROP REF_ID R533 FROM 1C SM_EVTDI (SM_ID, Previous_SMedi_ID) PHRASE 'succeeds' TO 1C SM_EVTDI (SM_ID, SMedi_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R54 FROM 1C S_SPARM (Previous_SParm_ID) PHRASE 'succeeds' TO 1C S_SPARM (SParm_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R55 FROM 1C S_BPARM (Previous_BParm_ID) PHRASE 'succeeds' TO 1C S_BPARM (BParm_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R56 FROM 1C S_ENUM (Previous_Enum_ID) PHRASE 'succeeds' TO 1C S_ENUM (Enum_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R601 FROM MC ACT_BLK (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R602 FROM MC ACT_SMT (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_FOR (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_WHL (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_IF (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_EL (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_E (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_BRG (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_FNC (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_RET (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_TFM (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_AI (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_DEL (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_CNV (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_CR (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_SEL (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_FIO (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_FIW (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_URU (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_UNR (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_RU (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_REL (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_CTL (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_BRK (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_CON (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C E_ESS (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C E_GPR (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_IOP (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R603 FROM 1C ACT_SGN (Statement_ID) TO 1 ACT_SMT (Statement_ID); -CREATE ROP REF_ID R604 FROM 1C ACT_LNK (Next_Link_ID) PHRASE 'precedes' TO 1C ACT_LNK (Link_ID) PHRASE 'succeeds'; -CREATE ROP REF_ID R605 FROM 1C ACT_FOR (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R606 FROM 1C ACT_E (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R607 FROM 1C ACT_IF (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R608 FROM 1C ACT_WHL (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R609 FROM 1C ACT_AI (r_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R610 FROM 1C ACT_FIW (Where_Clause_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R611 FROM 1C ACT_SRW (Where_Clause_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R613 FROM 1C ACT_SEL (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R614 FROM MC ACT_FOR (Loop_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R615 FROM MC ACT_REL (One_Side_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R616 FROM MC ACT_REL (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R617 FROM MC ACT_RU (One_Side_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R618 FROM MC ACT_RU (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R619 FROM MC ACT_RU (Associative_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R620 FROM MC ACT_UNR (One_Side_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R621 FROM MC ACT_UNR (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R622 FROM MC ACT_URU (One_Side_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R623 FROM MC ACT_URU (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R624 FROM MC ACT_URU (Associative_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R625 FROM 1C ACT_IF (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R626 FROM 1C ACT_WHL (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R627 FROM MC V_PAR (Statement_ID) TO 1C ACT_TFM (Statement_ID); -CREATE ROP REF_ID R628 FROM MC V_PAR (Statement_ID) TO 1C ACT_BRG (Statement_ID); -CREATE ROP REF_ID R629 FROM MC ACT_IOP (Value_ID) TO 1C V_VAL (Value_ID); -CREATE ROP REF_ID R630 FROM MC ACT_SGN (Value_ID) TO 1C V_VAL (Value_ID); -CREATE ROP REF_ID R633 FROM MC ACT_CR (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R634 FROM MC ACT_DEL (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R637 FROM 1 ACT_LNK (Statement_ID) TO 1C ACT_SEL (Statement_ID); -CREATE ROP REF_ID R638 FROM MC ACT_SEL (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R639 FROM MC ACT_FIO (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R652 FROM MC ACT_FOR (Set_Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R653 FROM MC ACT_REL (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R654 FROM MC ACT_RU (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R655 FROM MC ACT_UNR (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R656 FROM MC ACT_URU (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R657 FROM MC ACT_IOP (RequiredOp_Id) TO 1C SPR_RO (Id); -CREATE ROP REF_ID R658 FROM 1C ACT_EL (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R659 FROM 1C ACT_EL (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R660 FROM MC ACT_SGN (RequiredSig_Id) TO 1C SPR_RS (Id); -CREATE ROP REF_ID R661 FROM 1C ACT_SMT (Previous_Statement_ID, Block_ID) PHRASE 'succeeds' TO 1C ACT_SMT (Statement_ID, Block_ID) PHRASE 'precedes'; -CREATE ROP REF_ID R662 FROM MC V_PAR (Statement_ID) TO 1C ACT_SGN (Statement_ID); -CREATE ROP REF_ID R663 FROM MC ACT_SGN (ProvidedSig_Id) TO 1C SPR_PS (Id); -CREATE ROP REF_ID R664 FROM 1C ACT_SRW (Statement_ID) TO 1 ACT_SEL (Statement_ID); -CREATE ROP REF_ID R664 FROM 1C ACT_SR (Statement_ID) TO 1 ACT_SEL (Statement_ID); -CREATE ROP REF_ID R665 FROM MC ACT_FIW (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R666 FROM 1C ACT_ACT (Block_ID) TO 1C ACT_BLK (Block_ID); -CREATE ROP REF_ID R667 FROM MC ACT_TFM (Var_ID) TO 1C V_VAR (Var_ID); -CREATE ROP REF_ID R668 FROM 1C ACT_RET (Value_ID) TO 1C V_VAL (Value_ID); -CREATE ROP REF_ID R669 FROM MC V_PAR (Statement_ID) TO 1C ACT_FNC (Statement_ID); -CREATE ROP REF_ID R670 FROM MC ACT_FOR (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R671 FROM MC ACT_CR (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R672 FROM MC ACT_CNV (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R673 FROM MC ACT_TFM (Tfr_ID) TO 1C O_TFR (Tfr_ID); -CREATE ROP REF_ID R674 FROM MC ACT_BRG (Brg_ID) TO 1C S_BRG (Brg_ID); -CREATE ROP REF_ID R675 FROM MC ACT_FNC (Sync_ID) TO 1C S_SYNC (Sync_ID); -CREATE ROP REF_ID R676 FROM MC ACT_FIW (Obj_ID) TO 1C O_OBJ (Obj_ID); -CREATE ROP REF_ID R677 FROM MC ACT_FIO (Obj_ID) TO 1C O_OBJ (Obj_ID); -CREATE ROP REF_ID R678 FROM MC ACT_LNK (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R679 FROM MC V_PAR (Statement_ID) TO 1C ACT_IOP (Statement_ID); -CREATE ROP REF_ID R680 FROM MC ACT_IOP (ProvidedOp_Id) TO 1C SPR_PO (Id); -CREATE ROP REF_ID R681 FROM MC ACT_LNK (Rel_ID) TO 1 R_REL (Rel_ID); -CREATE ROP REF_ID R682 FROM MC ACT_EL (If_Statement_ID) TO 1 ACT_IF (Statement_ID); -CREATE ROP REF_ID R683 FROM 1C ACT_E (If_Statement_ID) TO 1 ACT_IF (Statement_ID); -CREATE ROP REF_ID R684 FROM 1C ACT_RSB (Id) TO 1 SPR_RS (Id); -CREATE ROP REF_ID R685 FROM 1C ACT_ROB (Id) TO 1 SPR_RO (Id); -CREATE ROP REF_ID R686 FROM 1C ACT_PSB (Id) TO 1 SPR_PS (Id); -CREATE ROP REF_ID R687 FROM 1C ACT_POB (Id) TO 1 SPR_PO (Id); -CREATE ROP REF_ID R688 FROM 1C ACT_TAB (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); -CREATE ROP REF_ID R689 FROM 1C ACT_AI (l_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R690 FROM 1C ACT_IF (Elif_Statement_ID) TO 1C ACT_EL (Statement_ID); -CREATE ROP REF_ID R691 FROM 1C ACT_SAB (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); -CREATE ROP REF_ID R692 FROM 1C ACT_IF (Else_Statement_ID) TO 1C ACT_E (Statement_ID); -CREATE ROP REF_ID R693 FROM 1C ACT_DAB (Attr_ID, Obj_ID) TO 1 O_DBATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R695 FROM 1C ACT_FNB (Sync_ID) TO 1 S_SYNC (Sync_ID); -CREATE ROP REF_ID R696 FROM 1C ACT_OPB (Tfr_ID) TO 1 O_TFR (Tfr_ID); -CREATE ROP REF_ID R697 FROM 1C ACT_BRB (Brg_ID) TO 1 S_BRG (Brg_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_SAB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_DAB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_FNB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_OPB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_BRB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_POB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_PSB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_ROB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_RSB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R698 FROM 1C ACT_TAB (Action_ID) TO 1 ACT_ACT (Action_ID); -CREATE ROP REF_ID R699 FROM 1C ACT_ACT (CurrentScope_ID) TO 1C ACT_BLK (Block_ID); -CREATE ROP REF_ID R700 FROM MC V_PAR (Statement_ID) TO 1C E_ESS (Statement_ID); -CREATE ROP REF_ID R701 FROM 1C E_CES (Statement_ID) TO 1 E_ESS (Statement_ID); -CREATE ROP REF_ID R701 FROM 1C E_GES (Statement_ID) TO 1 E_ESS (Statement_ID); -CREATE ROP REF_ID R702 FROM 1C E_CEE (Statement_ID) TO 1 E_CES (Statement_ID); -CREATE ROP REF_ID R702 FROM 1C E_CSME (Statement_ID) TO 1 E_CES (Statement_ID); -CREATE ROP REF_ID R703 FROM 1C E_GEE (Statement_ID) TO 1 E_GES (Statement_ID); -CREATE ROP REF_ID R703 FROM 1C E_GSME (Statement_ID) TO 1 E_GES (Statement_ID); -CREATE ROP REF_ID R704 FROM 1C E_CEI (Statement_ID) TO 1 E_CSME (Statement_ID); -CREATE ROP REF_ID R704 FROM 1C E_CEA (Statement_ID) TO 1 E_CSME (Statement_ID); -CREATE ROP REF_ID R704 FROM 1C E_CEC (Statement_ID) TO 1 E_CSME (Statement_ID); -CREATE ROP REF_ID R705 FROM 1C E_GEN (Statement_ID) TO 1 E_GSME (Statement_ID); -CREATE ROP REF_ID R705 FROM 1C E_GAR (Statement_ID) TO 1 E_GSME (Statement_ID); -CREATE ROP REF_ID R705 FROM 1C E_GEC (Statement_ID) TO 1 E_GSME (Statement_ID); -CREATE ROP REF_ID R706 FROM MC E_CSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); -CREATE ROP REF_ID R707 FROM MC E_GSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); -CREATE ROP REF_ID R708 FROM MC E_CEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); -CREATE ROP REF_ID R709 FROM MC E_GEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); -CREATE ROP REF_ID R710 FROM MC E_CES (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R711 FROM MC E_CEI (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R712 FROM MC E_GEN (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R714 FROM 1C E_GPR (Value_ID) TO 1C V_VAL (Value_ID); -CREATE ROP REF_ID R800 FROM 1C V_PAR (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R8000 FROM MC PE_PE (Package_ID) TO 1C EP_PKG (Package_ID); -CREATE ROP REF_ID R8001 FROM 1C S_DT (DT_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C SQ_P (Part_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C UC_UCA (Assoc_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C A_N (Id) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C O_OBJ (Obj_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C C_C (Id) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C CL_IC (Id) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C C_I (Id) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C EP_PKG (Package_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C CNST_CSP (Constant_Spec_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C A_AP (Id) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C A_E (Id) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C MSG_M (Msg_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C O_IOBJ (IObj_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C R_REL (Rel_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C S_EE (EE_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C S_SYNC (Sync_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C C_SF (Id) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8001 FROM 1C C_DG (Id) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R8003 FROM MC PE_PE (Component_ID) TO 1C C_C (Id); -CREATE ROP REF_ID R801 FROM 1C V_FNV (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_PVL (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_SLR (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_BRV (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_IRF (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_AVL (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_LIN (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_LST (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_UNY (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_TRV (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_ISR (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_EDV (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_TVL (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_LRL (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_LBO (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_BIN (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_LEN (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_MVL (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_AER (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_ALV (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_MSV (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R801 FROM 1C V_SCV (Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R802 FROM 1C V_BIN (Left_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R803 FROM 1C V_BIN (Right_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R804 FROM 1C V_UNY (Operand_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R805 FROM MC V_TVL (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R806 FROM MC V_AVL (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R807 FROM 1C V_AVL (Root_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R808 FROM MC V_IRF (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R809 FROM MC V_ISR (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R810 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_BRV (Value_ID); -CREATE ROP REF_ID R811 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_TRV (Value_ID); -CREATE ROP REF_ID R812 FROM MC V_SLR (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R814 FROM 1C V_INT (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R814 FROM 1C V_INS (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R814 FROM 1C V_TRN (Var_ID) TO 1 V_VAR (Var_ID); -CREATE ROP REF_ID R816 FROM 1C V_PAR (Next_Value_ID) PHRASE 'precedes' TO 1C V_PAR (Value_ID) PHRASE 'succeeds'; -CREATE ROP REF_ID R817 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_FNV (Value_ID); -CREATE ROP REF_ID R818 FROM MC V_INT (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R819 FROM MC V_INS (Obj_ID) TO 1 O_OBJ (Obj_ID); -CREATE ROP REF_ID R820 FROM MC V_VAL (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R821 FROM MC V_TRN (DT_ID) TO 1C S_DT (DT_ID); -CREATE ROP REF_ID R823 FROM MC V_VAR (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R824 FROM MC V_LEN (Enum_ID) TO 1 S_ENUM (Enum_ID); -CREATE ROP REF_ID R825 FROM 1C V_SLR (Op_Value_ID) TO 1C V_TRV (Value_ID); -CREATE ROP REF_ID R826 FROM MC V_VAL (Block_ID) TO 1 ACT_BLK (Block_ID); -CREATE ROP REF_ID R827 FROM MC V_FNV (Sync_ID) TO 1 S_SYNC (Sync_ID); -CREATE ROP REF_ID R828 FROM MC V_BRV (Brg_ID) TO 1 S_BRG (Brg_ID); -CREATE ROP REF_ID R829 FROM MC V_TRV (Tfr_ID) TO 1 O_TFR (Tfr_ID); -CREATE ROP REF_ID R830 FROM MC V_TRV (Var_ID) TO 1C V_VAR (Var_ID); -CREATE ROP REF_ID R831 FROM MC V_PVL (BParm_ID) TO 1C S_BPARM (BParm_ID); -CREATE ROP REF_ID R832 FROM MC V_PVL (SParm_ID) TO 1C S_SPARM (SParm_ID); -CREATE ROP REF_ID R833 FROM MC V_PVL (TParm_ID) TO 1C O_TPARM (TParm_ID); -CREATE ROP REF_ID R834 FROM MC V_EPR (Value_ID) TO 1 V_EDV (Value_ID); -CREATE ROP REF_ID R835 FROM M V_LOC (Var_ID) TO 1C V_VAR (Var_ID); -CREATE ROP REF_ID R836 FROM MC V_MVL (DT_DT_ID, Member_ID) TO 1 S_MBR (Parent_DT_DT_ID, Member_ID); -CREATE ROP REF_ID R837 FROM 1C V_MVL (Root_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R838 FROM 1C V_AER (Root_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R839 FROM 1C V_AER (Index_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R840 FROM 1C V_ALV (Array_Value_ID) TO 1 V_VAL (Value_ID); -CREATE ROP REF_ID R841 FROM MC V_MSV (PEP_Id) TO 1C SPR_PEP (Id); -CREATE ROP REF_ID R842 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_MSV (Value_ID); -CREATE ROP REF_ID R843 FROM MC V_PVL (PP_Id) TO 1C C_PP (PP_Id); -CREATE ROP REF_ID R844 FROM MC S_DIM (Var_ID) TO 1C V_TRN (Var_ID); -CREATE ROP REF_ID R845 FROM MC V_MSV (REP_Id) TO 1C SPR_REP (Id); -CREATE ROP REF_ID R846 FROM MC V_EPR (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); -CREATE ROP REF_ID R847 FROM MC V_EPR (PP_Id) TO 1C C_PP (PP_Id); -CREATE ROP REF_ID R848 FROM MC V_VAR (DT_ID) TO 1 S_DT (DT_ID); -CREATE ROP REF_ID R849 FROM MC S_DIM (Var_ID) TO 1C V_VAR (Var_ID); -CREATE ROP REF_ID R850 FROM MC V_SCV (Const_ID, DT_ID) TO 1 CNST_SYC (Const_ID, DT_ID); -CREATE ROP REF_ID R851 FROM MC V_MSV (Target_Value_ID) TO 1C V_VAL (Value_ID); -CREATE ROP REF_ID R9 FROM MC S_EEM (EE_ID) TO 1 S_EE (EE_ID); -CREATE ROP REF_ID R9000 FROM MC PA_SIC (Component_Id) TO 1 C_C (Id); -CREATE ROP REF_ID R9000 FROM 1C PA_SIC (Satisfaction_Id) TO 1 C_SF (Id); -CREATE ROP REF_ID R9002 FROM MC PA_DIC (Component_Id) TO 1 C_C (Id); -CREATE ROP REF_ID R9002 FROM 1 PA_DIC (Delegation_Id) TO 1 C_DG (Id); -CREATE ROP REF_ID R9100 FROM MC G_EIS (Element_ID) TO 1 PE_PE (Element_ID); -CREATE ROP REF_ID R9100 FROM MC G_EIS (Sys_ID) TO 1 S_SYS (Sys_ID); -CREATE ROP REF_ID R930 FROM 1C SQ_CIP (Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R930 FROM 1C SQ_EEP (Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R930 FROM 1C SQ_CP (Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R930 FROM 1C SQ_AP (Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R930 FROM 1C SQ_LS (Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R930 FROM 1C IA_UCP (Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R930 FROM 1C SQ_COP (Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R930 FROM 1C SQ_PP (Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R931 FROM MC SQ_TM (Part_ID) TO 1 SQ_LS (Part_ID); -CREATE ROP REF_ID R933 FROM MC SQ_EEP (EE_ID) TO 1C S_EE (EE_ID); -CREATE ROP REF_ID R934 FROM MC SQ_CIP (Obj_ID) TO 1C O_OBJ (Obj_ID); -CREATE ROP REF_ID R935 FROM MC SQ_CPA (Part_ID) TO 1 SQ_CP (Part_ID); -CREATE ROP REF_ID R936 FROM MC SQ_AV (Informal_Part_ID) TO 1C SQ_CIP (Part_ID); -CREATE ROP REF_ID R937 FROM MC SQ_AV (Formal_Part_ID) TO 1C SQ_CIP (Part_ID); -CREATE ROP REF_ID R938 FROM MC SQ_AV (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); -CREATE ROP REF_ID R939 FROM MC SQ_CP (Obj_ID) TO 1C O_OBJ (Obj_ID); -CREATE ROP REF_ID R940 FROM 1C SQ_LS (Source_Part_ID) TO 1 SQ_P (Part_ID); -CREATE ROP REF_ID R941 FROM MC SQ_TS (Prev_Mark_ID) TO 1 SQ_TM (Mark_ID); -CREATE ROP REF_ID R942 FROM MC SQ_TS (Mark_ID) TO 1 SQ_TM (Mark_ID); -CREATE ROP REF_ID R947 FROM 1C SQ_IA (Ia_ID) TO 1 SQ_CPA (Ia_ID); -CREATE ROP REF_ID R947 FROM 1C SQ_FA (Ia_ID) TO 1 SQ_CPA (Ia_ID); -CREATE ROP REF_ID R948 FROM 1C SQ_IAV (Av_ID) TO 1 SQ_AV (Av_ID); -CREATE ROP REF_ID R948 FROM 1C SQ_FAV (Av_ID) TO 1 SQ_AV (Av_ID); -CREATE ROP REF_ID R949 FROM 1C SQ_AP (LS_Part_ID) TO 1C SQ_LS (Part_ID); -CREATE ROP REF_ID R955 FROM MC SQ_COP (Component_Id) TO 1C C_C (Id); -CREATE ROP REF_ID R956 FROM MC SQ_PP (Package_ID) TO 1C EP_PKG (Package_ID); - -CREATE UNIQUE INDEX I1 ON PA_SIC (Satisfaction_Id, Component_Id); -CREATE UNIQUE INDEX I1 ON E_CES (Statement_ID); -CREATE UNIQUE INDEX I1 ON SPR_PEP (Id); -CREATE UNIQUE INDEX I1 ON V_MVL (Value_ID); -CREATE UNIQUE INDEX I1 ON S_BRG (Brg_ID); -CREATE UNIQUE INDEX I1 ON S_DIM (DIM_ID); -CREATE UNIQUE INDEX I1 ON I_TIM (Timer_ID); -CREATE UNIQUE INDEX I1 ON ACT_FNB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_FNC (Statement_ID); -CREATE UNIQUE INDEX I1 ON S_SPARM (SParm_ID); -CREATE UNIQUE INDEX I1 ON E_CEA (Statement_ID); -CREATE UNIQUE INDEX I1 ON SQ_CPA (Ia_ID); -CREATE UNIQUE INDEX I1 ON E_CEC (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_CEE (Statement_ID); -CREATE UNIQUE INDEX I1 ON V_SLR (Value_ID); -CREATE UNIQUE INDEX I1 ON E_CEI (Statement_ID); -CREATE UNIQUE INDEX I1 ON SM_EVT (SMevt_ID); -CREATE UNIQUE INDEX I2 ON SM_EVT (SM_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON SM_NETXN (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I1 ON V_TRN (Var_ID); -CREATE UNIQUE INDEX I1 ON MSG_SM (Msg_ID); -CREATE UNIQUE INDEX I1 ON O_ATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON RV_RVL (RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON I_LNK (Link_ID); -CREATE UNIQUE INDEX I1 ON E_GEC (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_POB (Action_ID); -CREATE UNIQUE INDEX I1 ON A_AEA (Id); -CREATE UNIQUE INDEX I1 ON E_GEN (Statement_ID); -CREATE UNIQUE INDEX I1 ON CA_SMEEC (CPath_ID); -CREATE UNIQUE INDEX I2 ON CA_SMEEC (SM_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON ACT_SGN (Statement_ID); -CREATE UNIQUE INDEX I1 ON CA_SMEEA (APath_ID); -CREATE UNIQUE INDEX I2 ON CA_SMEEA (APath_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON L_IIR (RuntimeValue_ID, Inst_ID); -CREATE UNIQUE INDEX I1 ON RV_SVL (RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON CNST_SYC (Const_ID, DT_ID); -CREATE UNIQUE INDEX I1 ON O_NBATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON CA_SMSME (SMevt_ID, CPath_ID); -CREATE UNIQUE INDEX I1 ON A_DM (Id); -CREATE UNIQUE INDEX I1 ON A_CTL (Id); -CREATE UNIQUE INDEX I1 ON RV_VIA (ContainedRuntimeValue_ID, RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON CNST_LSC (Const_ID, DT_ID); -CREATE UNIQUE INDEX I1 ON CA_SMSMC (CPath_ID); -CREATE UNIQUE INDEX I2 ON CA_SMSMC (DSM_ID, OSM_ID); -CREATE UNIQUE INDEX I1 ON R_SUB (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON SM_MEAH (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I2 ON SM_MEAH (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON A_SS (Id); -CREATE UNIQUE INDEX I1 ON IA_UCP (Part_ID); -CREATE UNIQUE INDEX I1 ON SM_SEME (SM_ID, SMevt_ID, SMstt_ID); -CREATE UNIQUE INDEX I1 ON SM_MOORE (SM_ID); -CREATE UNIQUE INDEX I1 ON ACT_EL (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_RET (Statement_ID); -CREATE UNIQUE INDEX I1 ON A_FJ (Id); -CREATE UNIQUE INDEX I1 ON ACT_FOR (Statement_ID); -CREATE UNIQUE INDEX I1 ON O_OBJ (Obj_ID); -CREATE UNIQUE INDEX I1 ON ACT_REL (Statement_ID); -CREATE UNIQUE INDEX I1 ON SM_NSTXN (SMstt_ID, SMevt_ID, SM_ID); -CREATE UNIQUE INDEX I2 ON SM_NSTXN (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I1 ON V_LOC (Id); -CREATE UNIQUE INDEX I1 ON C_AS (Id); -CREATE UNIQUE INDEX I1 ON MSG_IOP (Msg_ID); -CREATE UNIQUE INDEX I1 ON CSME_CIE (CIE_ID); -CREATE UNIQUE INDEX I1 ON R_FORM (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON ACT_TAB (Action_ID); -CREATE UNIQUE INDEX I1 ON SM_NLEVT (SM_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON CL_IPINS (Satisfaction_Id, ImportedProvision_Id); -CREATE UNIQUE INDEX I1 ON C_IO (Id); -CREATE UNIQUE INDEX I1 ON SQ_TM (Mark_ID); -CREATE UNIQUE INDEX I1 ON RV_AVL (RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON V_INT (Var_ID); -CREATE UNIQUE INDEX I1 ON ACT_CON (Statement_ID); -CREATE UNIQUE INDEX I1 ON MSG_R (Msg_ID); -CREATE UNIQUE INDEX I1 ON RV_CRV (RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON SQ_TS (Span_ID); -CREATE UNIQUE INDEX I1 ON C_IR (Id); -CREATE UNIQUE INDEX I1 ON CA_ACC (APath_ID); -CREATE UNIQUE INDEX I1 ON E_CSME (Statement_ID); -CREATE UNIQUE INDEX I1 ON L_IWC (Local_ID, Inst_ID); -CREATE UNIQUE INDEX I1 ON BP_BP (Breakpoint_ID); -CREATE UNIQUE INDEX I1 ON V_SCV (Value_ID); -CREATE UNIQUE INDEX I1 ON V_AER (Value_ID); -CREATE UNIQUE INDEX I1 ON V_PAR (Value_ID); -CREATE UNIQUE INDEX I1 ON V_UNY (Value_ID); -CREATE UNIQUE INDEX I1 ON SM_EVTDI (SM_ID, SMedi_ID); -CREATE UNIQUE INDEX I1 ON I_EXE (Execution_Engine_ID); -CREATE UNIQUE INDEX I1 ON MSG_AM (Msg_ID); -CREATE UNIQUE INDEX I1 ON V_VAR (Var_ID); -CREATE UNIQUE INDEX I1 ON S_EEEDI (EEedi_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON C_DG (Id); -CREATE UNIQUE INDEX I1 ON S_EEEDT (EEevt_ID, EEedi_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON S_CDT (DT_ID); -CREATE UNIQUE INDEX I1 ON S_IRDT (DT_ID); -CREATE UNIQUE INDEX I1 ON SM_MOAH (SM_ID, SMstt_ID); -CREATE UNIQUE INDEX I2 ON SM_MOAH (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON CNST_LFSC (Const_ID, DT_ID); -CREATE UNIQUE INDEX I1 ON ACT_TFM (Statement_ID); -CREATE UNIQUE INDEX I1 ON O_OIDA (Attr_ID, Oid_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON I_MON (Execution_Engine_ID, Inst_ID); -CREATE UNIQUE INDEX I1 ON SQ_FA (Ia_ID); -CREATE UNIQUE INDEX I1 ON SM_CRTXN (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I1 ON MSG_O (Msg_ID); -CREATE UNIQUE INDEX I1 ON SPR_PS (Id); -CREATE UNIQUE INDEX I1 ON MSG_M (Msg_ID); -CREATE UNIQUE INDEX I1 ON ACT_OPB (Action_ID); -CREATE UNIQUE INDEX I1 ON ACT_SRW (Statement_ID); -CREATE UNIQUE INDEX I1 ON A_ACT (Id); -CREATE UNIQUE INDEX I1 ON MSG_SIG (Msg_ID); -CREATE UNIQUE INDEX I1 ON ACT_ACT (Action_ID); -CREATE UNIQUE INDEX I1 ON MSG_F (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_E (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_B (Msg_ID); -CREATE UNIQUE INDEX I1 ON MSG_A (Arg_ID); -CREATE UNIQUE INDEX I1 ON ACT_SAB (Action_ID); -CREATE UNIQUE INDEX I1 ON A_FF (Id); -CREATE UNIQUE INDEX I1 ON SM_SEVT (SM_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON ACT_AI (Statement_ID); -CREATE UNIQUE INDEX I1 ON R_ASSR (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON RV_IRV (RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON SPR_PO (Id); -CREATE UNIQUE INDEX I1 ON V_AVL (Value_ID); -CREATE UNIQUE INDEX I1 ON A_ATE (Id); -CREATE UNIQUE INDEX I1 ON V_LIN (Value_ID); -CREATE UNIQUE INDEX I1 ON ACT_FIO (Statement_ID); -CREATE UNIQUE INDEX I1 ON RV_SMV (RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON ACT_SEL (Statement_ID); -CREATE UNIQUE INDEX I1 ON SM_TAH (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON ACT_DEL (Statement_ID); -CREATE UNIQUE INDEX I1 ON V_FNV (Value_ID); -CREATE UNIQUE INDEX I1 ON V_LEN (Value_ID); -CREATE UNIQUE INDEX I1 ON A_E (Id); -CREATE UNIQUE INDEX I1 ON SM_AH (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON SQ_CIP (Part_ID); -CREATE UNIQUE INDEX I1 ON A_N (Id); -CREATE UNIQUE INDEX I1 ON ACT_FIW (Statement_ID); -CREATE UNIQUE INDEX I1 ON O_ID (Oid_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON I_EQE (Event_Queue_Entry_ID); -CREATE UNIQUE INDEX I2 ON I_EQE (Event_ID, Execution_Engine_ID); -CREATE UNIQUE INDEX I1 ON ACT_URU (Statement_ID); -CREATE UNIQUE INDEX I1 ON S_EEDI (EEdi_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON O_DBATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON SM_TXN (SM_ID, Trans_ID); -CREATE UNIQUE INDEX I1 ON SM_SDI (SM_ID, SMedi_ID); -CREATE UNIQUE INDEX I1 ON L_LVL (Local_ID); -CREATE UNIQUE INDEX I1 ON R_ASSOC (Rel_ID); -CREATE UNIQUE INDEX I1 ON MSG_IA (Arg_ID); -CREATE UNIQUE INDEX I1 ON R_CONE (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON SM_SGEVT (SM_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON S_BPARM (BParm_ID); -CREATE UNIQUE INDEX I1 ON O_RTIDA (OIR_ID, Rel_ID, Attr_ID, Oid_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON S_EEEVT (EEevt_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON SPR_REP (Id); -CREATE UNIQUE INDEX I1 ON CNST_CSP (Constant_Spec_ID); -CREATE UNIQUE INDEX I1 ON V_PVL (Value_ID); -CREATE UNIQUE INDEX I1 ON O_RATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON SM_ACT (SM_ID, Act_ID); -CREATE UNIQUE INDEX I1 ON SM_SM (SM_ID); -CREATE UNIQUE INDEX I1 ON E_GEE (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_DAB (Action_ID); -CREATE UNIQUE INDEX I1 ON V_ISR (Value_ID); -CREATE UNIQUE INDEX I1 ON UC_BA (Assoc_ID); -CREATE UNIQUE INDEX I1 ON V_BRV (Value_ID); -CREATE UNIQUE INDEX I1 ON I_INS (Inst_ID); -CREATE UNIQUE INDEX I1 ON SM_MEALY (SM_ID); -CREATE UNIQUE INDEX I1 ON ACT_LNK (Link_ID); -CREATE UNIQUE INDEX I1 ON ACT_WHL (Statement_ID); -CREATE UNIQUE INDEX I1 ON S_EDT (DT_ID); -CREATE UNIQUE INDEX I1 ON MSG_IAM (Msg_ID); -CREATE UNIQUE INDEX I1 ON O_BATTR (Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON ACT_RSB (Action_ID); -CREATE UNIQUE INDEX I1 ON MSG_ISM (Msg_ID); -CREATE UNIQUE INDEX I1 ON BP_EV (Breakpoint_ID); -CREATE UNIQUE INDEX I1 ON I_BSF (Stack_Frame_ID, Block_ID); -CREATE UNIQUE INDEX I1 ON V_EDV (Value_ID); -CREATE UNIQUE INDEX I1 ON I_ICQE (Stack_ID, Stack_Frame_ID); -CREATE UNIQUE INDEX I1 ON ACT_CR (Statement_ID); -CREATE UNIQUE INDEX I1 ON I_EVI (Event_ID); -CREATE UNIQUE INDEX I1 ON CL_IC (Id); -CREATE UNIQUE INDEX I1 ON SPR_RS (Id); -CREATE UNIQUE INDEX I1 ON S_DT (DT_ID); -CREATE UNIQUE INDEX I2 ON S_DT (DT_ID); -CREATE UNIQUE INDEX I1 ON SPR_RO (Id); -CREATE UNIQUE INDEX I1 ON CA_COMM (CPath_ID); -CREATE UNIQUE INDEX I1 ON ACT_BRK (Statement_ID); -CREATE UNIQUE INDEX I1 ON SQ_EEP (Part_ID); -CREATE UNIQUE INDEX I1 ON ACT_BRG (Statement_ID); -CREATE UNIQUE INDEX I1 ON E_GAR (Statement_ID); -CREATE UNIQUE INDEX I1 ON CL_IR (Id); -CREATE UNIQUE INDEX I1 ON CL_IP (Id); -CREATE UNIQUE INDEX I1 ON V_LRL (Value_ID); -CREATE UNIQUE INDEX I1 ON C_EP (Id); -CREATE UNIQUE INDEX I1 ON V_TRV (Value_ID); -CREATE UNIQUE INDEX I1 ON MSG_FA (Arg_ID); -CREATE UNIQUE INDEX I1 ON R_AONE (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON E_GES (Statement_ID); -CREATE UNIQUE INDEX I1 ON I_RCH (Channel_Id); -CREATE UNIQUE INDEX I2 ON I_RCH (Execution_Engine_ID, Satisfaction_Id, other_Execution_Engine_ID); -CREATE UNIQUE INDEX I1 ON A_INI (Id); -CREATE UNIQUE INDEX I1 ON I_VSF (ValueInStackFrame_ID); -CREATE UNIQUE INDEX I1 ON SQ_AP (Part_ID); -CREATE UNIQUE INDEX I1 ON V_IRF (Value_ID); -CREATE UNIQUE INDEX I1 ON S_ENUM (Enum_ID); -CREATE UNIQUE INDEX I1 ON RV_VIS (ContainedRuntimeValue_ID, RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON I_LIP (Rel_ID, Participation_ID); -CREATE UNIQUE INDEX I1 ON SQ_AV (Av_ID); -CREATE UNIQUE INDEX I1 ON O_IOBJ (IObj_ID); -CREATE UNIQUE INDEX I1 ON SQ_COP (Part_ID); -CREATE UNIQUE INDEX I1 ON SM_CH (SM_ID, SMevt_ID, SMstt_ID); -CREATE UNIQUE INDEX I1 ON ACT_IF (Statement_ID); -CREATE UNIQUE INDEX I1 ON I_STF (Stack_Frame_ID); -CREATE UNIQUE INDEX I1 ON S_SDT (DT_ID); -CREATE UNIQUE INDEX I1 ON EP_PKG (Package_ID); -CREATE UNIQUE INDEX I1 ON R_SUBSUP (Rel_ID); -CREATE UNIQUE INDEX I1 ON ACT_SMT (Statement_ID); -CREATE UNIQUE INDEX I2 ON ACT_SMT (Statement_ID, Block_ID); -CREATE UNIQUE INDEX I1 ON G_EIS (Element_ID, Sys_ID); -CREATE UNIQUE INDEX I1 ON S_SYNC (Sync_ID); -CREATE UNIQUE INDEX I1 ON I_DIV (DIV_ID); -CREATE UNIQUE INDEX I1 ON L_LSR (Local_ID); -CREATE UNIQUE INDEX I1 ON MSG_OA (Arg_ID); -CREATE UNIQUE INDEX I1 ON ACT_BRB (Action_ID); -CREATE UNIQUE INDEX I1 ON SM_ASM (SM_ID); -CREATE UNIQUE INDEX I1 ON SM_PEVT (SM_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON SQ_LS (Part_ID); -CREATE UNIQUE INDEX I1 ON SQ_IA (Ia_ID); -CREATE UNIQUE INDEX I1 ON SM_ISM (SM_ID); -CREATE UNIQUE INDEX I1 ON V_LBO (Value_ID); -CREATE UNIQUE INDEX I1 ON E_GSME (Statement_ID); -CREATE UNIQUE INDEX I1 ON PA_DIC (Component_Id, Delegation_Id); -CREATE UNIQUE INDEX I1 ON BP_OAL (Breakpoint_ID); -CREATE UNIQUE INDEX I1 ON SQ_PP (Part_ID); -CREATE UNIQUE INDEX I1 ON A_GA (Id); -CREATE UNIQUE INDEX I1 ON R_RGO (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON UC_E (Assoc_ID); -CREATE UNIQUE INDEX I1 ON UC_G (Assoc_ID); -CREATE UNIQUE INDEX I1 ON R_AOTH (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON RV_SCV (RuntimeValue_ID); -CREATE UNIQUE INDEX I1 ON R_RTO (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I2 ON R_RTO (OIR_ID, Rel_ID, Oid_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON E_GPR (Statement_ID); -CREATE UNIQUE INDEX I1 ON SM_EIGN (SM_ID, SMevt_ID, SMstt_ID); -CREATE UNIQUE INDEX I1 ON MSG_EA (Arg_ID); -CREATE UNIQUE INDEX I1 ON SM_LEVT (SM_ID, SMevt_ID); -CREATE UNIQUE INDEX I1 ON UC_I (Assoc_ID); -CREATE UNIQUE INDEX I1 ON S_EE (EE_ID); -CREATE UNIQUE INDEX I1 ON V_EPR (SM_ID, SMedi_ID, Value_ID, PP_Id); -CREATE UNIQUE INDEX I1 ON O_TFR (Tfr_ID); -CREATE UNIQUE INDEX I1 ON SQ_FAV (Av_ID); -CREATE UNIQUE INDEX I1 ON CL_POR (Id); -CREATE UNIQUE INDEX I1 ON I_AVL (Attr_ID, Inst_ID); -CREATE UNIQUE INDEX I1 ON O_TPARM (TParm_ID); -CREATE UNIQUE INDEX I1 ON ACT_IOP (Statement_ID); -CREATE UNIQUE INDEX I1 ON I_STACK (Stack_ID); -CREATE UNIQUE INDEX I1 ON CA_EESMC (CPath_ID); -CREATE UNIQUE INDEX I1 ON ACT_RU (Statement_ID); -CREATE UNIQUE INDEX I1 ON COMM_LNK (Link_ID); -CREATE UNIQUE INDEX I1 ON I_CIN (Container_ID); -CREATE UNIQUE INDEX I1 ON R_OIR (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON ACT_E (Statement_ID); -CREATE UNIQUE INDEX I1 ON C_RID (Reference_Id, Delegation_Id); -CREATE UNIQUE INDEX I1 ON ACT_BLK (Block_ID); -CREATE UNIQUE INDEX I1 ON R_COTH (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON S_UDT (DT_ID); -CREATE UNIQUE INDEX I1 ON BP_ST (Breakpoint_ID); -CREATE UNIQUE INDEX I1 ON PE_PE (Element_ID); -CREATE UNIQUE INDEX I1 ON V_INS (Var_ID); -CREATE UNIQUE INDEX I1 ON CL_IIR (Id); -CREATE UNIQUE INDEX I1 ON ACT_CTL (Statement_ID); -CREATE UNIQUE INDEX I1 ON A_OBJ (Id); -CREATE UNIQUE INDEX I1 ON ACT_UNR (Statement_ID); -CREATE UNIQUE INDEX I1 ON L_LCL (Local_ID); -CREATE UNIQUE INDEX I1 ON C_PO (Id); -CREATE UNIQUE INDEX I1 ON R_COMP (Rel_ID); -CREATE UNIQUE INDEX I1 ON MSG_BA (Arg_ID); -CREATE UNIQUE INDEX I1 ON ACT_CNV (Statement_ID); -CREATE UNIQUE INDEX I1 ON C_C (Id); -CREATE UNIQUE INDEX I1 ON CA_SMEEE (EEevt_ID, CPath_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON V_MSV (Value_ID); -CREATE UNIQUE INDEX I1 ON SQ_P (Part_ID); -CREATE UNIQUE INDEX I1 ON C_I (Id); -CREATE UNIQUE INDEX I1 ON SM_SUPDT (SM_ID, SMspd_ID); -CREATE UNIQUE INDEX I1 ON L_LCR (Local_ID); -CREATE UNIQUE INDEX I1 ON R_SIMP (Rel_ID); -CREATE UNIQUE INDEX I1 ON C_PP (PP_Id); -CREATE UNIQUE INDEX I1 ON SQ_IAV (Av_ID); -CREATE UNIQUE INDEX I1 ON C_P (Provision_Id); -CREATE UNIQUE INDEX I1 ON C_R (Requirement_Id); -CREATE UNIQUE INDEX I1 ON R_SUPER (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON V_ALV (Value_ID); -CREATE UNIQUE INDEX I1 ON O_REF (ROIR_ID, RObj_ID, ROid_ID, Obj_ID, RAttr_ID, OIR_ID, Rel_ID); -CREATE UNIQUE INDEX I2 ON O_REF (ARef_ID); -CREATE UNIQUE INDEX I1 ON I_SQE (Self_Queue_Entry_ID); -CREATE UNIQUE INDEX I2 ON I_SQE (Event_ID, Execution_Engine_ID); -CREATE UNIQUE INDEX I1 ON V_VAL (Value_ID); -CREATE UNIQUE INDEX I1 ON UC_UCA (Assoc_ID); -CREATE UNIQUE INDEX I1 ON CA_SMEED (APath_ID, EEdi_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON R_PART (OIR_ID, Rel_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON SM_STATE (SM_ID, SMstt_ID); -CREATE UNIQUE INDEX I2 ON SM_STATE (SMstt_ID, SM_ID); -CREATE UNIQUE INDEX I1 ON MSG_EPA (Arg_ID); -CREATE UNIQUE INDEX I1 ON S_EEM (EEmod_ID, EE_ID); -CREATE UNIQUE INDEX I1 ON V_BIN (Value_ID); -CREATE UNIQUE INDEX I1 ON S_MBR (Parent_DT_DT_ID, Member_ID); -CREATE UNIQUE INDEX I1 ON A_AP (Id); -CREATE UNIQUE INDEX I1 ON CA_SMOAA (APath_ID, Attr_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON ACT_PSB (Action_ID); -CREATE UNIQUE INDEX I1 ON V_LST (Value_ID); -CREATE UNIQUE INDEX I1 ON CA_SMOA (APath_ID); -CREATE UNIQUE INDEX I2 ON CA_SMOA (APath_ID, Obj_ID); -CREATE UNIQUE INDEX I1 ON C_SF (Id); -CREATE UNIQUE INDEX I2 ON C_SF (Provision_Id, Requirement_Id); -CREATE UNIQUE INDEX I1 ON E_ESS (Statement_ID); -CREATE UNIQUE INDEX I1 ON R_REL (Rel_ID); -CREATE UNIQUE INDEX I1 ON CA_EESME (SMevt_ID, CPath_ID); -CREATE UNIQUE INDEX I1 ON SQ_CP (Part_ID); -CREATE UNIQUE INDEX I1 ON S_SYS (Sys_ID); -CREATE UNIQUE INDEX I1 ON V_TVL (Value_ID); -CREATE UNIQUE INDEX I1 ON ACT_SR (Statement_ID); -CREATE UNIQUE INDEX I1 ON ACT_ROB (Action_ID); -CREATE UNIQUE INDEX I1 ON A_AF (Id); -CREATE UNIQUE INDEX I1 ON A_AE (Id); -''' - - -globals = ''' --- BP 7.1 content: Globals syschar: 3 persistence-version: 7.1.5 - -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000000", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 'void', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000000", - 0); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000001", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000001", - "00000000-0000-0000-0000-000000000000", - 'boolean', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000001", - 1); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000002", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000002", - "00000000-0000-0000-0000-000000000000", - 'integer', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000002", - 2); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000003", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000003", - "00000000-0000-0000-0000-000000000000", - 'real', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000003", - 3); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000004", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000004", - "00000000-0000-0000-0000-000000000000", - 'string', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000004", - 4); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000005", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000005", - "00000000-0000-0000-0000-000000000000", - 'unique_id', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000005", - 5); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000006", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000006", - "00000000-0000-0000-0000-000000000000", - 'state', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000006", - 6); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000007", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000007", - "00000000-0000-0000-0000-000000000000", - 'same_as', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000007", - 7); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000008", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000008", - "00000000-0000-0000-0000-000000000000", - 'inst_ref', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000008", - 8); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000009", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000009", - "00000000-0000-0000-0000-000000000000", - 'inst_ref_set', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-000000000009", - 9); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-00000000000a", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-00000000000a", - "00000000-0000-0000-0000-000000000000", - 'inst', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-00000000000a", - 10); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-00000000000b", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-00000000000b", - "00000000-0000-0000-0000-000000000000", - 'inst', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-00000000000b", - 11); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-00000000000c", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-00000000000c", - "00000000-0000-0000-0000-000000000000", - 'inst_ref', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-00000000000c", - 12); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-00000000000d", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-00000000000d", - "00000000-0000-0000-0000-000000000000", - 'component_ref', - '', - ''); -INSERT INTO S_CDT - VALUES ("ba5eda7a-def5-0000-0000-00000000000d", - 13); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-00000000000e", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-00000000000e", - "00000000-0000-0000-0000-000000000000", - 'date', - '', - ''); -INSERT INTO S_UDT - VALUES ("ba5eda7a-def5-0000-0000-00000000000e", - "ba5eda7a-def5-0000-0000-00000000000b", - 1); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-00000000000f", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-00000000000f", - "00000000-0000-0000-0000-000000000000", - 'inst_ref', - '', - ''); -INSERT INTO S_UDT - VALUES ("ba5eda7a-def5-0000-0000-00000000000f", - "ba5eda7a-def5-0000-0000-00000000000c", - 3); -INSERT INTO PE_PE - VALUES ("ba5eda7a-def5-0000-0000-000000000010", - 1, - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", - 3); -INSERT INTO S_DT - VALUES ("ba5eda7a-def5-0000-0000-000000000010", - "00000000-0000-0000-0000-000000000000", - 'timestamp', - '', - ''); -INSERT INTO S_UDT - VALUES ("ba5eda7a-def5-0000-0000-000000000010", - "ba5eda7a-def5-0000-0000-00000000000b", - 2); -''' - - class OoaOfOoaException(Exception): pass - class Domain(xtuml.MetaModel): symbols = None @@ -3599,9 +468,11 @@ class ModelLoader(xtuml.ModelLoader): def __init__(self, load_globals=True): xtuml.ModelLoader.__init__(self) - self.input(schema, 'ooaofooa schema (v%02.1f)' % __version__) + self.input(schema.classes, 'ooaofooa classes (v%02.1f)' % schema.__version__) + self.input(schema.associations, 'ooaofooa associations (v%02.1f)' % schema.__version__) + self.input(schema.indices, 'ooaofooa indices (v%02.1f)' % schema.__version__) if load_globals: - self.input(globals, 'predefined globals (v%02.1f)' % __version__) + self.input(schema.globals, 'predefined ooaofooa globals (v%02.1f)' % schema.__version__) def filename_input(self, path_or_filename): ''' diff --git a/bridgepoint/schema.py b/bridgepoint/schema.py new file mode 100644 index 0000000..178e0e7 --- /dev/null +++ b/bridgepoint/schema.py @@ -0,0 +1,3149 @@ +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + + +__version__ = 5.2 + + +classes = ''' +CREATE TABLE ACT_ACT ( + Action_ID UNIQUE_ID, + Type STRING, + LoopLevel INTEGER, + Block_ID UNIQUE_ID, + CurrentScope_ID UNIQUE_ID, + return_value INTEGER, + Label STRING, + Parsed_Block_ID UNIQUE_ID +); +CREATE TABLE ACT_AI ( + Statement_ID UNIQUE_ID, + r_Value_ID UNIQUE_ID, + l_Value_ID UNIQUE_ID, + attributeLineNumber INTEGER, + attributeColumn INTEGER +); +CREATE TABLE ACT_BLK ( + Block_ID UNIQUE_ID, + WhereSpecOK BOOLEAN, + InWhereSpec BOOLEAN, + SelectedFound BOOLEAN, + TempBuffer STRING, + SupData1 STRING, + SupData2 STRING, + CurrentLine INTEGER, + CurrentCol INTEGER, + currentKeyLettersLineNumber INTEGER, + currentKeyLettersColumn INTEGER, + currentParameterAssignmentNameLineNumber INTEGER, + currentParameterAssignmentNameColumn INTEGER, + currentAssociationNumberLineNumber INTEGER, + currentAssociationNumberColumn INTEGER, + currentAssociationPhraseLineNumber INTEGER, + currentAssociationPhraseColumn INTEGER, + currentDataTypeNameLineNumber INTEGER, + currentDataTypeNameColumn INTEGER, + blockInStackFrameCreated BOOLEAN, + Action_ID UNIQUE_ID, + Parsed_Action_ID UNIQUE_ID +); +CREATE TABLE ACT_BRB ( + Action_ID UNIQUE_ID, + Brg_ID UNIQUE_ID +); +CREATE TABLE ACT_BRG ( + Statement_ID UNIQUE_ID, + Brg_ID UNIQUE_ID, + bridgeNameLineNumber INTEGER, + bridgeNameColumn INTEGER, + externalEntityKeyLettersLineNumber INTEGER, + externalEntityKeyLettersColumn INTEGER +); +CREATE TABLE ACT_BRK ( + Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_CNV ( + Statement_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER +); +CREATE TABLE ACT_CON ( + Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_CR ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + is_implicit BOOLEAN, + Obj_ID UNIQUE_ID, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER +); +CREATE TABLE ACT_CTL ( + Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_DAB ( + Action_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + AttributeWritten BOOLEAN +); +CREATE TABLE ACT_DEL ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE ACT_E ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + If_Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_EL ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + If_Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_FIO ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + is_implicit BOOLEAN, + cardinality STRING, + Obj_ID UNIQUE_ID, + extentLineNumber INTEGER, + extentColumn INTEGER +); +CREATE TABLE ACT_FIW ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + is_implicit BOOLEAN, + cardinality STRING, + Where_Clause_Value_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + extentLineNumber INTEGER, + extentColumn INTEGER +); +CREATE TABLE ACT_FNB ( + Action_ID UNIQUE_ID, + Sync_ID UNIQUE_ID +); +CREATE TABLE ACT_FNC ( + Statement_ID UNIQUE_ID, + Sync_ID UNIQUE_ID, + functionNameLineNumber INTEGER, + functionNameColumn INTEGER +); +CREATE TABLE ACT_FOR ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + is_implicit BOOLEAN, + Loop_Var_ID UNIQUE_ID, + Set_Var_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE ACT_IF ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + Elif_Statement_ID UNIQUE_ID, + Else_Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_IOP ( + Statement_ID UNIQUE_ID, + opNameLineNumber INTEGER, + opNameColumn INTEGER, + ownerNameLineNumber INTEGER, + ownerNameColumn INTEGER, + ProvidedOp_Id UNIQUE_ID, + RequiredOp_Id UNIQUE_ID, + Value_ID UNIQUE_ID +); +CREATE TABLE ACT_LNK ( + Link_ID UNIQUE_ID, + Rel_Phrase STRING, + Statement_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + Next_Link_ID UNIQUE_ID, + Mult INTEGER, + Obj_ID UNIQUE_ID, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + phraseLineNumber INTEGER, + phraseColumn INTEGER +); +CREATE TABLE ACT_OPB ( + Action_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID +); +CREATE TABLE ACT_POB ( + Action_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE ACT_PSB ( + Action_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE ACT_REL ( + Statement_ID UNIQUE_ID, + One_Side_Var_ID UNIQUE_ID, + Other_Side_Var_ID UNIQUE_ID, + relationship_phrase STRING, + Rel_ID UNIQUE_ID, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + associationPhraseLineNumber INTEGER, + associationPhraseColumn INTEGER +); +CREATE TABLE ACT_RET ( + Statement_ID UNIQUE_ID, + Value_ID UNIQUE_ID +); +CREATE TABLE ACT_ROB ( + Action_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE ACT_RSB ( + Action_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE ACT_RU ( + Statement_ID UNIQUE_ID, + One_Side_Var_ID UNIQUE_ID, + Other_Side_Var_ID UNIQUE_ID, + Associative_Var_ID UNIQUE_ID, + relationship_phrase STRING, + Rel_ID UNIQUE_ID, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + associationPhraseLineNumber INTEGER, + associationPhraseColumn INTEGER +); +CREATE TABLE ACT_SAB ( + Action_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Act_ID UNIQUE_ID +); +CREATE TABLE ACT_SEL ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + is_implicit BOOLEAN, + cardinality STRING, + Value_ID UNIQUE_ID +); +CREATE TABLE ACT_SGN ( + Statement_ID UNIQUE_ID, + sigNameLineNumber INTEGER, + sigNameColumn INTEGER, + ownerNameLineNumber INTEGER, + ownerNameColumn INTEGER, + ProvidedSig_Id UNIQUE_ID, + RequiredSig_Id UNIQUE_ID, + Value_ID UNIQUE_ID +); +CREATE TABLE ACT_SMT ( + Statement_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Previous_Statement_ID UNIQUE_ID, + LineNumber INTEGER, + StartPosition INTEGER, + Label STRING +); +CREATE TABLE ACT_SR ( + Statement_ID UNIQUE_ID +); +CREATE TABLE ACT_SRW ( + Statement_ID UNIQUE_ID, + Where_Clause_Value_ID UNIQUE_ID +); +CREATE TABLE ACT_TAB ( + Action_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Act_ID UNIQUE_ID +); +CREATE TABLE ACT_TFM ( + Statement_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + operationNameLineNumber INTEGER, + operationNameColumn INTEGER, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER +); +CREATE TABLE ACT_UNR ( + Statement_ID UNIQUE_ID, + One_Side_Var_ID UNIQUE_ID, + Other_Side_Var_ID UNIQUE_ID, + relationship_phrase STRING, + Rel_ID UNIQUE_ID, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + associationPhraseLineNumber INTEGER, + associationPhraseColumn INTEGER +); +CREATE TABLE ACT_URU ( + Statement_ID UNIQUE_ID, + One_Side_Var_ID UNIQUE_ID, + Other_Side_Var_ID UNIQUE_ID, + Associative_Var_ID UNIQUE_ID, + relationship_phrase STRING, + Rel_ID UNIQUE_ID, + associationNumberLineNumber INTEGER, + associationNumberColumn INTEGER, + associationPhraseLineNumber INTEGER, + associationPhraseColumn INTEGER +); +CREATE TABLE ACT_WHL ( + Statement_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + Block_ID UNIQUE_ID +); +CREATE TABLE A_ACT ( + Id UNIQUE_ID +); +CREATE TABLE A_AE ( + Id UNIQUE_ID +); +CREATE TABLE A_AEA ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_AF ( + Id UNIQUE_ID, + Descrip STRING +); +CREATE TABLE A_AP ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_ATE ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_CTL ( + Id UNIQUE_ID +); +CREATE TABLE A_DM ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_E ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID, + Guard STRING, + Descrip STRING, + TargetId UNIQUE_ID, + SourceId UNIQUE_ID +); +CREATE TABLE A_FF ( + Id UNIQUE_ID, + Descrip STRING +); +CREATE TABLE A_FJ ( + Id UNIQUE_ID, + Descrip STRING, + GuardCondition STRING +); +CREATE TABLE A_GA ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_INI ( + Id UNIQUE_ID, + Descrip STRING +); +CREATE TABLE A_N ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID +); +CREATE TABLE A_OBJ ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE A_SS ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE BP_BP ( + Breakpoint_ID UNIQUE_ID, + enabled BOOLEAN, + condition_enabled BOOLEAN, + hit_count INTEGER, + target_hit_count INTEGER, + for_step BOOLEAN +); +CREATE TABLE BP_CON ( + Breakpoint_ID UNIQUE_ID, + Expression STRING +); +CREATE TABLE BP_EV ( + Breakpoint_ID UNIQUE_ID, + onEnqueue BOOLEAN, + onDequeue BOOLEAN, + onEventIgnored BOOLEAN, + onCantHappen BOOLEAN, + SMevt_ID UNIQUE_ID +); +CREATE TABLE BP_OAL ( + Statement_ID UNIQUE_ID, + Breakpoint_ID UNIQUE_ID +); +CREATE TABLE BP_ST ( + Breakpoint_ID UNIQUE_ID, + onEntry BOOLEAN, + onExit BOOLEAN, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID +); +CREATE TABLE CA_ACC ( + APath_ID UNIQUE_ID, + SS_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + IObj_ID UNIQUE_ID +); +CREATE TABLE CA_COMM ( + CPath_ID UNIQUE_ID, + SS_ID UNIQUE_ID +); +CREATE TABLE CA_EESMC ( + CPath_ID UNIQUE_ID, + EEmod_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + SM_ID UNIQUE_ID +); +CREATE TABLE CA_EESME ( + CPath_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE CA_SMEEA ( + APath_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEmod_ID UNIQUE_ID +); +CREATE TABLE CA_SMEEC ( + CPath_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEmod_ID UNIQUE_ID +); +CREATE TABLE CA_SMEED ( + APath_ID UNIQUE_ID, + EEdi_ID UNIQUE_ID, + EE_ID UNIQUE_ID +); +CREATE TABLE CA_SMEEE ( + CPath_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEevt_ID UNIQUE_ID +); +CREATE TABLE CA_SMOA ( + APath_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + IObj_ID UNIQUE_ID +); +CREATE TABLE CA_SMOAA ( + APath_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE CA_SMSMC ( + CPath_ID UNIQUE_ID, + OSM_ID UNIQUE_ID, + DSM_ID UNIQUE_ID, + OIObj_ID UNIQUE_ID, + DIObj_ID UNIQUE_ID +); +CREATE TABLE CA_SMSME ( + CPath_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE CL_IC ( + Id UNIQUE_ID, + AssignedComp_Id UNIQUE_ID, + ParentComp_Id UNIQUE_ID, + Component_Package_ID UNIQUE_ID, + Mult INTEGER, + ClassifierName STRING, + Name STRING, + Descrip STRING +); +CREATE TABLE CL_IIR ( + Id UNIQUE_ID, + Ref_Id UNIQUE_ID, + CL_POR_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE CL_IP ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE CL_IPINS ( + Satisfaction_Id UNIQUE_ID, + ImportedProvision_Id UNIQUE_ID +); +CREATE TABLE CL_IR ( + Id UNIQUE_ID, + Satisfaction_Element_Id UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE CL_POR ( + CL_IC_Id UNIQUE_ID, + C_PO_Id UNIQUE_ID, + Name STRING, + Id UNIQUE_ID +); +CREATE TABLE CNST_CSP ( + Constant_Spec_ID UNIQUE_ID, + InformalGroupName STRING, + Descrip STRING +); +CREATE TABLE CNST_LFSC ( + Const_ID UNIQUE_ID, + DT_ID UNIQUE_ID +); +CREATE TABLE CNST_LSC ( + Const_ID UNIQUE_ID, + DT_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE CNST_SYC ( + Const_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID, + Constant_Spec_ID UNIQUE_ID, + Previous_Const_ID UNIQUE_ID, + Previous_DT_DT_ID UNIQUE_ID +); +CREATE TABLE COMM_LNK ( + Link_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + Numb STRING, + Descrip STRING, + StartText STRING, + EndText STRING, + isFormal BOOLEAN, + StartVisibility INTEGER, + EndVisibility INTEGER, + Start_Part_ID UNIQUE_ID, + Destination_Part_ID UNIQUE_ID +); +CREATE TABLE CSME_CIE ( + CIE_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Package_ID UNIQUE_ID, + Label STRING +); +CREATE TABLE C_AS ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Direction INTEGER, + Previous_Id UNIQUE_ID +); +CREATE TABLE C_C ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID, + NestedComponent_Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Mult INTEGER, + Root_Package_ID UNIQUE_ID, + isRealized BOOLEAN, + Realized_Class_Path STRING +); +CREATE TABLE C_DG ( + Id UNIQUE_ID, + Name STRING +); +CREATE TABLE C_EP ( + Id UNIQUE_ID, + Interface_Id UNIQUE_ID, + Direction INTEGER, + Name STRING, + Descrip STRING +); +CREATE TABLE C_I ( + Id UNIQUE_ID, + Package_ID UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE C_IO ( + Id UNIQUE_ID, + DT_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Direction INTEGER, + Return_Dimensions STRING, + Previous_Id UNIQUE_ID +); +CREATE TABLE C_IR ( + Id UNIQUE_ID, + Formal_Interface_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID, + Port_Id UNIQUE_ID +); +CREATE TABLE C_P ( + Provision_Id UNIQUE_ID, + Name STRING, + InformalName STRING, + Descrip STRING, + pathFromComponent STRING +); +CREATE TABLE C_PO ( + Id UNIQUE_ID, + Component_Id UNIQUE_ID, + Name STRING, + Mult INTEGER, + DoNotShowPortOnCanvas BOOLEAN +); +CREATE TABLE C_PP ( + PP_Id UNIQUE_ID, + Signal_Id UNIQUE_ID, + DT_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + By_Ref INTEGER, + Dimensions STRING, + Previous_PP_Id UNIQUE_ID +); +CREATE TABLE C_R ( + Requirement_Id UNIQUE_ID, + Name STRING, + Descrip STRING, + InformalName STRING, + reversePathFromComponent STRING +); +CREATE TABLE C_RID ( + Reference_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID +); +CREATE TABLE C_SF ( + Id UNIQUE_ID, + Requirement_Id UNIQUE_ID, + Provision_Id UNIQUE_ID, + Descrip STRING, + Label STRING +); +CREATE TABLE EP_PKG ( + Package_ID UNIQUE_ID, + Sys_ID UNIQUE_ID, + Direct_Sys_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Num_Rng INTEGER +); +CREATE TABLE E_CEA ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_CEC ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_CEE ( + Statement_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEevt_ID UNIQUE_ID +); +CREATE TABLE E_CEI ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE E_CES ( + Statement_ID UNIQUE_ID, + is_implicit BOOLEAN, + Var_ID UNIQUE_ID +); +CREATE TABLE E_CSME ( + Statement_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE E_ESS ( + Statement_ID UNIQUE_ID, + ParmListOK BOOLEAN, + PEIndicated BOOLEAN, + eventDerivedLabelLineNumber INTEGER, + eventDerivedLabelColumn INTEGER, + eventMeaningLineNumber INTEGER, + eventMeaningColumn INTEGER, + eventTargetKeyLettersLineNumber INTEGER, + eventTargetKeyLettersColumn INTEGER, + firstEventDataItemNameLineNumber INTEGER, + firstEventDataItemNameColumn INTEGER, + currentLaterEventDataItemNameLineNumber INTEGER, + currentLaterEventDataItemNameColumn INTEGER +); +CREATE TABLE E_GAR ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_GEC ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_GEE ( + Statement_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + EEevt_ID UNIQUE_ID +); +CREATE TABLE E_GEN ( + Statement_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE E_GES ( + Statement_ID UNIQUE_ID +); +CREATE TABLE E_GPR ( + Statement_ID UNIQUE_ID, + Value_ID UNIQUE_ID +); +CREATE TABLE E_GSME ( + Statement_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE G_EIS ( + Element_ID UNIQUE_ID, + Sys_ID UNIQUE_ID +); +CREATE TABLE IA_UCP ( + Part_ID UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE I_AVL ( + Inst_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + Value STRING, + Label STRING, + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE I_BSF ( + Block_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID, + Statement_ID UNIQUE_ID, + isExecuting BOOLEAN +); +CREATE TABLE I_CIN ( + Container_ID UNIQUE_ID +); +CREATE TABLE I_DIV ( + DIV_ID UNIQUE_ID, + Event_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMedi_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE I_EQE ( + Event_Queue_Entry_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Event_ID UNIQUE_ID, + Next_Event_Queue_Entry_ID UNIQUE_ID +); +CREATE TABLE I_EVI ( + Event_ID UNIQUE_ID, + isExecuting BOOLEAN, + isCreation BOOLEAN, + SMevt_ID UNIQUE_ID, + Target_Inst_ID UNIQUE_ID, + nextEvent_ID UNIQUE_ID, + Sent_By_Inst_ID UNIQUE_ID, + next_self_Event_ID UNIQUE_ID, + Sent_By_CIE_ID UNIQUE_ID, + CIE_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Originating_Execution_Engine_ID UNIQUE_ID, + Label STRING +); +CREATE TABLE I_EXE ( + Running BOOLEAN, + Execution_Engine_ID UNIQUE_ID, + Dom_ID UNIQUE_ID, + Component_Id UNIQUE_ID, + Package_ID UNIQUE_ID, + Next_Unique_ID INTEGER, + Next_Instance_ID INTEGER, + ImportedComponent_Id UNIQUE_ID, + Label STRING, + Container_ID UNIQUE_ID +); +CREATE TABLE I_ICQE ( + Stack_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID +); +CREATE TABLE I_INS ( + Inst_ID UNIQUE_ID, + Name STRING, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Trans_ID UNIQUE_ID, + CIE_ID UNIQUE_ID, + Label STRING, + Default_Name STRING +); +CREATE TABLE I_LIP ( + Participation_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + Inst_ID UNIQUE_ID, + Label STRING +); +CREATE TABLE I_LNK ( + Link_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + Participation_ID UNIQUE_ID, + Formalizing_Participation_ID UNIQUE_ID, + Associator_Participation_ID UNIQUE_ID +); +CREATE TABLE I_MON ( + Execution_Engine_ID UNIQUE_ID, + Inst_ID UNIQUE_ID, + enabled BOOLEAN +); +CREATE TABLE I_RCH ( + Channel_Id UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + other_Execution_Engine_ID UNIQUE_ID, + Satisfaction_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID, + Next_provider_Channel_Id UNIQUE_ID +); +CREATE TABLE I_SQE ( + Self_Queue_Entry_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + Event_ID UNIQUE_ID, + Next_Self_Queue_Entry_ID UNIQUE_ID +); +CREATE TABLE I_STACK ( + Stack_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID, + runState INTEGER, + suspendReason STRING +); +CREATE TABLE I_STF ( + Stack_Frame_ID UNIQUE_ID, + Created_For_Wired_Bridge BOOLEAN, + readyForInterrupt BOOLEAN, + Bridge_Caller_Stack_Frame_ID UNIQUE_ID, + Child_Stack_Frame_ID UNIQUE_ID, + Top_Stack_Frame_Stack_ID UNIQUE_ID, + Stack_ID UNIQUE_ID, + Inst_ID UNIQUE_ID, + Value_Q_Stack_ID UNIQUE_ID, + Blocking_Stack_Frame_ID UNIQUE_ID +); +CREATE TABLE I_TIM ( + Timer_ID UNIQUE_ID, + delay INTEGER, + running BOOLEAN, + recurring BOOLEAN, + Event_ID UNIQUE_ID, + Label STRING +); +CREATE TABLE I_VSF ( + ValueInStackFrame_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID +); +CREATE TABLE L_IIR ( + Inst_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID, + Next_Inst_ID UNIQUE_ID +); +CREATE TABLE L_IWC ( + Local_ID UNIQUE_ID, + Inst_ID UNIQUE_ID, + Next_Inst_ID UNIQUE_ID +); +CREATE TABLE L_LCL ( + Local_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID, + TParm_ID UNIQUE_ID, + BParm_ID UNIQUE_ID, + SParm_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE L_LCR ( + Local_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + RuntimeValue_ID UNIQUE_ID, + Inst_ID UNIQUE_ID +); +CREATE TABLE L_LSR ( + Local_ID UNIQUE_ID +); +CREATE TABLE L_LVL ( + Local_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + Value_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE MSG_A ( + Arg_ID UNIQUE_ID, + Informal_Msg_ID UNIQUE_ID, + Formal_Msg_ID UNIQUE_ID, + Label STRING, + Value STRING, + InformalName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE MSG_AM ( + Msg_ID UNIQUE_ID, + InformalName STRING, + Descrip STRING, + GuardCondition STRING, + DurationObservation STRING, + DurationConstraint STRING, + isFormal BOOLEAN, + Label STRING, + SequenceNumb STRING +); +CREATE TABLE MSG_B ( + Msg_ID UNIQUE_ID, + Brg_ID UNIQUE_ID +); +CREATE TABLE MSG_BA ( + Arg_ID UNIQUE_ID, + BParm_ID UNIQUE_ID +); +CREATE TABLE MSG_E ( + Msg_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID +); +CREATE TABLE MSG_EA ( + Arg_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMedi_ID UNIQUE_ID +); +CREATE TABLE MSG_EPA ( + Arg_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE MSG_F ( + Msg_ID UNIQUE_ID, + Sync_ID UNIQUE_ID +); +CREATE TABLE MSG_FA ( + Arg_ID UNIQUE_ID, + SParm_ID UNIQUE_ID +); +CREATE TABLE MSG_IA ( + Arg_ID UNIQUE_ID +); +CREATE TABLE MSG_IAM ( + Msg_ID UNIQUE_ID +); +CREATE TABLE MSG_IOP ( + Msg_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE MSG_ISM ( + Msg_ID UNIQUE_ID +); +CREATE TABLE MSG_M ( + Msg_ID UNIQUE_ID, + Receiver_Part_ID UNIQUE_ID, + Sender_Part_ID UNIQUE_ID +); +CREATE TABLE MSG_O ( + Msg_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID +); +CREATE TABLE MSG_OA ( + Arg_ID UNIQUE_ID, + TParm_ID UNIQUE_ID +); +CREATE TABLE MSG_R ( + Msg_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + GuardCondition STRING, + ResultTarget STRING, + ReturnValue STRING, + SequenceNumb STRING +); +CREATE TABLE MSG_SIG ( + Msg_ID UNIQUE_ID, + Id UNIQUE_ID +); +CREATE TABLE MSG_SM ( + Msg_ID UNIQUE_ID, + InformalName STRING, + Descrip STRING, + GuardCondition STRING, + ResultTarget STRING, + ReturnValue STRING, + isFormal BOOLEAN, + Label STRING, + SequenceNumb STRING +); +CREATE TABLE O_ATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + PAttr_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Prefix STRING, + Root_Nam STRING, + Pfx_Mode INTEGER, + DT_ID UNIQUE_ID, + Dimensions STRING, + DefaultValue STRING +); +CREATE TABLE O_BATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE O_DBATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE O_ID ( + Oid_ID INTEGER, + Obj_ID UNIQUE_ID +); +CREATE TABLE O_IOBJ ( + IObj_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Modl_Typ INTEGER, + SS_ID UNIQUE_ID, + Obj_Name STRING, + Obj_KL STRING +); +CREATE TABLE O_NBATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE O_OBJ ( + Obj_ID UNIQUE_ID, + Name STRING, + Numb INTEGER, + Key_Lett STRING, + Descrip STRING, + SS_ID UNIQUE_ID +); +CREATE TABLE O_OIDA ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Oid_ID INTEGER, + localAttributeName STRING +); +CREATE TABLE O_RATTR ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + BAttr_ID UNIQUE_ID, + BObj_ID UNIQUE_ID, + Ref_Mode INTEGER, + BaseAttrName STRING +); +CREATE TABLE O_REF ( + Obj_ID UNIQUE_ID, + RObj_ID UNIQUE_ID, + ROid_ID INTEGER, + RAttr_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + ROIR_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + ARef_ID UNIQUE_ID, + PARef_ID UNIQUE_ID, + Is_Cstrd BOOLEAN, + Descrip STRING, + RObj_Name STRING, + RAttr_Name STRING, + Rel_Name STRING +); +CREATE TABLE O_RTIDA ( + Attr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Oid_ID INTEGER, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID +); +CREATE TABLE O_TFR ( + Tfr_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID, + Instance_Based INTEGER, + Action_Semantics_internal STRING, + Suc_Pars INTEGER, + Return_Dimensions STRING, + Previous_Tfr_ID UNIQUE_ID +); +CREATE TABLE O_TPARM ( + TParm_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID, + Name STRING, + DT_ID UNIQUE_ID, + By_Ref INTEGER, + Dimensions STRING, + Previous_TParm_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE PA_DIC ( + Component_Id UNIQUE_ID, + Delegation_Id UNIQUE_ID +); +CREATE TABLE PA_SIC ( + Component_Id UNIQUE_ID, + Satisfaction_Id UNIQUE_ID +); +CREATE TABLE PE_PE ( + Element_ID UNIQUE_ID, + Visibility INTEGER, + Package_ID UNIQUE_ID, + Component_ID UNIQUE_ID, + type INTEGER +); +CREATE TABLE RV_AVL ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_CRV ( + RuntimeValue_ID UNIQUE_ID, + Execution_Engine_ID UNIQUE_ID +); +CREATE TABLE RV_IRV ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_RVL ( + RuntimeValue_ID UNIQUE_ID, + Label STRING, + DT_ID UNIQUE_ID, + Stack_Frame_ID UNIQUE_ID +); +CREATE TABLE RV_SCV ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_SMV ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_SVL ( + RuntimeValue_ID UNIQUE_ID +); +CREATE TABLE RV_VIA ( + RuntimeValue_ID UNIQUE_ID, + ContainedRuntimeValue_ID UNIQUE_ID, + Index INTEGER +); +CREATE TABLE RV_VIS ( + RuntimeValue_ID UNIQUE_ID, + ContainedRuntimeValue_ID UNIQUE_ID, + Name STRING +); +CREATE TABLE R_AONE ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_AOTH ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_ASSOC ( + Rel_ID UNIQUE_ID +); +CREATE TABLE R_ASSR ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER +); +CREATE TABLE R_COMP ( + Rel_ID UNIQUE_ID, + Rel_Chn STRING +); +CREATE TABLE R_CONE ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_COTH ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_FORM ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_OIR ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + IObj_ID UNIQUE_ID +); +CREATE TABLE R_PART ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Mult INTEGER, + Cond INTEGER, + Txt_Phrs STRING +); +CREATE TABLE R_REL ( + Rel_ID UNIQUE_ID, + Numb INTEGER, + Descrip STRING, + SS_ID UNIQUE_ID +); +CREATE TABLE R_RGO ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID +); +CREATE TABLE R_RTO ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID, + Oid_ID INTEGER +); +CREATE TABLE R_SIMP ( + Rel_ID UNIQUE_ID +); +CREATE TABLE R_SUB ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID +); +CREATE TABLE R_SUBSUP ( + Rel_ID UNIQUE_ID +); +CREATE TABLE R_SUPER ( + Obj_ID UNIQUE_ID, + Rel_ID UNIQUE_ID, + OIR_ID UNIQUE_ID +); +CREATE TABLE SM_ACT ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Suc_Pars INTEGER, + Action_Semantics_internal STRING, + Descrip STRING +); +CREATE TABLE SM_AH ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID +); +CREATE TABLE SM_ASM ( + SM_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE SM_CH ( + SMstt_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE SM_CRTXN ( + Trans_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_EIGN ( + SMstt_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE SM_EVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Numb INTEGER, + Mning STRING, + Is_Lbl_U INTEGER, + Unq_Lbl STRING, + Drv_Lbl STRING, + Descrip STRING +); +CREATE TABLE SM_EVTDI ( + SMedi_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID, + Dimensions STRING, + SMevt_ID UNIQUE_ID, + Previous_SMedi_ID UNIQUE_ID +); +CREATE TABLE SM_ISM ( + SM_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE SM_LEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_MEAH ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Trans_ID UNIQUE_ID +); +CREATE TABLE SM_MEALY ( + SM_ID UNIQUE_ID +); +CREATE TABLE SM_MOAH ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID +); +CREATE TABLE SM_MOORE ( + SM_ID UNIQUE_ID +); +CREATE TABLE SM_NETXN ( + Trans_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_NLEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + polySMevt_ID UNIQUE_ID, + polySM_ID UNIQUE_ID, + polySMspd_ID UNIQUE_ID, + Local_Meaning STRING +); +CREATE TABLE SM_NSTXN ( + Trans_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_PEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + localClassName STRING, + localClassKL STRING, + localEventMning STRING +); +CREATE TABLE SM_SDI ( + SMedi_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + SM_ID UNIQUE_ID +); +CREATE TABLE SM_SEME ( + SMstt_ID UNIQUE_ID, + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_SEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SM_SGEVT ( + SMevt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Provided_Signal_Id UNIQUE_ID, + Required_Signal_Id UNIQUE_ID, + signal_name STRING +); +CREATE TABLE SM_SM ( + SM_ID UNIQUE_ID, + Descrip STRING, + Config_ID INTEGER +); +CREATE TABLE SM_STATE ( + SMstt_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID, + Name STRING, + Numb INTEGER, + Final INTEGER +); +CREATE TABLE SM_SUPDT ( + SMspd_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Non_Local BOOLEAN +); +CREATE TABLE SM_TAH ( + Act_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + Trans_ID UNIQUE_ID +); +CREATE TABLE SM_TXN ( + Trans_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMstt_ID UNIQUE_ID, + SMspd_ID UNIQUE_ID +); +CREATE TABLE SPR_PEP ( + Id UNIQUE_ID, + ExecutableProperty_Id UNIQUE_ID, + Provision_Id UNIQUE_ID +); +CREATE TABLE SPR_PO ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE SPR_PS ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE SPR_REP ( + Id UNIQUE_ID, + ExecutableProperty_Id UNIQUE_ID, + Requirement_Id UNIQUE_ID +); +CREATE TABLE SPR_RO ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE SPR_RS ( + Id UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + Suc_Pars INTEGER +); +CREATE TABLE SQ_AP ( + Part_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + LS_Part_ID UNIQUE_ID +); +CREATE TABLE SQ_AV ( + Av_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + Label STRING, + Value STRING, + InformalName STRING, + Informal_Part_ID UNIQUE_ID, + Formal_Part_ID UNIQUE_ID, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_CIP ( + Part_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Name STRING, + InformalClassName STRING, + Label STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_COP ( + Part_ID UNIQUE_ID, + Component_Id UNIQUE_ID, + Label STRING, + InformalComponentName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_CP ( + Part_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Label STRING, + InformalName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_CPA ( + Ia_ID UNIQUE_ID, + Name STRING, + Type STRING, + Part_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE SQ_EEP ( + Part_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Label STRING, + InformalName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_FA ( + Ia_ID UNIQUE_ID +); +CREATE TABLE SQ_FAV ( + Av_ID UNIQUE_ID +); +CREATE TABLE SQ_IA ( + Ia_ID UNIQUE_ID +); +CREATE TABLE SQ_IAV ( + Av_ID UNIQUE_ID +); +CREATE TABLE SQ_LS ( + Part_ID UNIQUE_ID, + Source_Part_ID UNIQUE_ID, + Descrip STRING, + Destroyed BOOLEAN +); +CREATE TABLE SQ_P ( + Part_ID UNIQUE_ID, + Sequence_Package_ID UNIQUE_ID +); +CREATE TABLE SQ_PP ( + Part_ID UNIQUE_ID, + Package_ID UNIQUE_ID, + Label STRING, + InformalName STRING, + Descrip STRING, + isFormal BOOLEAN +); +CREATE TABLE SQ_TM ( + Mark_ID UNIQUE_ID, + Name STRING, + Part_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE SQ_TS ( + Span_ID UNIQUE_ID, + Mark_ID UNIQUE_ID, + Prev_Mark_ID UNIQUE_ID, + Name STRING, + Descrip STRING +); +CREATE TABLE S_AW ( + Brg_ID UNIQUE_ID, + Sync_ID UNIQUE_ID +); +CREATE TABLE S_BPARM ( + BParm_ID UNIQUE_ID, + Brg_ID UNIQUE_ID, + Name STRING, + DT_ID UNIQUE_ID, + By_Ref INTEGER, + Dimensions STRING, + Previous_BParm_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE S_BRG ( + Brg_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Brg_Typ INTEGER, + DT_ID UNIQUE_ID, + Action_Semantics_internal STRING, + Suc_Pars INTEGER, + Return_Dimensions STRING +); +CREATE TABLE S_CDT ( + DT_ID UNIQUE_ID, + Core_Typ INTEGER +); +CREATE TABLE S_DIM ( + elementCount INTEGER, + dimensionCount INTEGER, + Sync_ID UNIQUE_ID, + SParm_ID UNIQUE_ID, + BParm_ID UNIQUE_ID, + Brg_ID UNIQUE_ID, + Id UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + TParm_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID, + Member_ID UNIQUE_ID, + DT_ID UNIQUE_ID, + PP_Id UNIQUE_ID, + SM_ID UNIQUE_ID, + SMedi_ID UNIQUE_ID, + DIM_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE S_DT ( + DT_ID UNIQUE_ID, + Dom_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DefaultValue STRING +); +CREATE TABLE S_EDT ( + DT_ID UNIQUE_ID +); +CREATE TABLE S_EE ( + EE_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Key_Lett STRING, + Dom_ID UNIQUE_ID, + Realized_Class_Path STRING, + Label STRING, + isRealized BOOLEAN +); +CREATE TABLE S_EEDI ( + EEdi_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID +); +CREATE TABLE S_EEEDI ( + EEedi_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + DT_ID UNIQUE_ID +); +CREATE TABLE S_EEEDT ( + EE_ID UNIQUE_ID, + EEevt_ID UNIQUE_ID, + EEedi_ID UNIQUE_ID +); +CREATE TABLE S_EEEVT ( + EEevt_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Numb INTEGER, + Mning STRING, + Is_Lbl_U INTEGER, + Unq_Lbl STRING, + Drv_Lbl STRING, + Descrip STRING +); +CREATE TABLE S_EEM ( + EEmod_ID UNIQUE_ID, + EE_ID UNIQUE_ID, + Modl_Typ INTEGER, + SS_ID UNIQUE_ID +); +CREATE TABLE S_ENUM ( + Enum_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + EDT_DT_ID UNIQUE_ID, + Previous_Enum_ID UNIQUE_ID +); +CREATE TABLE S_IRDT ( + DT_ID UNIQUE_ID, + isSet BOOLEAN, + Obj_ID UNIQUE_ID +); +CREATE TABLE S_MBR ( + Member_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Parent_DT_DT_ID UNIQUE_ID, + DT_ID UNIQUE_ID, + Previous_Member_ID UNIQUE_ID, + Dimensions STRING +); +CREATE TABLE S_SDT ( + DT_ID UNIQUE_ID +); +CREATE TABLE S_SPARM ( + SParm_ID UNIQUE_ID, + Sync_ID UNIQUE_ID, + Name STRING, + DT_ID UNIQUE_ID, + By_Ref INTEGER, + Dimensions STRING, + Previous_SParm_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE S_SYNC ( + Sync_ID UNIQUE_ID, + Dom_ID UNIQUE_ID, + Name STRING, + Descrip STRING, + Action_Semantics_internal STRING, + DT_ID UNIQUE_ID, + Suc_Pars INTEGER, + Return_Dimensions STRING +); +CREATE TABLE S_SYS ( + Sys_ID UNIQUE_ID, + Name STRING, + useGlobals BOOLEAN +); +CREATE TABLE S_UDT ( + DT_ID UNIQUE_ID, + CDT_DT_ID UNIQUE_ID, + Gen_Type INTEGER +); +CREATE TABLE UC_BA ( + Assoc_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE UC_E ( + Assoc_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE UC_G ( + Assoc_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE UC_I ( + Assoc_ID UNIQUE_ID, + Descrip STRING +); +CREATE TABLE UC_UCA ( + Assoc_ID UNIQUE_ID, + Source_Part_ID UNIQUE_ID, + Destination_Part_ID UNIQUE_ID +); +CREATE TABLE V_AER ( + Value_ID UNIQUE_ID, + Root_Value_ID UNIQUE_ID, + Index_Value_ID UNIQUE_ID +); +CREATE TABLE V_ALV ( + Value_ID UNIQUE_ID, + Array_Value_ID UNIQUE_ID +); +CREATE TABLE V_AVL ( + Value_ID UNIQUE_ID, + Root_Value_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID +); +CREATE TABLE V_BIN ( + Value_ID UNIQUE_ID, + Right_Value_ID UNIQUE_ID, + Left_Value_ID UNIQUE_ID, + Operator STRING +); +CREATE TABLE V_BRV ( + Value_ID UNIQUE_ID, + Brg_ID UNIQUE_ID, + ParmListOK BOOLEAN, + externalEntityKeyLettersLineNumber INTEGER, + externalEntityKeyLettersColumn INTEGER +); +CREATE TABLE V_EDV ( + Value_ID UNIQUE_ID +); +CREATE TABLE V_EPR ( + Value_ID UNIQUE_ID, + SM_ID UNIQUE_ID, + SMedi_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE V_FNV ( + Value_ID UNIQUE_ID, + Sync_ID UNIQUE_ID, + ParmListOK BOOLEAN +); +CREATE TABLE V_INS ( + Var_ID UNIQUE_ID, + Obj_ID UNIQUE_ID +); +CREATE TABLE V_INT ( + Var_ID UNIQUE_ID, + IsImplicitInFor BOOLEAN, + Obj_ID UNIQUE_ID +); +CREATE TABLE V_IRF ( + Value_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE V_ISR ( + Value_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE V_LBO ( + Value_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE V_LEN ( + Value_ID UNIQUE_ID, + Enum_ID UNIQUE_ID, + dataTypeNameLineNumber INTEGER, + dataTypeNameColumn INTEGER +); +CREATE TABLE V_LIN ( + Value_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE V_LOC ( + Id UNIQUE_ID, + LineNumber INTEGER, + StartPosition INTEGER, + EndPosition INTEGER, + Var_ID UNIQUE_ID +); +CREATE TABLE V_LRL ( + Value_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE V_LST ( + Value_ID UNIQUE_ID, + Value STRING +); +CREATE TABLE V_MSV ( + Value_ID UNIQUE_ID, + PEP_Id UNIQUE_ID, + REP_Id UNIQUE_ID, + ParmListOK BOOLEAN, + ownerNameLineNumber INTEGER, + ownerNameColumn INTEGER, + Target_Value_ID UNIQUE_ID +); +CREATE TABLE V_MVL ( + Value_ID UNIQUE_ID, + Root_Value_ID UNIQUE_ID, + Member_ID UNIQUE_ID, + DT_DT_ID UNIQUE_ID +); +CREATE TABLE V_PAR ( + Value_ID UNIQUE_ID, + Statement_ID UNIQUE_ID, + Invocation_Value_ID UNIQUE_ID, + Name STRING, + Next_Value_ID UNIQUE_ID, + labelLineNumber INTEGER, + labelColumn INTEGER +); +CREATE TABLE V_PVL ( + Value_ID UNIQUE_ID, + BParm_ID UNIQUE_ID, + SParm_ID UNIQUE_ID, + TParm_ID UNIQUE_ID, + PP_Id UNIQUE_ID +); +CREATE TABLE V_SCV ( + Value_ID UNIQUE_ID, + Const_ID UNIQUE_ID, + DT_ID UNIQUE_ID +); +CREATE TABLE V_SLR ( + Value_ID UNIQUE_ID, + Obj_ID UNIQUE_ID, + Attr_ID UNIQUE_ID, + Op_Value_ID UNIQUE_ID +); +CREATE TABLE V_TRN ( + Var_ID UNIQUE_ID, + DT_ID UNIQUE_ID, + Dimensions STRING +); +CREATE TABLE V_TRV ( + Value_ID UNIQUE_ID, + Tfr_ID UNIQUE_ID, + Var_ID UNIQUE_ID, + ParmListOK BOOLEAN, + modelClassKeyLettersLineNumber INTEGER, + modelClassKeyLettersColumn INTEGER +); +CREATE TABLE V_TVL ( + Value_ID UNIQUE_ID, + Var_ID UNIQUE_ID +); +CREATE TABLE V_UNY ( + Value_ID UNIQUE_ID, + Operand_Value_ID UNIQUE_ID, + Operator STRING +); +CREATE TABLE V_VAL ( + Value_ID UNIQUE_ID, + isLValue BOOLEAN, + isImplicit BOOLEAN, + LineNumber INTEGER, + StartPosition INTEGER, + EndPosition INTEGER, + firstParameterLabelLineNumber INTEGER, + firstParameterLabelColumn INTEGER, + currentLaterParameterLabelLineNumber INTEGER, + currentLaterParameterLabelColumn INTEGER, + DT_ID UNIQUE_ID, + Block_ID UNIQUE_ID +); +CREATE TABLE V_VAR ( + Var_ID UNIQUE_ID, + Block_ID UNIQUE_ID, + Name STRING, + Declared BOOLEAN, + DT_ID UNIQUE_ID +);''' + +associations = ''' +CREATE ROP REF_ID R10 FROM MC S_EEEVT (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R1000 FROM MC MSG_A (Informal_Msg_ID) TO 1C MSG_M (Msg_ID); +CREATE ROP REF_ID R1001 FROM MC MSG_A (Formal_Msg_ID) TO 1C MSG_M (Msg_ID); +CREATE ROP REF_ID R1007 FROM MC MSG_M (Sender_Part_ID) TO 1C SQ_P (Part_ID); +CREATE ROP REF_ID R1008 FROM MC MSG_M (Receiver_Part_ID) TO 1C SQ_P (Part_ID); +CREATE ROP REF_ID R1009 FROM MC MSG_E (SMevt_ID) TO 1C SM_EVT (SMevt_ID); +CREATE ROP REF_ID R101 FROM MC O_IOBJ (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R1010 FROM MC MSG_F (Sync_ID) TO 1C S_SYNC (Sync_ID); +CREATE ROP REF_ID R1011 FROM MC MSG_O (Tfr_ID) TO 1C O_TFR (Tfr_ID); +CREATE ROP REF_ID R1012 FROM MC MSG_B (Brg_ID) TO 1C S_BRG (Brg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_BA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_OA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_FA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_EA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_IA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1013 FROM 1C MSG_EPA (Arg_ID) TO 1 MSG_A (Arg_ID); +CREATE ROP REF_ID R1014 FROM MC MSG_BA (BParm_ID) TO 1C S_BPARM (BParm_ID); +CREATE ROP REF_ID R1015 FROM MC MSG_OA (TParm_ID) TO 1C O_TPARM (TParm_ID); +CREATE ROP REF_ID R1016 FROM MC MSG_FA (SParm_ID) TO 1C S_SPARM (SParm_ID); +CREATE ROP REF_ID R1017 FROM MC MSG_EA (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R1018 FROM 1C MSG_AM (Msg_ID) TO 1 MSG_M (Msg_ID); +CREATE ROP REF_ID R1018 FROM 1C MSG_SM (Msg_ID) TO 1 MSG_M (Msg_ID); +CREATE ROP REF_ID R1018 FROM 1C MSG_R (Msg_ID) TO 1 MSG_M (Msg_ID); +CREATE ROP REF_ID R1019 FROM 1C MSG_E (Msg_ID) TO 1 MSG_AM (Msg_ID); +CREATE ROP REF_ID R1019 FROM 1C MSG_IAM (Msg_ID) TO 1 MSG_AM (Msg_ID); +CREATE ROP REF_ID R1019 FROM 1C MSG_SIG (Msg_ID) TO 1 MSG_AM (Msg_ID); +CREATE ROP REF_ID R102 FROM MC O_ATTR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_F (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_O (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_B (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_ISM (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1020 FROM 1C MSG_IOP (Msg_ID) TO 1 MSG_SM (Msg_ID); +CREATE ROP REF_ID R1021 FROM MC MSG_SIG (Id) TO 1C C_AS (Id); +CREATE ROP REF_ID R1022 FROM MC MSG_IOP (Id) TO 1C C_IO (Id); +CREATE ROP REF_ID R1023 FROM MC MSG_EPA (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R103 FROM 1C O_ATTR (PAttr_ID, Obj_ID) PHRASE 'succeeds' TO 1C O_ATTR (Attr_ID, Obj_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R104 FROM MC O_ID (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R105 FROM MC O_OIDA (Oid_ID, Obj_ID) TO 1 O_ID (Oid_ID, Obj_ID); +CREATE ROP REF_ID R105 FROM MC O_OIDA (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R106 FROM 1C O_BATTR (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R106 FROM 1C O_RATTR (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R107 FROM 1C O_DBATTR (Attr_ID, Obj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R107 FROM 1C O_NBATTR (Attr_ID, Obj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R108 FROM M O_REF (Attr_ID, Obj_ID) TO 1 O_RATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R109 FROM MC R_RTO (Oid_ID, Obj_ID) TO 1C O_ID (Oid_ID, Obj_ID); +CREATE ROP REF_ID R11 FROM MC S_EEDI (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R110 FROM M O_RTIDA (OIR_ID, Rel_ID, Oid_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Oid_ID, Obj_ID); +CREATE ROP REF_ID R110 FROM MC O_RTIDA (Attr_ID, Oid_ID, Obj_ID) TO 1 O_OIDA (Attr_ID, Oid_ID, Obj_ID); +CREATE ROP REF_ID R1103 FROM MC A_E (TargetId) TO 1 A_N (Id); +CREATE ROP REF_ID R1104 FROM MC A_E (SourceId) TO 1 A_N (Id); +CREATE ROP REF_ID R1105 FROM 1C A_ACT (Id) TO 1 A_N (Id); +CREATE ROP REF_ID R1105 FROM 1C A_OBJ (Id) TO 1 A_N (Id); +CREATE ROP REF_ID R1105 FROM 1C A_CTL (Id) TO 1 A_N (Id); +CREATE ROP REF_ID R1106 FROM 1C A_FF (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1106 FROM 1C A_AF (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1106 FROM 1C A_INI (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1106 FROM 1C A_DM (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1106 FROM 1C A_FJ (Id) TO 1 A_CTL (Id); +CREATE ROP REF_ID R1107 FROM 1C A_AE (Id) TO 1 A_ACT (Id); +CREATE ROP REF_ID R1107 FROM 1C A_GA (Id) TO 1 A_ACT (Id); +CREATE ROP REF_ID R1107 FROM 1C A_SS (Id) TO 1 A_ACT (Id); +CREATE ROP REF_ID R111 FROM MC O_REF (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R111 FROM MC O_REF (RAttr_ID, ROIR_ID, RObj_ID, ROid_ID, Rel_ID) TO 1 O_RTIDA (Attr_ID, OIR_ID, Obj_ID, Oid_ID, Rel_ID); +CREATE ROP REF_ID R1112 FROM 1C A_ATE (Id) TO 1 A_AE (Id); +CREATE ROP REF_ID R1112 FROM 1C A_AEA (Id) TO 1 A_AE (Id); +CREATE ROP REF_ID R112 FROM 1C O_REF (PARef_ID) PHRASE 'succeeds' TO 1C O_REF (ARef_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R1128 FROM MC COMM_LNK (Rel_ID) TO 1C R_REL (Rel_ID); +CREATE ROP REF_ID R113 FROM MC O_RATTR (BAttr_ID, BObj_ID) TO 1 O_BATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R1133 FROM MC COMM_LNK (Start_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R1134 FROM MC COMM_LNK (Destination_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R114 FROM MC O_ATTR (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R115 FROM MC O_TFR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R116 FROM MC O_TFR (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R117 FROM MC O_TPARM (Tfr_ID) TO 1 O_TFR (Tfr_ID); +CREATE ROP REF_ID R118 FROM MC O_TPARM (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R12 FROM MC S_EEEDI (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R120 FROM MC S_DIM (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R1206 FROM MC UC_UCA (Source_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R1207 FROM MC UC_UCA (Destination_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R121 FROM MC S_DIM (TParm_ID) TO 1C O_TPARM (TParm_ID); +CREATE ROP REF_ID R1210 FROM 1C UC_E (Assoc_ID) TO 1 UC_UCA (Assoc_ID); +CREATE ROP REF_ID R1210 FROM 1C UC_G (Assoc_ID) TO 1 UC_UCA (Assoc_ID); +CREATE ROP REF_ID R1210 FROM 1C UC_I (Assoc_ID) TO 1 UC_UCA (Assoc_ID); +CREATE ROP REF_ID R1210 FROM 1C UC_BA (Assoc_ID) TO 1 UC_UCA (Assoc_ID); +CREATE ROP REF_ID R122 FROM MC S_DIM (Tfr_ID) TO 1C O_TFR (Tfr_ID); +CREATE ROP REF_ID R123 FROM MC S_IRDT (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R124 FROM 1C O_TPARM (Previous_TParm_ID) PHRASE 'succeeds' TO 1C O_TPARM (TParm_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R125 FROM 1C O_TFR (Previous_Tfr_ID) PHRASE 'succeeds' TO 1C O_TFR (Tfr_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R13 FROM MC S_EEEDT (EEedi_ID, EE_ID) TO 1 S_EEEDI (EEedi_ID, EE_ID); +CREATE ROP REF_ID R13 FROM MC S_EEEDT (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); +CREATE ROP REF_ID R1401 FROM MC EP_PKG (Sys_ID) TO 1C S_SYS (Sys_ID); +CREATE ROP REF_ID R1405 FROM MC EP_PKG (Direct_Sys_ID) TO 1 S_SYS (Sys_ID); +CREATE ROP REF_ID R15 FROM MC S_EEDI (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R1500 FROM MC CNST_SYC (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R1502 FROM 1C CNST_LFSC (Const_ID, DT_ID) TO 1 CNST_SYC (Const_ID, DT_ID); +CREATE ROP REF_ID R1503 FROM 1C CNST_LSC (Const_ID, DT_ID) TO 1 CNST_LFSC (Const_ID, DT_ID); +CREATE ROP REF_ID R1504 FROM MC CNST_SYC (Constant_Spec_ID) TO 1 CNST_CSP (Constant_Spec_ID); +CREATE ROP REF_ID R1505 FROM 1C CNST_SYC (Previous_Const_ID, Previous_DT_DT_ID) PHRASE 'succeeds' TO 1C CNST_SYC (Const_ID, DT_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R16 FROM MC S_EEEDI (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_CDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_UDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_EDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_SDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R17 FROM 1C S_IRDT (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R18 FROM MC S_UDT (CDT_DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R19 FROM MC S_BRG (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R20 FROM MC S_BRG (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R201 FROM M R_OIR (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R201 FROM MC R_OIR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R202 FROM MC R_OIR (IObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R203 FROM 1C R_RTO (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R203 FROM 1C R_RGO (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R203 FROM 1C R_CONE (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R203 FROM 1C R_COTH (OIR_ID, Rel_ID, Obj_ID) TO 1 R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R204 FROM 1C R_SUPER (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R204 FROM 1C R_PART (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R204 FROM 1C R_AONE (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R204 FROM 1C R_AOTH (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R205 FROM 1C R_SUB (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R205 FROM 1C R_FORM (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R205 FROM 1C R_ASSR (OIR_ID, Rel_ID, Obj_ID) TO 1 R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE ROP REF_ID R206 FROM 1C R_SIMP (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R206 FROM 1C R_COMP (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R206 FROM 1C R_ASSOC (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R206 FROM 1C R_SUBSUP (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R207 FROM M R_PART (Rel_ID) TO 1 R_SIMP (Rel_ID); +CREATE ROP REF_ID R208 FROM 1C R_FORM (Rel_ID) TO 1 R_SIMP (Rel_ID); +CREATE ROP REF_ID R209 FROM 1 R_AONE (Rel_ID) TO 1 R_ASSOC (Rel_ID); +CREATE ROP REF_ID R21 FROM MC S_BPARM (Brg_ID) TO 1 S_BRG (Brg_ID); +CREATE ROP REF_ID R210 FROM 1 R_AOTH (Rel_ID) TO 1 R_ASSOC (Rel_ID); +CREATE ROP REF_ID R211 FROM 1 R_ASSR (Rel_ID) TO 1 R_ASSOC (Rel_ID); +CREATE ROP REF_ID R212 FROM 1 R_SUPER (Rel_ID) TO 1 R_SUBSUP (Rel_ID); +CREATE ROP REF_ID R213 FROM MC R_SUB (Rel_ID) TO 1 R_SUBSUP (Rel_ID); +CREATE ROP REF_ID R214 FROM 1 R_CONE (Rel_ID) TO 1 R_COMP (Rel_ID); +CREATE ROP REF_ID R215 FROM 1 R_COTH (Rel_ID) TO 1 R_COMP (Rel_ID); +CREATE ROP REF_ID R22 FROM MC S_BPARM (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R24 FROM MC S_SPARM (Sync_ID) TO 1 S_SYNC (Sync_ID); +CREATE ROP REF_ID R25 FROM MC S_SYNC (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R26 FROM MC S_SPARM (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R27 FROM MC S_ENUM (EDT_DT_ID) TO 1 S_EDT (DT_ID); +CREATE ROP REF_ID R2901 FROM 1C I_LNK (Rel_ID, Participation_ID) TO 1 I_LIP (Rel_ID, Participation_ID); +CREATE ROP REF_ID R2902 FROM 1C I_LNK (Rel_ID, Formalizing_Participation_ID) TO 1 I_LIP (Rel_ID, Participation_ID); +CREATE ROP REF_ID R2903 FROM 1C I_LNK (Rel_ID, Associator_Participation_ID) TO 1C I_LIP (Rel_ID, Participation_ID); +CREATE ROP REF_ID R2904 FROM MC I_LNK (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R2906 FROM MC I_EVI (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R2907 FROM MC I_EVI (Target_Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R2908 FROM 1C I_EVI (nextEvent_ID) PHRASE 'will be processed after' TO 1C I_EVI (Event_ID) PHRASE 'will be processed before'; +CREATE ROP REF_ID R2909 FROM MC I_AVL (Inst_ID) TO 1 I_INS (Inst_ID); +CREATE ROP REF_ID R2910 FROM MC I_AVL (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R2915 FROM MC I_INS (SM_ID, SMstt_ID) TO 1C SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R2923 FROM MC I_BSF (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R2923 FROM MC I_BSF (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); +CREATE ROP REF_ID R2928 FROM 1C I_STF (Child_Stack_Frame_ID) PHRASE 'next context' TO 1C I_STF (Stack_Frame_ID) PHRASE 'previous context'; +CREATE ROP REF_ID R2929 FROM 1C I_STF (Top_Stack_Frame_Stack_ID) TO 1C I_STACK (Stack_ID); +CREATE ROP REF_ID R2930 FROM 1 I_STACK (Execution_Engine_ID) TO 1C I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2931 FROM MC I_EVI (Sent_By_CIE_ID) TO 1C CSME_CIE (CIE_ID); +CREATE ROP REF_ID R2933 FROM MC I_DIV (Event_ID) TO 1 I_EVI (Event_ID); +CREATE ROP REF_ID R2934 FROM MC I_DIV (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R2935 FROM MC I_EVI (Target_Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R2937 FROM MC I_EVI (Sent_By_Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R2938 FROM MC I_EVI (CIE_ID) TO 1C CSME_CIE (CIE_ID); +CREATE ROP REF_ID R2939 FROM 1C I_EVI (next_self_Event_ID) PHRASE 'will be processed before' TO 1C I_EVI (Event_ID) PHRASE 'will be processed after'; +CREATE ROP REF_ID R2940 FROM 1C I_TIM (Event_ID) TO 1C I_EVI (Event_ID); +CREATE ROP REF_ID R2941 FROM MC I_BSF (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R2943 FROM MC I_STF (Stack_ID) TO 1C I_STACK (Stack_ID); +CREATE ROP REF_ID R2944 FROM MC I_EQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2944 FROM 1C I_EQE (Event_ID) TO 1 I_EVI (Event_ID); +CREATE ROP REF_ID R2945 FROM 1C I_EQE (Next_Event_Queue_Entry_ID) PHRASE 'follows' TO 1C I_EQE (Event_Queue_Entry_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R2946 FROM MC I_SQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2946 FROM 1C I_SQE (Event_ID) TO 1 I_EVI (Event_ID); +CREATE ROP REF_ID R2947 FROM 1C I_SQE (Next_Self_Queue_Entry_ID) PHRASE 'follows' TO 1C I_SQE (Self_Queue_Entry_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R2949 FROM 1C I_MON (Inst_ID) TO 1 I_INS (Inst_ID); +CREATE ROP REF_ID R2949 FROM MC I_MON (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2951 FROM MC I_VSF (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); +CREATE ROP REF_ID R2953 FROM MC I_INS (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R2954 FROM MC I_STF (Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R2955 FROM MC I_EXE (Component_Id) TO 1C C_C (Id); +CREATE ROP REF_ID R2956 FROM MC I_DIV (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R2957 FROM MC I_INS (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2958 FROM MC I_LIP (Inst_ID) TO 1 I_INS (Inst_ID); +CREATE ROP REF_ID R2959 FROM MC I_LIP (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R2960 FROM MC CSME_CIE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2961 FROM MC CSME_CIE (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R2962 FROM MC I_INS (CIE_ID) TO 1 CSME_CIE (CIE_ID); +CREATE ROP REF_ID R2963 FROM MC I_EXE (ImportedComponent_Id) TO 1C CL_IC (Id); +CREATE ROP REF_ID R2964 FROM MC I_EVI (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2965 FROM 1C I_STF (Blocking_Stack_Frame_ID) PHRASE 'blocked by' TO 1C I_STF (Stack_Frame_ID) PHRASE 'blocks'; +CREATE ROP REF_ID R2966 FROM MC I_ICQE (Stack_ID) TO 1 I_STACK (Stack_ID); +CREATE ROP REF_ID R2966 FROM 1C I_ICQE (Stack_Frame_ID) TO 1 I_STF (Stack_Frame_ID); +CREATE ROP REF_ID R2967 FROM MC I_STF (Value_Q_Stack_ID) TO 1C I_STACK (Stack_ID); +CREATE ROP REF_ID R2968 FROM MC I_RCH (Execution_Engine_ID) PHRASE 'is interface provider to' TO 1 I_EXE (Execution_Engine_ID) PHRASE 'is interface requirer of'; +CREATE ROP REF_ID R2968 FROM MC I_RCH (other_Execution_Engine_ID) PHRASE 'is interface requirer of' TO 1 I_EXE (Execution_Engine_ID) PHRASE 'is interface provider to'; +CREATE ROP REF_ID R2969 FROM MC I_RCH (Satisfaction_Id) TO 1C C_SF (Id); +CREATE ROP REF_ID R2970 FROM 1C I_EXE (Package_ID) TO 1C EP_PKG (Package_ID); +CREATE ROP REF_ID R2971 FROM MC CSME_CIE (Package_ID) TO 1C EP_PKG (Package_ID); +CREATE ROP REF_ID R2972 FROM MC I_RCH (Delegation_Id) TO 1C C_DG (Id); +CREATE ROP REF_ID R2973 FROM 1C I_RCH (Next_provider_Channel_Id) PHRASE 'requirer' TO 1C I_RCH (Channel_Id) PHRASE 'provider'; +CREATE ROP REF_ID R2974 FROM 1C I_CIN (Container_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2975 FROM MC I_EXE (Container_ID) TO 1C I_CIN (Container_ID); +CREATE ROP REF_ID R2976 FROM MC I_EVI (Originating_Execution_Engine_ID) TO 1C I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2977 FROM MC I_ICQE (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R2978 FROM MC I_VSF (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R3000 FROM MC L_LCL (Stack_Frame_ID, Block_ID) TO 1 I_BSF (Stack_Frame_ID, Block_ID); +CREATE ROP REF_ID R3001 FROM 1C L_LCR (Local_ID) TO 1 L_LCL (Local_ID); +CREATE ROP REF_ID R3001 FROM 1C L_LSR (Local_ID) TO 1 L_LCL (Local_ID); +CREATE ROP REF_ID R3001 FROM 1C L_LVL (Local_ID) TO 1 L_LCL (Local_ID); +CREATE ROP REF_ID R3003 FROM MC L_LCR (Var_ID) TO 1C V_INS (Var_ID); +CREATE ROP REF_ID R3004 FROM MC L_LCR (Var_ID) TO 1C V_INT (Var_ID); +CREATE ROP REF_ID R3005 FROM MC L_LVL (Var_ID) TO 1C V_TRN (Var_ID); +CREATE ROP REF_ID R3006 FROM 1C L_IWC (Local_ID) TO 1 L_LSR (Local_ID); +CREATE ROP REF_ID R3007 FROM MC L_LCL (SParm_ID) TO 1C S_SPARM (SParm_ID); +CREATE ROP REF_ID R3008 FROM MC L_LCL (TParm_ID) TO 1C O_TPARM (TParm_ID); +CREATE ROP REF_ID R3009 FROM MC L_LCL (BParm_ID) TO 1C S_BPARM (BParm_ID); +CREATE ROP REF_ID R3010 FROM 1C L_LVL (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R3011 FROM 1C L_IIR (Next_Inst_ID, RuntimeValue_ID) PHRASE 'is before' TO 1C L_IIR (Inst_ID, RuntimeValue_ID) PHRASE 'is after'; +CREATE ROP REF_ID R3012 FROM MC L_LCR (RuntimeValue_ID, Inst_ID) TO 1C L_IIR (RuntimeValue_ID, Inst_ID); +CREATE ROP REF_ID R3013 FROM MC L_IIR (Inst_ID) TO 1C I_INS (Inst_ID); +CREATE ROP REF_ID R3014 FROM MC L_IWC (Inst_ID) TO 1 I_INS (Inst_ID); +CREATE ROP REF_ID R3016 FROM 1C L_IWC (Next_Inst_ID, Local_ID) PHRASE 'is before' TO 1C L_IWC (Inst_ID, Local_ID) PHRASE 'is after'; +CREATE ROP REF_ID R3017 FROM MC L_LVL (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R3100 FROM 1C BP_CON (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); +CREATE ROP REF_ID R3101 FROM 1C BP_OAL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R3102 FROM 1C BP_OAL (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); +CREATE ROP REF_ID R3102 FROM 1C BP_EV (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); +CREATE ROP REF_ID R3102 FROM 1C BP_ST (Breakpoint_ID) TO 1 BP_BP (Breakpoint_ID); +CREATE ROP REF_ID R3103 FROM 1C BP_EV (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R3104 FROM 1C BP_ST (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R3200 FROM 1C S_AW (Brg_ID) TO 1 S_BRG (Brg_ID); +CREATE ROP REF_ID R3201 FROM MC S_AW (Sync_ID) TO 1C S_SYNC (Sync_ID); +CREATE ROP REF_ID R3300 FROM 1C RV_SVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3300 FROM 1C RV_SMV (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3300 FROM 1C RV_AVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3301 FROM MC RV_VIS (RuntimeValue_ID) TO 1 RV_SVL (RuntimeValue_ID); +CREATE ROP REF_ID R3301 FROM 1C RV_VIS (ContainedRuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3302 FROM MC RV_VIA (RuntimeValue_ID) TO 1 RV_AVL (RuntimeValue_ID); +CREATE ROP REF_ID R3302 FROM 1C RV_VIA (ContainedRuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3303 FROM MC I_DIV (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3304 FROM MC I_AVL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3305 FROM MC I_VSF (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3306 FROM MC L_LCL (RuntimeValue_ID) TO 1 RV_RVL (RuntimeValue_ID); +CREATE ROP REF_ID R3307 FROM MC RV_RVL (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R3308 FROM 1C RV_SCV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); +CREATE ROP REF_ID R3308 FROM 1C RV_CRV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); +CREATE ROP REF_ID R3308 FROM 1C RV_IRV (RuntimeValue_ID) TO 1 RV_SMV (RuntimeValue_ID); +CREATE ROP REF_ID R3309 FROM MC RV_CRV (Execution_Engine_ID) TO 1 I_EXE (Execution_Engine_ID); +CREATE ROP REF_ID R3310 FROM MC RV_RVL (Stack_Frame_ID) TO 1C I_STF (Stack_Frame_ID); +CREATE ROP REF_ID R3311 FROM MC L_IIR (RuntimeValue_ID) TO 1 RV_IRV (RuntimeValue_ID); +CREATE ROP REF_ID R4002 FROM MC C_SF (Requirement_Id) TO 1 C_R (Requirement_Id); +CREATE ROP REF_ID R4002 FROM MC C_SF (Provision_Id) TO 1 C_P (Provision_Id); +CREATE ROP REF_ID R4003 FROM MC C_EP (Interface_Id) TO 1 C_I (Id); +CREATE ROP REF_ID R4004 FROM 1C C_IO (Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4004 FROM 1C C_AS (Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4006 FROM MC C_PP (Signal_Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4007 FROM MC C_PP (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R4008 FROM MC C_IO (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R4009 FROM 1C C_R (Requirement_Id) TO 1 C_IR (Id); +CREATE ROP REF_ID R4009 FROM 1C C_P (Provision_Id) TO 1 C_IR (Id); +CREATE ROP REF_ID R401 FROM 1C CA_EESMC (CPath_ID) TO 1 CA_COMM (CPath_ID); +CREATE ROP REF_ID R401 FROM 1C CA_SMEEC (CPath_ID) TO 1 CA_COMM (CPath_ID); +CREATE ROP REF_ID R401 FROM 1C CA_SMSMC (CPath_ID) TO 1 CA_COMM (CPath_ID); +CREATE ROP REF_ID R4010 FROM MC C_PO (Component_Id) TO 1 C_C (Id); +CREATE ROP REF_ID R4012 FROM MC C_IR (Formal_Interface_Id) TO 1C C_I (Id); +CREATE ROP REF_ID R4013 FROM MC C_RID (Reference_Id) TO 1 C_IR (Id); +CREATE ROP REF_ID R4013 FROM MC C_RID (Delegation_Id) TO 1 C_DG (Id); +CREATE ROP REF_ID R4014 FROM MC C_IR (Delegation_Id) TO 1C C_DG (Id); +CREATE ROP REF_ID R4016 FROM MC C_IR (Port_Id) TO 1 C_PO (Id); +CREATE ROP REF_ID R4017 FROM MC S_DIM (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R4018 FROM MC S_DIM (Id) TO 1C C_IO (Id); +CREATE ROP REF_ID R4019 FROM 1C C_IO (Previous_Id) PHRASE 'succeeds' TO 1C C_IO (Id) PHRASE 'precedes'; +CREATE ROP REF_ID R402 FROM MC CA_EESMC (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); +CREATE ROP REF_ID R4020 FROM 1C C_AS (Previous_Id) PHRASE 'succeeds' TO 1C C_AS (Id) PHRASE 'precedes'; +CREATE ROP REF_ID R4021 FROM 1C C_PP (Previous_PP_Id) PHRASE 'succeeds' TO 1C C_PP (PP_Id) PHRASE 'precedes'; +CREATE ROP REF_ID R403 FROM MC CA_EESMC (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R404 FROM MC CA_EESME (CPath_ID) TO 1 CA_EESMC (CPath_ID); +CREATE ROP REF_ID R405 FROM MC CA_EESME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R406 FROM MC CA_SMSMC (OSM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R407 FROM MC CA_SMSMC (DSM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R408 FROM MC CA_SMSME (CPath_ID) TO 1 CA_SMSMC (CPath_ID); +CREATE ROP REF_ID R409 FROM MC CA_SMSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R410 FROM MC CA_SMEEC (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R411 FROM MC CA_SMEEC (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); +CREATE ROP REF_ID R412 FROM MC CA_SMEEE (CPath_ID) TO 1 CA_SMEEC (CPath_ID); +CREATE ROP REF_ID R413 FROM MC CA_SMEEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); +CREATE ROP REF_ID R414 FROM MC CA_SMSMC (DIObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R415 FROM 1C CA_SMOA (APath_ID) TO 1 CA_ACC (APath_ID); +CREATE ROP REF_ID R415 FROM 1C CA_SMEEA (APath_ID) TO 1 CA_ACC (APath_ID); +CREATE ROP REF_ID R416 FROM MC CA_ACC (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R417 FROM MC CA_SMOA (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R418 FROM MC CA_SMOAA (APath_ID, Obj_ID) TO 1 CA_SMOA (APath_ID, Obj_ID); +CREATE ROP REF_ID R419 FROM MC CA_SMOAA (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R420 FROM MC CA_SMOA (IObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R4201 FROM MC CL_IC (AssignedComp_Id) TO 1C C_C (Id); +CREATE ROP REF_ID R421 FROM MC CA_SMEEA (EEmod_ID, EE_ID) TO 1 S_EEM (EEmod_ID, EE_ID); +CREATE ROP REF_ID R422 FROM MC CA_SMEED (APath_ID, EE_ID) TO 1 CA_SMEEA (APath_ID, EE_ID); +CREATE ROP REF_ID R423 FROM MC CA_SMEED (EEdi_ID, EE_ID) TO 1 S_EEDI (EEdi_ID, EE_ID); +CREATE ROP REF_ID R424 FROM MC CA_SMSMC (OIObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R425 FROM MC CA_ACC (IObj_ID) TO 1C O_IOBJ (IObj_ID); +CREATE ROP REF_ID R44 FROM MC S_MBR (Parent_DT_DT_ID) TO 1 S_SDT (DT_ID); +CREATE ROP REF_ID R45 FROM MC S_MBR (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R4500 FROM MC SPR_REP (ExecutableProperty_Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4500 FROM MC SPR_REP (Requirement_Id) TO 1 C_R (Requirement_Id); +CREATE ROP REF_ID R4501 FROM MC SPR_PEP (ExecutableProperty_Id) TO 1 C_EP (Id); +CREATE ROP REF_ID R4501 FROM MC SPR_PEP (Provision_Id) TO 1 C_P (Provision_Id); +CREATE ROP REF_ID R4502 FROM 1C SPR_RS (Id) TO 1 SPR_REP (Id); +CREATE ROP REF_ID R4502 FROM 1C SPR_RO (Id) TO 1 SPR_REP (Id); +CREATE ROP REF_ID R4503 FROM 1C SPR_PO (Id) TO 1 SPR_PEP (Id); +CREATE ROP REF_ID R4503 FROM 1C SPR_PS (Id) TO 1 SPR_PEP (Id); +CREATE ROP REF_ID R46 FROM 1C S_MBR (Previous_Member_ID, Parent_DT_DT_ID) PHRASE 'succeeds' TO 1C S_MBR (Member_ID, Parent_DT_DT_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R4701 FROM MC CL_IIR (Ref_Id) TO 1C C_IR (Id); +CREATE ROP REF_ID R4703 FROM 1C CL_IP (Id) TO 1 CL_IIR (Id); +CREATE ROP REF_ID R4703 FROM 1C CL_IR (Id) TO 1 CL_IIR (Id); +CREATE ROP REF_ID R4704 FROM 1C CL_IIR (Delegation_Id) TO 1C C_DG (Id); +CREATE ROP REF_ID R4705 FROM 1C CL_IPINS (Satisfaction_Id) TO 1 C_SF (Id); +CREATE ROP REF_ID R4705 FROM MC CL_IPINS (ImportedProvision_Id) TO 1 CL_IP (Id); +CREATE ROP REF_ID R4706 FROM 1C CL_IR (Satisfaction_Element_Id) TO 1C C_SF (Id); +CREATE ROP REF_ID R4707 FROM MC CL_POR (CL_IC_Id) TO 1 CL_IC (Id); +CREATE ROP REF_ID R4708 FROM MC CL_IIR (CL_POR_Id) TO 1 CL_POR (Id); +CREATE ROP REF_ID R4709 FROM MC CL_POR (C_PO_Id) TO 1C C_PO (Id); +CREATE ROP REF_ID R49 FROM MC S_DIM (BParm_ID) TO 1C S_BPARM (BParm_ID); +CREATE ROP REF_ID R50 FROM MC S_DIM (Brg_ID) TO 1C S_BRG (Brg_ID); +CREATE ROP REF_ID R501 FROM MC SM_STATE (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R502 FROM MC SM_EVT (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R503 FROM MC SM_SEME (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R503 FROM MC SM_SEME (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R504 FROM 1C SM_EIGN (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); +CREATE ROP REF_ID R504 FROM 1C SM_CH (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); +CREATE ROP REF_ID R504 FROM 1C SM_NSTXN (SM_ID, SMevt_ID, SMstt_ID) TO 1 SM_SEME (SM_ID, SMevt_ID, SMstt_ID); +CREATE ROP REF_ID R505 FROM MC SM_TXN (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R506 FROM MC SM_TXN (SMstt_ID, SM_ID) TO 1 SM_STATE (SMstt_ID, SM_ID); +CREATE ROP REF_ID R507 FROM 1C SM_NETXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R507 FROM 1C SM_CRTXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R507 FROM 1C SM_NSTXN (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R508 FROM MC SM_NETXN (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R509 FROM 1C SM_CRTXN (SM_ID, SMevt_ID) TO 1C SM_LEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R51 FROM MC S_DIM (Sync_ID) TO 1C S_SYNC (Sync_ID); +CREATE ROP REF_ID R510 FROM 1C SM_MEALY (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R510 FROM 1C SM_MOORE (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R511 FROM MC SM_MOAH (SM_ID) TO 1 SM_MOORE (SM_ID); +CREATE ROP REF_ID R511 FROM 1C SM_MOAH (SM_ID, SMstt_ID) TO 1 SM_STATE (SM_ID, SMstt_ID); +CREATE ROP REF_ID R512 FROM M SM_MEAH (SM_ID) TO 1 SM_MEALY (SM_ID); +CREATE ROP REF_ID R512 FROM 1C SM_MEAH (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R513 FROM 1C SM_MOAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); +CREATE ROP REF_ID R513 FROM 1C SM_MEAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); +CREATE ROP REF_ID R513 FROM 1C SM_TAH (SM_ID, Act_ID) TO 1 SM_AH (SM_ID, Act_ID); +CREATE ROP REF_ID R514 FROM 1 SM_AH (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); +CREATE ROP REF_ID R515 FROM MC SM_ACT (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R516 FROM MC SM_EVTDI (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R517 FROM 1C SM_ISM (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R517 FROM 1C SM_ASM (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R518 FROM 1C SM_ISM (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R519 FROM 1C SM_ASM (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R52 FROM MC S_DIM (SParm_ID) TO 1C S_SPARM (SParm_ID); +CREATE ROP REF_ID R520 FROM M SM_EVT (SM_ID) TO 1C SM_SUPDT (SM_ID); +CREATE ROP REF_ID R521 FROM MC SM_STATE (SM_ID) TO 1C SM_SUPDT (SM_ID); +CREATE ROP REF_ID R522 FROM MC SM_SDI (SM_ID) TO 1 SM_SUPDT (SM_ID); +CREATE ROP REF_ID R522 FROM MC SM_SDI (SM_ID, SMedi_ID) TO 1 SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R523 FROM MC SM_SUPDT (SM_ID) TO 1 SM_SM (SM_ID); +CREATE ROP REF_ID R524 FROM MC SM_EVTDI (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R525 FROM 1C SM_SEVT (SM_ID, SMevt_ID) TO 1 SM_EVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R525 FROM 1C SM_PEVT (SM_ID, SMevt_ID) TO 1 SM_EVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R526 FROM 1C SM_NLEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R526 FROM 1C SM_LEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R526 FROM 1C SM_SGEVT (SM_ID, SMevt_ID) TO 1 SM_SEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R527 FROM MC SM_NLEVT (polySM_ID, polySMevt_ID) TO 1 SM_PEVT (SM_ID, SMevt_ID); +CREATE ROP REF_ID R528 FROM 1C SM_SGEVT (Provided_Signal_Id) TO 1C SPR_PS (Id); +CREATE ROP REF_ID R529 FROM 1C SM_SGEVT (Required_Signal_Id) TO 1C SPR_RS (Id); +CREATE ROP REF_ID R53 FROM MC S_DIM (DT_ID, Member_ID) TO 1C S_MBR (Parent_DT_DT_ID, Member_ID); +CREATE ROP REF_ID R530 FROM 1C SM_TAH (SM_ID, Trans_ID) TO 1 SM_TXN (SM_ID, Trans_ID); +CREATE ROP REF_ID R531 FROM MC S_DIM (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R532 FROM MC SM_EVTDI (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R533 FROM 1C SM_EVTDI (SM_ID, Previous_SMedi_ID) PHRASE 'succeeds' TO 1C SM_EVTDI (SM_ID, SMedi_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R54 FROM 1C S_SPARM (Previous_SParm_ID) PHRASE 'succeeds' TO 1C S_SPARM (SParm_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R55 FROM 1C S_BPARM (Previous_BParm_ID) PHRASE 'succeeds' TO 1C S_BPARM (BParm_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R56 FROM 1C S_ENUM (Previous_Enum_ID) PHRASE 'succeeds' TO 1C S_ENUM (Enum_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R601 FROM MC ACT_BLK (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R602 FROM MC ACT_SMT (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_FOR (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_WHL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_IF (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_EL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_E (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_BRG (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_FNC (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_RET (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_TFM (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_AI (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_DEL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_CNV (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_CR (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_SEL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_FIO (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_FIW (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_URU (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_UNR (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_RU (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_REL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_CTL (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_BRK (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_CON (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C E_ESS (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C E_GPR (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_IOP (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R603 FROM 1C ACT_SGN (Statement_ID) TO 1 ACT_SMT (Statement_ID); +CREATE ROP REF_ID R604 FROM 1C ACT_LNK (Next_Link_ID) PHRASE 'precedes' TO 1C ACT_LNK (Link_ID) PHRASE 'succeeds'; +CREATE ROP REF_ID R605 FROM 1C ACT_FOR (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R606 FROM 1C ACT_E (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R607 FROM 1C ACT_IF (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R608 FROM 1C ACT_WHL (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R609 FROM 1C ACT_AI (r_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R610 FROM 1C ACT_FIW (Where_Clause_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R611 FROM 1C ACT_SRW (Where_Clause_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R613 FROM 1C ACT_SEL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R614 FROM MC ACT_FOR (Loop_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R615 FROM MC ACT_REL (One_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R616 FROM MC ACT_REL (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R617 FROM MC ACT_RU (One_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R618 FROM MC ACT_RU (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R619 FROM MC ACT_RU (Associative_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R620 FROM MC ACT_UNR (One_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R621 FROM MC ACT_UNR (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R622 FROM MC ACT_URU (One_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R623 FROM MC ACT_URU (Other_Side_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R624 FROM MC ACT_URU (Associative_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R625 FROM 1C ACT_IF (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R626 FROM 1C ACT_WHL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R627 FROM MC V_PAR (Statement_ID) TO 1C ACT_TFM (Statement_ID); +CREATE ROP REF_ID R628 FROM MC V_PAR (Statement_ID) TO 1C ACT_BRG (Statement_ID); +CREATE ROP REF_ID R629 FROM MC ACT_IOP (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R630 FROM MC ACT_SGN (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R633 FROM MC ACT_CR (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R634 FROM MC ACT_DEL (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R637 FROM 1 ACT_LNK (Statement_ID) TO 1C ACT_SEL (Statement_ID); +CREATE ROP REF_ID R638 FROM MC ACT_SEL (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R639 FROM MC ACT_FIO (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R652 FROM MC ACT_FOR (Set_Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R653 FROM MC ACT_REL (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R654 FROM MC ACT_RU (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R655 FROM MC ACT_UNR (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R656 FROM MC ACT_URU (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R657 FROM MC ACT_IOP (RequiredOp_Id) TO 1C SPR_RO (Id); +CREATE ROP REF_ID R658 FROM 1C ACT_EL (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R659 FROM 1C ACT_EL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R660 FROM MC ACT_SGN (RequiredSig_Id) TO 1C SPR_RS (Id); +CREATE ROP REF_ID R661 FROM 1C ACT_SMT (Previous_Statement_ID, Block_ID) PHRASE 'succeeds' TO 1C ACT_SMT (Statement_ID, Block_ID) PHRASE 'precedes'; +CREATE ROP REF_ID R662 FROM MC V_PAR (Statement_ID) TO 1C ACT_SGN (Statement_ID); +CREATE ROP REF_ID R663 FROM MC ACT_SGN (ProvidedSig_Id) TO 1C SPR_PS (Id); +CREATE ROP REF_ID R664 FROM 1C ACT_SRW (Statement_ID) TO 1 ACT_SEL (Statement_ID); +CREATE ROP REF_ID R664 FROM 1C ACT_SR (Statement_ID) TO 1 ACT_SEL (Statement_ID); +CREATE ROP REF_ID R665 FROM MC ACT_FIW (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R666 FROM 1C ACT_ACT (Block_ID) TO 1C ACT_BLK (Block_ID); +CREATE ROP REF_ID R667 FROM MC ACT_TFM (Var_ID) TO 1C V_VAR (Var_ID); +CREATE ROP REF_ID R668 FROM 1C ACT_RET (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R669 FROM MC V_PAR (Statement_ID) TO 1C ACT_FNC (Statement_ID); +CREATE ROP REF_ID R670 FROM MC ACT_FOR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R671 FROM MC ACT_CR (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R672 FROM MC ACT_CNV (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R673 FROM MC ACT_TFM (Tfr_ID) TO 1C O_TFR (Tfr_ID); +CREATE ROP REF_ID R674 FROM MC ACT_BRG (Brg_ID) TO 1C S_BRG (Brg_ID); +CREATE ROP REF_ID R675 FROM MC ACT_FNC (Sync_ID) TO 1C S_SYNC (Sync_ID); +CREATE ROP REF_ID R676 FROM MC ACT_FIW (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R677 FROM MC ACT_FIO (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R678 FROM MC ACT_LNK (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R679 FROM MC V_PAR (Statement_ID) TO 1C ACT_IOP (Statement_ID); +CREATE ROP REF_ID R680 FROM MC ACT_IOP (ProvidedOp_Id) TO 1C SPR_PO (Id); +CREATE ROP REF_ID R681 FROM MC ACT_LNK (Rel_ID) TO 1 R_REL (Rel_ID); +CREATE ROP REF_ID R682 FROM MC ACT_EL (If_Statement_ID) TO 1 ACT_IF (Statement_ID); +CREATE ROP REF_ID R683 FROM 1C ACT_E (If_Statement_ID) TO 1 ACT_IF (Statement_ID); +CREATE ROP REF_ID R684 FROM 1C ACT_RSB (Id) TO 1 SPR_RS (Id); +CREATE ROP REF_ID R685 FROM 1C ACT_ROB (Id) TO 1 SPR_RO (Id); +CREATE ROP REF_ID R686 FROM 1C ACT_PSB (Id) TO 1 SPR_PS (Id); +CREATE ROP REF_ID R687 FROM 1C ACT_POB (Id) TO 1 SPR_PO (Id); +CREATE ROP REF_ID R688 FROM 1C ACT_TAB (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); +CREATE ROP REF_ID R689 FROM 1C ACT_AI (l_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R690 FROM 1C ACT_IF (Elif_Statement_ID) TO 1C ACT_EL (Statement_ID); +CREATE ROP REF_ID R691 FROM 1C ACT_SAB (SM_ID, Act_ID) TO 1 SM_ACT (SM_ID, Act_ID); +CREATE ROP REF_ID R692 FROM 1C ACT_IF (Else_Statement_ID) TO 1C ACT_E (Statement_ID); +CREATE ROP REF_ID R693 FROM 1C ACT_DAB (Attr_ID, Obj_ID) TO 1 O_DBATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R695 FROM 1C ACT_FNB (Sync_ID) TO 1 S_SYNC (Sync_ID); +CREATE ROP REF_ID R696 FROM 1C ACT_OPB (Tfr_ID) TO 1 O_TFR (Tfr_ID); +CREATE ROP REF_ID R697 FROM 1C ACT_BRB (Brg_ID) TO 1 S_BRG (Brg_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_SAB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_DAB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_FNB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_OPB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_BRB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_POB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_PSB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_ROB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_RSB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R698 FROM 1C ACT_TAB (Action_ID) TO 1 ACT_ACT (Action_ID); +CREATE ROP REF_ID R699 FROM 1C ACT_ACT (CurrentScope_ID) TO 1C ACT_BLK (Block_ID); +CREATE ROP REF_ID R700 FROM MC V_PAR (Statement_ID) TO 1C E_ESS (Statement_ID); +CREATE ROP REF_ID R701 FROM 1C E_CES (Statement_ID) TO 1 E_ESS (Statement_ID); +CREATE ROP REF_ID R701 FROM 1C E_GES (Statement_ID) TO 1 E_ESS (Statement_ID); +CREATE ROP REF_ID R702 FROM 1C E_CEE (Statement_ID) TO 1 E_CES (Statement_ID); +CREATE ROP REF_ID R702 FROM 1C E_CSME (Statement_ID) TO 1 E_CES (Statement_ID); +CREATE ROP REF_ID R703 FROM 1C E_GEE (Statement_ID) TO 1 E_GES (Statement_ID); +CREATE ROP REF_ID R703 FROM 1C E_GSME (Statement_ID) TO 1 E_GES (Statement_ID); +CREATE ROP REF_ID R704 FROM 1C E_CEI (Statement_ID) TO 1 E_CSME (Statement_ID); +CREATE ROP REF_ID R704 FROM 1C E_CEA (Statement_ID) TO 1 E_CSME (Statement_ID); +CREATE ROP REF_ID R704 FROM 1C E_CEC (Statement_ID) TO 1 E_CSME (Statement_ID); +CREATE ROP REF_ID R705 FROM 1C E_GEN (Statement_ID) TO 1 E_GSME (Statement_ID); +CREATE ROP REF_ID R705 FROM 1C E_GAR (Statement_ID) TO 1 E_GSME (Statement_ID); +CREATE ROP REF_ID R705 FROM 1C E_GEC (Statement_ID) TO 1 E_GSME (Statement_ID); +CREATE ROP REF_ID R706 FROM MC E_CSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R707 FROM MC E_GSME (SMevt_ID) TO 1 SM_EVT (SMevt_ID); +CREATE ROP REF_ID R708 FROM MC E_CEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); +CREATE ROP REF_ID R709 FROM MC E_GEE (EEevt_ID, EE_ID) TO 1 S_EEEVT (EEevt_ID, EE_ID); +CREATE ROP REF_ID R710 FROM MC E_CES (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R711 FROM MC E_CEI (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R712 FROM MC E_GEN (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R714 FROM 1C E_GPR (Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R800 FROM 1C V_PAR (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R8000 FROM MC PE_PE (Package_ID) TO 1C EP_PKG (Package_ID); +CREATE ROP REF_ID R8001 FROM 1C S_DT (DT_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C SQ_P (Part_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C UC_UCA (Assoc_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C A_N (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C O_OBJ (Obj_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C C_C (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C CL_IC (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C C_I (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C EP_PKG (Package_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C CNST_CSP (Constant_Spec_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C A_AP (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C A_E (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C MSG_M (Msg_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C O_IOBJ (IObj_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C R_REL (Rel_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C S_EE (EE_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C S_SYNC (Sync_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C C_SF (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8001 FROM 1C C_DG (Id) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R8003 FROM MC PE_PE (Component_ID) TO 1C C_C (Id); +CREATE ROP REF_ID R801 FROM 1C V_FNV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_PVL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_SLR (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_BRV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_IRF (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_AVL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LIN (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LST (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_UNY (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_TRV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_ISR (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_EDV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_TVL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LRL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LBO (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_BIN (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_LEN (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_MVL (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_AER (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_ALV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_MSV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R801 FROM 1C V_SCV (Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R802 FROM 1C V_BIN (Left_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R803 FROM 1C V_BIN (Right_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R804 FROM 1C V_UNY (Operand_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R805 FROM MC V_TVL (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R806 FROM MC V_AVL (Attr_ID, Obj_ID) TO 1 O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R807 FROM 1C V_AVL (Root_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R808 FROM MC V_IRF (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R809 FROM MC V_ISR (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R810 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_BRV (Value_ID); +CREATE ROP REF_ID R811 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_TRV (Value_ID); +CREATE ROP REF_ID R812 FROM MC V_SLR (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R814 FROM 1C V_INT (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R814 FROM 1C V_INS (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R814 FROM 1C V_TRN (Var_ID) TO 1 V_VAR (Var_ID); +CREATE ROP REF_ID R816 FROM 1C V_PAR (Next_Value_ID) PHRASE 'precedes' TO 1C V_PAR (Value_ID) PHRASE 'succeeds'; +CREATE ROP REF_ID R817 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_FNV (Value_ID); +CREATE ROP REF_ID R818 FROM MC V_INT (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R819 FROM MC V_INS (Obj_ID) TO 1 O_OBJ (Obj_ID); +CREATE ROP REF_ID R820 FROM MC V_VAL (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R821 FROM MC V_TRN (DT_ID) TO 1C S_DT (DT_ID); +CREATE ROP REF_ID R823 FROM MC V_VAR (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R824 FROM MC V_LEN (Enum_ID) TO 1 S_ENUM (Enum_ID); +CREATE ROP REF_ID R825 FROM 1C V_SLR (Op_Value_ID) TO 1C V_TRV (Value_ID); +CREATE ROP REF_ID R826 FROM MC V_VAL (Block_ID) TO 1 ACT_BLK (Block_ID); +CREATE ROP REF_ID R827 FROM MC V_FNV (Sync_ID) TO 1 S_SYNC (Sync_ID); +CREATE ROP REF_ID R828 FROM MC V_BRV (Brg_ID) TO 1 S_BRG (Brg_ID); +CREATE ROP REF_ID R829 FROM MC V_TRV (Tfr_ID) TO 1 O_TFR (Tfr_ID); +CREATE ROP REF_ID R830 FROM MC V_TRV (Var_ID) TO 1C V_VAR (Var_ID); +CREATE ROP REF_ID R831 FROM MC V_PVL (BParm_ID) TO 1C S_BPARM (BParm_ID); +CREATE ROP REF_ID R832 FROM MC V_PVL (SParm_ID) TO 1C S_SPARM (SParm_ID); +CREATE ROP REF_ID R833 FROM MC V_PVL (TParm_ID) TO 1C O_TPARM (TParm_ID); +CREATE ROP REF_ID R834 FROM MC V_EPR (Value_ID) TO 1 V_EDV (Value_ID); +CREATE ROP REF_ID R835 FROM M V_LOC (Var_ID) TO 1C V_VAR (Var_ID); +CREATE ROP REF_ID R836 FROM MC V_MVL (DT_DT_ID, Member_ID) TO 1 S_MBR (Parent_DT_DT_ID, Member_ID); +CREATE ROP REF_ID R837 FROM 1C V_MVL (Root_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R838 FROM 1C V_AER (Root_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R839 FROM 1C V_AER (Index_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R840 FROM 1C V_ALV (Array_Value_ID) TO 1 V_VAL (Value_ID); +CREATE ROP REF_ID R841 FROM MC V_MSV (PEP_Id) TO 1C SPR_PEP (Id); +CREATE ROP REF_ID R842 FROM MC V_PAR (Invocation_Value_ID) TO 1C V_MSV (Value_ID); +CREATE ROP REF_ID R843 FROM MC V_PVL (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R844 FROM MC S_DIM (Var_ID) TO 1C V_TRN (Var_ID); +CREATE ROP REF_ID R845 FROM MC V_MSV (REP_Id) TO 1C SPR_REP (Id); +CREATE ROP REF_ID R846 FROM MC V_EPR (SM_ID, SMedi_ID) TO 1C SM_EVTDI (SM_ID, SMedi_ID); +CREATE ROP REF_ID R847 FROM MC V_EPR (PP_Id) TO 1C C_PP (PP_Id); +CREATE ROP REF_ID R848 FROM MC V_VAR (DT_ID) TO 1 S_DT (DT_ID); +CREATE ROP REF_ID R849 FROM MC S_DIM (Var_ID) TO 1C V_VAR (Var_ID); +CREATE ROP REF_ID R850 FROM MC V_SCV (Const_ID, DT_ID) TO 1 CNST_SYC (Const_ID, DT_ID); +CREATE ROP REF_ID R851 FROM MC V_MSV (Target_Value_ID) TO 1C V_VAL (Value_ID); +CREATE ROP REF_ID R9 FROM MC S_EEM (EE_ID) TO 1 S_EE (EE_ID); +CREATE ROP REF_ID R9000 FROM MC PA_SIC (Component_Id) TO 1 C_C (Id); +CREATE ROP REF_ID R9000 FROM 1C PA_SIC (Satisfaction_Id) TO 1 C_SF (Id); +CREATE ROP REF_ID R9002 FROM MC PA_DIC (Component_Id) TO 1 C_C (Id); +CREATE ROP REF_ID R9002 FROM 1 PA_DIC (Delegation_Id) TO 1 C_DG (Id); +CREATE ROP REF_ID R9100 FROM MC G_EIS (Element_ID) TO 1 PE_PE (Element_ID); +CREATE ROP REF_ID R9100 FROM MC G_EIS (Sys_ID) TO 1 S_SYS (Sys_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_CIP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_EEP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_CP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_AP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_LS (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C IA_UCP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_COP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R930 FROM 1C SQ_PP (Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R931 FROM MC SQ_TM (Part_ID) TO 1 SQ_LS (Part_ID); +CREATE ROP REF_ID R933 FROM MC SQ_EEP (EE_ID) TO 1C S_EE (EE_ID); +CREATE ROP REF_ID R934 FROM MC SQ_CIP (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R935 FROM MC SQ_CPA (Part_ID) TO 1 SQ_CP (Part_ID); +CREATE ROP REF_ID R936 FROM MC SQ_AV (Informal_Part_ID) TO 1C SQ_CIP (Part_ID); +CREATE ROP REF_ID R937 FROM MC SQ_AV (Formal_Part_ID) TO 1C SQ_CIP (Part_ID); +CREATE ROP REF_ID R938 FROM MC SQ_AV (Attr_ID, Obj_ID) TO 1C O_ATTR (Attr_ID, Obj_ID); +CREATE ROP REF_ID R939 FROM MC SQ_CP (Obj_ID) TO 1C O_OBJ (Obj_ID); +CREATE ROP REF_ID R940 FROM 1C SQ_LS (Source_Part_ID) TO 1 SQ_P (Part_ID); +CREATE ROP REF_ID R941 FROM MC SQ_TS (Prev_Mark_ID) TO 1 SQ_TM (Mark_ID); +CREATE ROP REF_ID R942 FROM MC SQ_TS (Mark_ID) TO 1 SQ_TM (Mark_ID); +CREATE ROP REF_ID R947 FROM 1C SQ_IA (Ia_ID) TO 1 SQ_CPA (Ia_ID); +CREATE ROP REF_ID R947 FROM 1C SQ_FA (Ia_ID) TO 1 SQ_CPA (Ia_ID); +CREATE ROP REF_ID R948 FROM 1C SQ_IAV (Av_ID) TO 1 SQ_AV (Av_ID); +CREATE ROP REF_ID R948 FROM 1C SQ_FAV (Av_ID) TO 1 SQ_AV (Av_ID); +CREATE ROP REF_ID R949 FROM 1C SQ_AP (LS_Part_ID) TO 1C SQ_LS (Part_ID); +CREATE ROP REF_ID R955 FROM MC SQ_COP (Component_Id) TO 1C C_C (Id); +CREATE ROP REF_ID R956 FROM MC SQ_PP (Package_ID) TO 1C EP_PKG (Package_ID); +''' + +indices = ''' +CREATE UNIQUE INDEX I1 ON PA_SIC (Satisfaction_Id, Component_Id); +CREATE UNIQUE INDEX I1 ON E_CES (Statement_ID); +CREATE UNIQUE INDEX I1 ON SPR_PEP (Id); +CREATE UNIQUE INDEX I1 ON V_MVL (Value_ID); +CREATE UNIQUE INDEX I1 ON S_BRG (Brg_ID); +CREATE UNIQUE INDEX I1 ON S_DIM (DIM_ID); +CREATE UNIQUE INDEX I1 ON I_TIM (Timer_ID); +CREATE UNIQUE INDEX I1 ON ACT_FNB (Action_ID); +CREATE UNIQUE INDEX I1 ON ACT_FNC (Statement_ID); +CREATE UNIQUE INDEX I1 ON S_SPARM (SParm_ID); +CREATE UNIQUE INDEX I1 ON E_CEA (Statement_ID); +CREATE UNIQUE INDEX I1 ON SQ_CPA (Ia_ID); +CREATE UNIQUE INDEX I1 ON E_CEC (Statement_ID); +CREATE UNIQUE INDEX I1 ON E_CEE (Statement_ID); +CREATE UNIQUE INDEX I1 ON V_SLR (Value_ID); +CREATE UNIQUE INDEX I1 ON E_CEI (Statement_ID); +CREATE UNIQUE INDEX I1 ON SM_EVT (SMevt_ID); +CREATE UNIQUE INDEX I2 ON SM_EVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON SM_NETXN (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I1 ON V_TRN (Var_ID); +CREATE UNIQUE INDEX I1 ON MSG_SM (Msg_ID); +CREATE UNIQUE INDEX I1 ON O_ATTR (Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON RV_RVL (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON I_LNK (Link_ID); +CREATE UNIQUE INDEX I1 ON E_GEC (Statement_ID); +CREATE UNIQUE INDEX I1 ON ACT_POB (Action_ID); +CREATE UNIQUE INDEX I1 ON A_AEA (Id); +CREATE UNIQUE INDEX I1 ON E_GEN (Statement_ID); +CREATE UNIQUE INDEX I1 ON CA_SMEEC (CPath_ID); +CREATE UNIQUE INDEX I2 ON CA_SMEEC (SM_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON ACT_SGN (Statement_ID); +CREATE UNIQUE INDEX I1 ON CA_SMEEA (APath_ID); +CREATE UNIQUE INDEX I2 ON CA_SMEEA (APath_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON L_IIR (RuntimeValue_ID, Inst_ID); +CREATE UNIQUE INDEX I1 ON RV_SVL (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON CNST_SYC (Const_ID, DT_ID); +CREATE UNIQUE INDEX I1 ON O_NBATTR (Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON CA_SMSME (SMevt_ID, CPath_ID); +CREATE UNIQUE INDEX I1 ON A_DM (Id); +CREATE UNIQUE INDEX I1 ON A_CTL (Id); +CREATE UNIQUE INDEX I1 ON RV_VIA (ContainedRuntimeValue_ID, RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON CNST_LSC (Const_ID, DT_ID); +CREATE UNIQUE INDEX I1 ON CA_SMSMC (CPath_ID); +CREATE UNIQUE INDEX I2 ON CA_SMSMC (DSM_ID, OSM_ID); +CREATE UNIQUE INDEX I1 ON R_SUB (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_MEAH (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I2 ON SM_MEAH (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON A_SS (Id); +CREATE UNIQUE INDEX I1 ON IA_UCP (Part_ID); +CREATE UNIQUE INDEX I1 ON SM_SEME (SM_ID, SMevt_ID, SMstt_ID); +CREATE UNIQUE INDEX I1 ON SM_MOORE (SM_ID); +CREATE UNIQUE INDEX I1 ON ACT_EL (Statement_ID); +CREATE UNIQUE INDEX I1 ON ACT_RET (Statement_ID); +CREATE UNIQUE INDEX I1 ON A_FJ (Id); +CREATE UNIQUE INDEX I1 ON ACT_FOR (Statement_ID); +CREATE UNIQUE INDEX I1 ON O_OBJ (Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_REL (Statement_ID); +CREATE UNIQUE INDEX I1 ON SM_NSTXN (SMstt_ID, SMevt_ID, SM_ID); +CREATE UNIQUE INDEX I2 ON SM_NSTXN (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I1 ON V_LOC (Id); +CREATE UNIQUE INDEX I1 ON C_AS (Id); +CREATE UNIQUE INDEX I1 ON MSG_IOP (Msg_ID); +CREATE UNIQUE INDEX I1 ON CSME_CIE (CIE_ID); +CREATE UNIQUE INDEX I1 ON R_FORM (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_TAB (Action_ID); +CREATE UNIQUE INDEX I1 ON SM_NLEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON CL_IPINS (Satisfaction_Id, ImportedProvision_Id); +CREATE UNIQUE INDEX I1 ON C_IO (Id); +CREATE UNIQUE INDEX I1 ON SQ_TM (Mark_ID); +CREATE UNIQUE INDEX I1 ON RV_AVL (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON V_INT (Var_ID); +CREATE UNIQUE INDEX I1 ON ACT_CON (Statement_ID); +CREATE UNIQUE INDEX I1 ON MSG_R (Msg_ID); +CREATE UNIQUE INDEX I1 ON RV_CRV (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON SQ_TS (Span_ID); +CREATE UNIQUE INDEX I1 ON C_IR (Id); +CREATE UNIQUE INDEX I1 ON CA_ACC (APath_ID); +CREATE UNIQUE INDEX I1 ON E_CSME (Statement_ID); +CREATE UNIQUE INDEX I1 ON L_IWC (Local_ID, Inst_ID); +CREATE UNIQUE INDEX I1 ON BP_BP (Breakpoint_ID); +CREATE UNIQUE INDEX I1 ON V_SCV (Value_ID); +CREATE UNIQUE INDEX I1 ON V_AER (Value_ID); +CREATE UNIQUE INDEX I1 ON V_PAR (Value_ID); +CREATE UNIQUE INDEX I1 ON V_UNY (Value_ID); +CREATE UNIQUE INDEX I1 ON SM_EVTDI (SM_ID, SMedi_ID); +CREATE UNIQUE INDEX I1 ON I_EXE (Execution_Engine_ID); +CREATE UNIQUE INDEX I1 ON MSG_AM (Msg_ID); +CREATE UNIQUE INDEX I1 ON V_VAR (Var_ID); +CREATE UNIQUE INDEX I1 ON S_EEEDI (EEedi_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON C_DG (Id); +CREATE UNIQUE INDEX I1 ON S_EEEDT (EEevt_ID, EEedi_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON S_CDT (DT_ID); +CREATE UNIQUE INDEX I1 ON S_IRDT (DT_ID); +CREATE UNIQUE INDEX I1 ON SM_MOAH (SM_ID, SMstt_ID); +CREATE UNIQUE INDEX I2 ON SM_MOAH (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON CNST_LFSC (Const_ID, DT_ID); +CREATE UNIQUE INDEX I1 ON ACT_TFM (Statement_ID); +CREATE UNIQUE INDEX I1 ON O_OIDA (Attr_ID, Oid_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON I_MON (Execution_Engine_ID, Inst_ID); +CREATE UNIQUE INDEX I1 ON SQ_FA (Ia_ID); +CREATE UNIQUE INDEX I1 ON SM_CRTXN (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I1 ON MSG_O (Msg_ID); +CREATE UNIQUE INDEX I1 ON SPR_PS (Id); +CREATE UNIQUE INDEX I1 ON MSG_M (Msg_ID); +CREATE UNIQUE INDEX I1 ON ACT_OPB (Action_ID); +CREATE UNIQUE INDEX I1 ON ACT_SRW (Statement_ID); +CREATE UNIQUE INDEX I1 ON A_ACT (Id); +CREATE UNIQUE INDEX I1 ON MSG_SIG (Msg_ID); +CREATE UNIQUE INDEX I1 ON ACT_ACT (Action_ID); +CREATE UNIQUE INDEX I1 ON MSG_F (Msg_ID); +CREATE UNIQUE INDEX I1 ON MSG_E (Msg_ID); +CREATE UNIQUE INDEX I1 ON MSG_B (Msg_ID); +CREATE UNIQUE INDEX I1 ON MSG_A (Arg_ID); +CREATE UNIQUE INDEX I1 ON ACT_SAB (Action_ID); +CREATE UNIQUE INDEX I1 ON A_FF (Id); +CREATE UNIQUE INDEX I1 ON SM_SEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON ACT_AI (Statement_ID); +CREATE UNIQUE INDEX I1 ON R_ASSR (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON RV_IRV (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON SPR_PO (Id); +CREATE UNIQUE INDEX I1 ON V_AVL (Value_ID); +CREATE UNIQUE INDEX I1 ON A_ATE (Id); +CREATE UNIQUE INDEX I1 ON V_LIN (Value_ID); +CREATE UNIQUE INDEX I1 ON ACT_FIO (Statement_ID); +CREATE UNIQUE INDEX I1 ON RV_SMV (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON ACT_SEL (Statement_ID); +CREATE UNIQUE INDEX I1 ON SM_TAH (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON ACT_DEL (Statement_ID); +CREATE UNIQUE INDEX I1 ON V_FNV (Value_ID); +CREATE UNIQUE INDEX I1 ON V_LEN (Value_ID); +CREATE UNIQUE INDEX I1 ON A_E (Id); +CREATE UNIQUE INDEX I1 ON SM_AH (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON SQ_CIP (Part_ID); +CREATE UNIQUE INDEX I1 ON A_N (Id); +CREATE UNIQUE INDEX I1 ON ACT_FIW (Statement_ID); +CREATE UNIQUE INDEX I1 ON O_ID (Oid_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON I_EQE (Event_Queue_Entry_ID); +CREATE UNIQUE INDEX I2 ON I_EQE (Event_ID, Execution_Engine_ID); +CREATE UNIQUE INDEX I1 ON ACT_URU (Statement_ID); +CREATE UNIQUE INDEX I1 ON S_EEDI (EEdi_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON O_DBATTR (Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_TXN (SM_ID, Trans_ID); +CREATE UNIQUE INDEX I1 ON SM_SDI (SM_ID, SMedi_ID); +CREATE UNIQUE INDEX I1 ON L_LVL (Local_ID); +CREATE UNIQUE INDEX I1 ON R_ASSOC (Rel_ID); +CREATE UNIQUE INDEX I1 ON MSG_IA (Arg_ID); +CREATE UNIQUE INDEX I1 ON R_CONE (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_SGEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON S_BPARM (BParm_ID); +CREATE UNIQUE INDEX I1 ON O_RTIDA (OIR_ID, Rel_ID, Attr_ID, Oid_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON S_EEEVT (EEevt_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON SPR_REP (Id); +CREATE UNIQUE INDEX I1 ON CNST_CSP (Constant_Spec_ID); +CREATE UNIQUE INDEX I1 ON V_PVL (Value_ID); +CREATE UNIQUE INDEX I1 ON O_RATTR (Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_ACT (SM_ID, Act_ID); +CREATE UNIQUE INDEX I1 ON SM_SM (SM_ID); +CREATE UNIQUE INDEX I1 ON E_GEE (Statement_ID); +CREATE UNIQUE INDEX I1 ON ACT_DAB (Action_ID); +CREATE UNIQUE INDEX I1 ON V_ISR (Value_ID); +CREATE UNIQUE INDEX I1 ON UC_BA (Assoc_ID); +CREATE UNIQUE INDEX I1 ON V_BRV (Value_ID); +CREATE UNIQUE INDEX I1 ON I_INS (Inst_ID); +CREATE UNIQUE INDEX I1 ON SM_MEALY (SM_ID); +CREATE UNIQUE INDEX I1 ON ACT_LNK (Link_ID); +CREATE UNIQUE INDEX I1 ON ACT_WHL (Statement_ID); +CREATE UNIQUE INDEX I1 ON S_EDT (DT_ID); +CREATE UNIQUE INDEX I1 ON MSG_IAM (Msg_ID); +CREATE UNIQUE INDEX I1 ON O_BATTR (Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_RSB (Action_ID); +CREATE UNIQUE INDEX I1 ON MSG_ISM (Msg_ID); +CREATE UNIQUE INDEX I1 ON BP_EV (Breakpoint_ID); +CREATE UNIQUE INDEX I1 ON I_BSF (Stack_Frame_ID, Block_ID); +CREATE UNIQUE INDEX I1 ON V_EDV (Value_ID); +CREATE UNIQUE INDEX I1 ON I_ICQE (Stack_ID, Stack_Frame_ID); +CREATE UNIQUE INDEX I1 ON ACT_CR (Statement_ID); +CREATE UNIQUE INDEX I1 ON I_EVI (Event_ID); +CREATE UNIQUE INDEX I1 ON CL_IC (Id); +CREATE UNIQUE INDEX I1 ON SPR_RS (Id); +CREATE UNIQUE INDEX I1 ON S_DT (DT_ID); +CREATE UNIQUE INDEX I2 ON S_DT (DT_ID); +CREATE UNIQUE INDEX I1 ON SPR_RO (Id); +CREATE UNIQUE INDEX I1 ON CA_COMM (CPath_ID); +CREATE UNIQUE INDEX I1 ON ACT_BRK (Statement_ID); +CREATE UNIQUE INDEX I1 ON SQ_EEP (Part_ID); +CREATE UNIQUE INDEX I1 ON ACT_BRG (Statement_ID); +CREATE UNIQUE INDEX I1 ON E_GAR (Statement_ID); +CREATE UNIQUE INDEX I1 ON CL_IR (Id); +CREATE UNIQUE INDEX I1 ON CL_IP (Id); +CREATE UNIQUE INDEX I1 ON V_LRL (Value_ID); +CREATE UNIQUE INDEX I1 ON C_EP (Id); +CREATE UNIQUE INDEX I1 ON V_TRV (Value_ID); +CREATE UNIQUE INDEX I1 ON MSG_FA (Arg_ID); +CREATE UNIQUE INDEX I1 ON R_AONE (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON E_GES (Statement_ID); +CREATE UNIQUE INDEX I1 ON I_RCH (Channel_Id); +CREATE UNIQUE INDEX I2 ON I_RCH (Execution_Engine_ID, Satisfaction_Id, other_Execution_Engine_ID); +CREATE UNIQUE INDEX I1 ON A_INI (Id); +CREATE UNIQUE INDEX I1 ON I_VSF (ValueInStackFrame_ID); +CREATE UNIQUE INDEX I1 ON SQ_AP (Part_ID); +CREATE UNIQUE INDEX I1 ON V_IRF (Value_ID); +CREATE UNIQUE INDEX I1 ON S_ENUM (Enum_ID); +CREATE UNIQUE INDEX I1 ON RV_VIS (ContainedRuntimeValue_ID, RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON I_LIP (Rel_ID, Participation_ID); +CREATE UNIQUE INDEX I1 ON SQ_AV (Av_ID); +CREATE UNIQUE INDEX I1 ON O_IOBJ (IObj_ID); +CREATE UNIQUE INDEX I1 ON SQ_COP (Part_ID); +CREATE UNIQUE INDEX I1 ON SM_CH (SM_ID, SMevt_ID, SMstt_ID); +CREATE UNIQUE INDEX I1 ON ACT_IF (Statement_ID); +CREATE UNIQUE INDEX I1 ON I_STF (Stack_Frame_ID); +CREATE UNIQUE INDEX I1 ON S_SDT (DT_ID); +CREATE UNIQUE INDEX I1 ON EP_PKG (Package_ID); +CREATE UNIQUE INDEX I1 ON R_SUBSUP (Rel_ID); +CREATE UNIQUE INDEX I1 ON ACT_SMT (Statement_ID); +CREATE UNIQUE INDEX I2 ON ACT_SMT (Statement_ID, Block_ID); +CREATE UNIQUE INDEX I1 ON G_EIS (Element_ID, Sys_ID); +CREATE UNIQUE INDEX I1 ON S_SYNC (Sync_ID); +CREATE UNIQUE INDEX I1 ON I_DIV (DIV_ID); +CREATE UNIQUE INDEX I1 ON L_LSR (Local_ID); +CREATE UNIQUE INDEX I1 ON MSG_OA (Arg_ID); +CREATE UNIQUE INDEX I1 ON ACT_BRB (Action_ID); +CREATE UNIQUE INDEX I1 ON SM_ASM (SM_ID); +CREATE UNIQUE INDEX I1 ON SM_PEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON SQ_LS (Part_ID); +CREATE UNIQUE INDEX I1 ON SQ_IA (Ia_ID); +CREATE UNIQUE INDEX I1 ON SM_ISM (SM_ID); +CREATE UNIQUE INDEX I1 ON V_LBO (Value_ID); +CREATE UNIQUE INDEX I1 ON E_GSME (Statement_ID); +CREATE UNIQUE INDEX I1 ON PA_DIC (Component_Id, Delegation_Id); +CREATE UNIQUE INDEX I1 ON BP_OAL (Breakpoint_ID); +CREATE UNIQUE INDEX I1 ON SQ_PP (Part_ID); +CREATE UNIQUE INDEX I1 ON A_GA (Id); +CREATE UNIQUE INDEX I1 ON R_RGO (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON UC_E (Assoc_ID); +CREATE UNIQUE INDEX I1 ON UC_G (Assoc_ID); +CREATE UNIQUE INDEX I1 ON R_AOTH (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON RV_SCV (RuntimeValue_ID); +CREATE UNIQUE INDEX I1 ON R_RTO (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I2 ON R_RTO (OIR_ID, Rel_ID, Oid_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON E_GPR (Statement_ID); +CREATE UNIQUE INDEX I1 ON SM_EIGN (SM_ID, SMevt_ID, SMstt_ID); +CREATE UNIQUE INDEX I1 ON MSG_EA (Arg_ID); +CREATE UNIQUE INDEX I1 ON SM_LEVT (SM_ID, SMevt_ID); +CREATE UNIQUE INDEX I1 ON UC_I (Assoc_ID); +CREATE UNIQUE INDEX I1 ON S_EE (EE_ID); +CREATE UNIQUE INDEX I1 ON V_EPR (SM_ID, SMedi_ID, Value_ID, PP_Id); +CREATE UNIQUE INDEX I1 ON O_TFR (Tfr_ID); +CREATE UNIQUE INDEX I1 ON SQ_FAV (Av_ID); +CREATE UNIQUE INDEX I1 ON CL_POR (Id); +CREATE UNIQUE INDEX I1 ON I_AVL (Attr_ID, Inst_ID); +CREATE UNIQUE INDEX I1 ON O_TPARM (TParm_ID); +CREATE UNIQUE INDEX I1 ON ACT_IOP (Statement_ID); +CREATE UNIQUE INDEX I1 ON I_STACK (Stack_ID); +CREATE UNIQUE INDEX I1 ON CA_EESMC (CPath_ID); +CREATE UNIQUE INDEX I1 ON ACT_RU (Statement_ID); +CREATE UNIQUE INDEX I1 ON COMM_LNK (Link_ID); +CREATE UNIQUE INDEX I1 ON I_CIN (Container_ID); +CREATE UNIQUE INDEX I1 ON R_OIR (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_E (Statement_ID); +CREATE UNIQUE INDEX I1 ON C_RID (Reference_Id, Delegation_Id); +CREATE UNIQUE INDEX I1 ON ACT_BLK (Block_ID); +CREATE UNIQUE INDEX I1 ON R_COTH (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON S_UDT (DT_ID); +CREATE UNIQUE INDEX I1 ON BP_ST (Breakpoint_ID); +CREATE UNIQUE INDEX I1 ON PE_PE (Element_ID); +CREATE UNIQUE INDEX I1 ON V_INS (Var_ID); +CREATE UNIQUE INDEX I1 ON CL_IIR (Id); +CREATE UNIQUE INDEX I1 ON ACT_CTL (Statement_ID); +CREATE UNIQUE INDEX I1 ON A_OBJ (Id); +CREATE UNIQUE INDEX I1 ON ACT_UNR (Statement_ID); +CREATE UNIQUE INDEX I1 ON L_LCL (Local_ID); +CREATE UNIQUE INDEX I1 ON C_PO (Id); +CREATE UNIQUE INDEX I1 ON R_COMP (Rel_ID); +CREATE UNIQUE INDEX I1 ON MSG_BA (Arg_ID); +CREATE UNIQUE INDEX I1 ON ACT_CNV (Statement_ID); +CREATE UNIQUE INDEX I1 ON C_C (Id); +CREATE UNIQUE INDEX I1 ON CA_SMEEE (EEevt_ID, CPath_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON V_MSV (Value_ID); +CREATE UNIQUE INDEX I1 ON SQ_P (Part_ID); +CREATE UNIQUE INDEX I1 ON C_I (Id); +CREATE UNIQUE INDEX I1 ON SM_SUPDT (SM_ID, SMspd_ID); +CREATE UNIQUE INDEX I1 ON L_LCR (Local_ID); +CREATE UNIQUE INDEX I1 ON R_SIMP (Rel_ID); +CREATE UNIQUE INDEX I1 ON C_PP (PP_Id); +CREATE UNIQUE INDEX I1 ON SQ_IAV (Av_ID); +CREATE UNIQUE INDEX I1 ON C_P (Provision_Id); +CREATE UNIQUE INDEX I1 ON C_R (Requirement_Id); +CREATE UNIQUE INDEX I1 ON R_SUPER (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON V_ALV (Value_ID); +CREATE UNIQUE INDEX I1 ON O_REF (ROIR_ID, RObj_ID, ROid_ID, Obj_ID, RAttr_ID, OIR_ID, Rel_ID); +CREATE UNIQUE INDEX I2 ON O_REF (ARef_ID); +CREATE UNIQUE INDEX I1 ON I_SQE (Self_Queue_Entry_ID); +CREATE UNIQUE INDEX I2 ON I_SQE (Event_ID, Execution_Engine_ID); +CREATE UNIQUE INDEX I1 ON V_VAL (Value_ID); +CREATE UNIQUE INDEX I1 ON UC_UCA (Assoc_ID); +CREATE UNIQUE INDEX I1 ON CA_SMEED (APath_ID, EEdi_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON R_PART (OIR_ID, Rel_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON SM_STATE (SM_ID, SMstt_ID); +CREATE UNIQUE INDEX I2 ON SM_STATE (SMstt_ID, SM_ID); +CREATE UNIQUE INDEX I1 ON MSG_EPA (Arg_ID); +CREATE UNIQUE INDEX I1 ON S_EEM (EEmod_ID, EE_ID); +CREATE UNIQUE INDEX I1 ON V_BIN (Value_ID); +CREATE UNIQUE INDEX I1 ON S_MBR (Parent_DT_DT_ID, Member_ID); +CREATE UNIQUE INDEX I1 ON A_AP (Id); +CREATE UNIQUE INDEX I1 ON CA_SMOAA (APath_ID, Attr_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON ACT_PSB (Action_ID); +CREATE UNIQUE INDEX I1 ON V_LST (Value_ID); +CREATE UNIQUE INDEX I1 ON CA_SMOA (APath_ID); +CREATE UNIQUE INDEX I2 ON CA_SMOA (APath_ID, Obj_ID); +CREATE UNIQUE INDEX I1 ON C_SF (Id); +CREATE UNIQUE INDEX I2 ON C_SF (Provision_Id, Requirement_Id); +CREATE UNIQUE INDEX I1 ON E_ESS (Statement_ID); +CREATE UNIQUE INDEX I1 ON R_REL (Rel_ID); +CREATE UNIQUE INDEX I1 ON CA_EESME (SMevt_ID, CPath_ID); +CREATE UNIQUE INDEX I1 ON SQ_CP (Part_ID); +CREATE UNIQUE INDEX I1 ON S_SYS (Sys_ID); +CREATE UNIQUE INDEX I1 ON V_TVL (Value_ID); +CREATE UNIQUE INDEX I1 ON ACT_SR (Statement_ID); +CREATE UNIQUE INDEX I1 ON ACT_ROB (Action_ID); +CREATE UNIQUE INDEX I1 ON A_AF (Id); +CREATE UNIQUE INDEX I1 ON A_AE (Id); +''' + + +globals = ''' +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000000", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 'void', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000000", + 0); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000001", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000001", + "00000000-0000-0000-0000-000000000000", + 'boolean', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000001", + 1); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000002", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000002", + "00000000-0000-0000-0000-000000000000", + 'integer', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000002", + 2); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000003", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000003", + "00000000-0000-0000-0000-000000000000", + 'real', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000003", + 3); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000004", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000004", + "00000000-0000-0000-0000-000000000000", + 'string', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000004", + 4); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000005", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000005", + "00000000-0000-0000-0000-000000000000", + 'unique_id', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000005", + 5); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000006", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000006", + "00000000-0000-0000-0000-000000000000", + 'state', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000006", + 6); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000007", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000007", + "00000000-0000-0000-0000-000000000000", + 'same_as', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000007", + 7); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000008", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000008", + "00000000-0000-0000-0000-000000000000", + 'inst_ref', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000008", + 8); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000009", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000009", + "00000000-0000-0000-0000-000000000000", + 'inst_ref_set', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-000000000009", + 9); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-00000000000a", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-00000000000a", + "00000000-0000-0000-0000-000000000000", + 'inst', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-00000000000a", + 10); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-00000000000b", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-00000000000b", + "00000000-0000-0000-0000-000000000000", + 'inst', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-00000000000b", + 11); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-00000000000c", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-00000000000c", + "00000000-0000-0000-0000-000000000000", + 'inst_ref', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-00000000000c", + 12); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-00000000000d", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-00000000000d", + "00000000-0000-0000-0000-000000000000", + 'component_ref', + '', + ''); +INSERT INTO S_CDT + VALUES ("ba5eda7a-def5-0000-0000-00000000000d", + 13); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-00000000000e", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-00000000000e", + "00000000-0000-0000-0000-000000000000", + 'date', + '', + ''); +INSERT INTO S_UDT + VALUES ("ba5eda7a-def5-0000-0000-00000000000e", + "ba5eda7a-def5-0000-0000-00000000000b", + 1); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-00000000000f", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-00000000000f", + "00000000-0000-0000-0000-000000000000", + 'inst_ref', + '', + ''); +INSERT INTO S_UDT + VALUES ("ba5eda7a-def5-0000-0000-00000000000f", + "ba5eda7a-def5-0000-0000-00000000000c", + 3); +INSERT INTO PE_PE + VALUES ("ba5eda7a-def5-0000-0000-000000000010", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("ba5eda7a-def5-0000-0000-000000000010", + "00000000-0000-0000-0000-000000000000", + 'timestamp', + '', + ''); +INSERT INTO S_UDT + VALUES ("ba5eda7a-def5-0000-0000-000000000010", + "ba5eda7a-def5-0000-0000-00000000000b", + 2); +''' From 7dfb598697289611d5af46e36b420a26d1d2765e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 21 May 2017 19:41:43 +0200 Subject: [PATCH 175/216] ee: add copyright license --- bridgepoint/external_entities.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/bridgepoint/external_entities.py b/bridgepoint/external_entities.py index 793cf2a..30e696c 100644 --- a/bridgepoint/external_entities.py +++ b/bridgepoint/external_entities.py @@ -1,3 +1,21 @@ +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + import datetime import sys import time From 49e28c63238fb757171f025779dad43da4e96db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 21 May 2017 19:41:51 +0200 Subject: [PATCH 176/216] cosmetics --- bridgepoint/ooaofooa.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 051ae29..64ef101 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -31,6 +31,7 @@ from bridgepoint import external_entities as builtin_ee from bridgepoint import schema + logger = logging.getLogger(__name__) From 32e30afdd133a8de75e79aab011ddaa681ec28a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 08:38:37 +0200 Subject: [PATCH 177/216] meta: swap order of phrases in navigations --- bridgepoint/gen_xsd_schema.py | 8 +++---- bridgepoint/ooaofooa.py | 4 ++-- bridgepoint/prebuild.py | 2 +- bridgepoint/sourcegen.py | 30 ++++++++++++------------ examples/list_bp_enums.py | 4 ++-- tests/test_bridgepoint/test_interpret.py | 4 ++-- tests/test_bridgepoint/test_select.py | 4 ++-- tests/test_xtuml/test_metamodel.py | 10 ++++---- tests/test_xtuml/test_persist.py | 2 +- tests/test_xtuml/test_phrase.py | 8 +++---- tests/test_xtuml/test_relate.py | 8 +++---- tests/test_xtuml/test_sort.py | 6 ++--- xtuml/meta.py | 8 +++---- xtuml/persist.py | 8 +++---- 14 files changed, 53 insertions(+), 53 deletions(-) diff --git a/bridgepoint/gen_xsd_schema.py b/bridgepoint/gen_xsd_schema.py index c87eb09..4a6bb0b 100644 --- a/bridgepoint/gen_xsd_schema.py +++ b/bridgepoint/gen_xsd_schema.py @@ -113,12 +113,12 @@ def build_enum_type(s_edt): enum = ET.Element('xs:simpleType', name=s_dt.name) enum_list = ET.SubElement(enum, 'xs:restriction', base='xs:string') - first_filter = lambda selected: not nav_one(selected).S_ENUM[56, 'precedes']() + first_filter = lambda selected: not nav_one(selected).S_ENUM[56, 'succeeds']() s_enum = nav_any(s_edt).S_ENUM[27](first_filter) while s_enum: ET.SubElement(enum_list, 'xs:enumeration', value=s_enum.name) - s_enum = nav_one(s_enum).S_ENUM[56, 'succeeds']() + s_enum = nav_one(s_enum).S_ENUM[56, 'precedes']() return enum @@ -130,14 +130,14 @@ def build_struct_type(s_sdt): s_dt = nav_one(s_sdt).S_DT[17]() struct = ET.Element('xs:complexType', name=s_dt.name) - first_filter = lambda selected: not nav_one(selected).S_MBR[46, 'precedes']() + first_filter = lambda selected: not nav_one(selected).S_MBR[46, 'succeeds']() s_mbr = nav_any(s_sdt).S_MBR[44](first_filter) while s_mbr: s_dt = nav_one(s_mbr).S_DT[45]() type_name = get_type_name(s_dt) ET.SubElement(struct, 'xs:attribute', name=s_mbr.name, type=type_name) - s_mbr = nav_one(s_mbr).S_MBR[46, 'succeeds']() + s_mbr = nav_one(s_mbr).S_MBR[46, 'precedes']() return struct diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 64ef101..3cc2377 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -248,7 +248,7 @@ def mk_class(m, o_obj, derived_attributes=False): ''' Create a pyxtuml class from a BridgePoint class. ''' - first_filter = lambda selected: not one(selected).O_ATTR[103, 'precedes']() + first_filter = lambda selected: not one(selected).O_ATTR[103, 'succeeds']() o_attr = one(o_obj).O_ATTR[102](first_filter) attributes = list() @@ -264,7 +264,7 @@ def mk_class(m, o_obj, derived_attributes=False): else: attributes.append((o_attr.Name, ty)) - o_attr = one(o_attr).O_ATTR[103, 'succeeds']() + o_attr = one(o_attr).O_ATTR[103, 'precedes']() metaclass = m.define_class(o_obj.Key_Lett, list(attributes), o_obj.Descrip) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index 6dca8c9..f7855b9 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -383,7 +383,7 @@ def act_sel(self, node): while act_lnk: act_lnk_end = act_lnk - act_lnk = one(act_lnk).ACT_LNK[604, 'succeeds']() + act_lnk = one(act_lnk).ACT_LNK[604, 'precedes']() v_val = self.accept(node.handle) diff --git a/bridgepoint/sourcegen.py b/bridgepoint/sourcegen.py index 58260af..e9239de 100644 --- a/bridgepoint/sourcegen.py +++ b/bridgepoint/sourcegen.py @@ -93,14 +93,14 @@ def accept_ACT_BLK(self, inst): if self._lvl: self.buf_linebreak() - first_filter = lambda sel: (not one(sel).ACT_SMT[661, 'succeeds']() and + first_filter = lambda sel: (not one(sel).ACT_SMT[661, 'precedes']() and not one(sel).ACT_EL[603]() and not one(sel).ACT_E[603]()) act_smt = one(inst).ACT_SMT[602](first_filter) while act_smt: self.accept(act_smt) - act_smt = one(act_smt).ACT_SMT[661, 'precedes']() + act_smt = one(act_smt).ACT_SMT[661, 'succeeds']() self._lvl -= 1 self.buf_linebreak() @@ -224,7 +224,7 @@ def accept_ACT_LNK(self, inst): if inst.Rel_Phrase: self.buf('.', inst.Rel_Phrase) self.buf(']') - self.accept(one(inst).ACT_LNK[604, 'succeeds']()) + self.accept(one(inst).ACT_LNK[604, 'precedes']()) def accept_ACT_AI(self, inst): if one(inst).V_VAL[609].V_MSV[801](): @@ -278,7 +278,7 @@ def accept_ACT_FNC(self, inst): s_sync = one(inst).S_SYNC[675]() self.buf('::', s_sync.Name) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[669](first_filter)) self.buf(')') @@ -287,7 +287,7 @@ def accept_ACT_BRG(self, inst): s_ee = one(s_brg).S_EE[19]() self.buf('bridge ', s_ee.Key_Lett, '::', s_brg.Name) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[628](first_filter)) self.buf(')') @@ -295,7 +295,7 @@ def accept_ACT_IOP(self, inst): self.accept(one(inst).SPR_PO[680].SPR_PEP[4503]()) self.accept(one(inst).SPR_RO[657].SPR_REP[4502]()) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[679](first_filter)) self.buf(')') @@ -303,7 +303,7 @@ def accept_ACT_SGN(self, inst): self.accept(one(inst).SPR_PS[663].SPR_PEP[4503]()) self.accept(one(inst).SPR_RS[660].SPR_REP[4502]()) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[662](first_filter)) self.buf(')') @@ -320,7 +320,7 @@ def accept_ACT_TFM(self, inst): self.buf('.', o_tfr.Name) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[627](first_filter)) self.buf(')') @@ -396,12 +396,12 @@ def accept_V_UNY(self, inst): self.buf(')') def accept_V_PAR(self, inst): - if one(inst).V_PAR[816, 'precedes']() is not None: + if one(inst).V_PAR[816, 'succeeds']() is not None: self.buf(', ') self.buf(inst.Name, ': ') self.accept(one(inst).V_VAL[800]()) - self.accept(one(inst).V_PAR[816, 'succeeds']()) + self.accept(one(inst).V_PAR[816, 'precedes']()) def accept_V_EDV(self, inst): self.buf('rcvd_evt.') @@ -418,7 +418,7 @@ def accept_V_FNV(self, inst): s_sync = one(inst).S_SYNC[827]() self.buf('::', s_sync.Name) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[817](first_filter)) self.buf(')') @@ -427,7 +427,7 @@ def accept_V_BRV(self, inst): s_ee = one(s_brg).S_EE[19]() self.buf('bridge ', s_ee.Key_Lett, '::', s_brg.Name) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[810](first_filter)) self.buf(')') @@ -444,7 +444,7 @@ def accept_V_TRV(self, inst): self.buf('.', o_tfr.Name) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[811](first_filter)) self.buf(')') @@ -452,7 +452,7 @@ def accept_V_MSV(self, inst): self.accept(one(inst).SPR_PEP[841]()) self.accept(one(inst).SPR_REP[845]()) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[842](first_filter)) self.buf(')') @@ -475,7 +475,7 @@ def accept_E_ESS(self, inst): self.accept(one(inst).E_GES[701]()) self.buf('(') - first_filter = lambda sel: one(sel).V_PAR[816, 'precedes']() is None + first_filter = lambda sel: one(sel).V_PAR[816, 'succeeds']() is None self.accept(any(inst).V_PAR[700](first_filter)) self.buf(')') diff --git a/examples/list_bp_enums.py b/examples/list_bp_enums.py index e776c7d..4f55979 100644 --- a/examples/list_bp_enums.py +++ b/examples/list_bp_enums.py @@ -37,9 +37,9 @@ for s_edt in sorted(m.select_many('S_EDT'), key=get_name): print(get_name(s_edt)) - is_first = lambda inst: not one(inst).S_ENUM[56, 'precedes']() + is_first = lambda inst: not one(inst).S_ENUM[56, 'succeeds']() s_enum = one(s_edt).S_ENUM[27](is_first) while s_enum: print(' %s' % s_enum.Name) - s_enum = one(s_enum).S_ENUM[56, 'succeeds']() + s_enum = one(s_enum).S_ENUM[56, 'precedes']() diff --git a/tests/test_bridgepoint/test_interpret.py b/tests/test_bridgepoint/test_interpret.py index c57f341..96b0c41 100644 --- a/tests/test_bridgepoint/test_interpret.py +++ b/tests/test_bridgepoint/test_interpret.py @@ -2393,14 +2393,14 @@ relate inst1 to inst2 across R1.''one'' using assoc; -select one inst related by inst1->Assoc[R1.''other'']; +select one inst related by inst1->Assoc[R1.''one'']; if empty inst return False; end if; unrelate inst1 from inst2 across R1.''one'' using assoc; -select one inst related by inst1->Assoc[R1.''other'']; +select one inst related by inst1->Assoc[R1.''one'']; return empty inst; diff --git a/tests/test_bridgepoint/test_select.py b/tests/test_bridgepoint/test_select.py index a121fca..9c3ef21 100644 --- a/tests/test_bridgepoint/test_select.py +++ b/tests/test_bridgepoint/test_select.py @@ -148,7 +148,7 @@ def test_select_related_by(self): r_rel = one(act_lnk).R_REL[681]() self.assertEqual(r_rel.Numb, 1) - act_lnk = one(act_lnk).ACT_LNK[604, 'succeeds']() + act_lnk = one(act_lnk).ACT_LNK[604, 'precedes']() self.assertIsNotNone(act_lnk) self.assertFalse(act_lnk.Rel_Phrase) @@ -199,7 +199,7 @@ def test_select_related_by_where(self): r_rel = one(act_lnk).R_REL[681]() self.assertEqual(r_rel.Numb, 1) - act_lnk = one(act_lnk).ACT_LNK[604, 'succeeds']() + act_lnk = one(act_lnk).ACT_LNK[604, 'precedes']() self.assertIsNotNone(act_lnk) self.assertFalse(act_lnk.Rel_Phrase) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 4d62de3..1126fb4 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -148,7 +148,7 @@ def test_case_sensitivity(self): ass.batch_relate() ass.formalize() - self.assertTrue(xtuml.navigate_one(inst).aa[1, 'prev'].AA[1, 'prev']()) + self.assertTrue(xtuml.navigate_one(inst).aa[1, 'next'].AA[1, 'next']()) def test_unknown_type(self): self.metamodel.define_class('A', [('Id', '')]) @@ -246,16 +246,16 @@ def test_reflexive(self): self.assertTrue(xtuml.relate(first, second, 1, 'prev')) - inst = xtuml.navigate_one(first).A[1, 'next']() + inst = xtuml.navigate_one(first).A[1, 'prev']() self.assertEqual(inst.Name, second.Name) - inst = xtuml.navigate_one(first).A[1, 'prev']() + inst = xtuml.navigate_one(first).A[1, 'next']() self.assertIsNone(inst) - inst = xtuml.navigate_one(second).A[1, 'prev']() + inst = xtuml.navigate_one(second).A[1, 'next']() self.assertEqual(inst.Name, first.Name) - inst = xtuml.navigate_one(second).A[1, 'next']() + inst = xtuml.navigate_one(second).A[1, 'prev']() self.assertIsNone(inst) def test_one_to_many(self): diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index db355b1..d24acc4 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -220,7 +220,7 @@ def test_serialize_schema(self): x2 = m.new('X', Boolean=True, Integer=4, String='str') xtuml.relate(x1, x2, 1, 'succeeds') - self.assertTrue(xtuml.navigate_one(x1).X[1, 'precedes']()) + self.assertTrue(xtuml.navigate_one(x1).X[1, 'succeeds']()) def test_serialize_unique_identifiers(self): schema = ''' diff --git a/tests/test_xtuml/test_phrase.py b/tests/test_xtuml/test_phrase.py index 444fb68..1483852 100644 --- a/tests/test_xtuml/test_phrase.py +++ b/tests/test_xtuml/test_phrase.py @@ -122,11 +122,11 @@ def test_relate_assoc_to_two_classes(self): self.assertTrue(relate(assoc, cls1, 1, 'one')) self.assertTrue(relate(assoc, cls2, 1, 'other')) - self.assertTrue(one(cls1).Class[1, 'one']()) - self.assertFalse(one(cls2).Class[1, 'one']()) + self.assertTrue(one(cls1).Class[1, 'other']()) + self.assertFalse(one(cls2).Class[1, 'other']()) - self.assertFalse(one(cls1).Class[1, 'other']()) - self.assertTrue(one(cls2).Class[1, 'other']()) + self.assertFalse(one(cls1).Class[1, 'one']()) + self.assertTrue(one(cls2).Class[1, 'one']()) def test_relate_assoc_to_two_classes_incorrectly(self): cls1 = self.m.new('Class') diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py index ff7d24e..e7a9d14 100644 --- a/tests/test_xtuml/test_relate.py +++ b/tests/test_xtuml/test_relate.py @@ -71,7 +71,7 @@ def test_relate_reflexive_one_to_other(self): self.assertTrue(xtuml.relate(inst1, act_blk, 602)) self.assertTrue(xtuml.relate(inst2, act_blk, 602)) - self.assertTrue(xtuml.relate(inst1, inst2, 661, 'precedes')) + self.assertTrue(xtuml.relate(inst1, inst2, 661, 'succeeds')) self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) @@ -82,7 +82,7 @@ def test_relate_reflexive_other_to_one(self): self.assertTrue(xtuml.relate(inst1, act_blk, 602)) self.assertTrue(xtuml.relate(inst2, act_blk, 602)) - self.assertTrue(xtuml.relate(inst2, inst1, 661, 'succeeds')) + self.assertTrue(xtuml.relate(inst2, inst1, 661, 'precedes')) self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) @@ -114,11 +114,11 @@ def test_unrelate(self): self.assertTrue(xtuml.relate(inst1, act_blk, 602)) self.assertTrue(xtuml.relate(inst2, act_blk, 602)) - self.assertTrue(xtuml.relate(inst1, inst2, 661, 'precedes')) + self.assertTrue(xtuml.relate(inst1, inst2, 661, 'succeeds')) self.assertEqual(inst2, xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) self.assertEqual(inst1, xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) - self.assertTrue(xtuml.unrelate(inst1, inst2, 661, 'precedes')) + self.assertTrue(xtuml.unrelate(inst1, inst2, 661, 'succeeds')) self.assertIsNone(xtuml.navigate_one(inst2).ACT_SMT[661, 'precedes']()) self.assertIsNone(xtuml.navigate_one(inst1).ACT_SMT[661, 'succeeds']()) diff --git a/tests/test_xtuml/test_sort.py b/tests/test_xtuml/test_sort.py index 75b523d..1fdac7b 100644 --- a/tests/test_xtuml/test_sort.py +++ b/tests/test_xtuml/test_sort.py @@ -41,13 +41,13 @@ def test_sort(self): prev = inst inst_set = xtuml.navigate_many(act_blk).ACT_SMT[602]() - inst_set = xtuml.sort_reflexive(inst_set, 661, 'precedes') + inst_set = xtuml.sort_reflexive(inst_set, 661, 'succeeds') self.assertEqual(len(inst_set), 10) for idx, inst in enumerate(inst_set): self.assertEqual(inst.LineNumber, idx) inst_set = xtuml.navigate_many(act_blk).ACT_SMT[602]() - inst_set = xtuml.sort_reflexive(inst_set, 661, 'succeeds') + inst_set = xtuml.sort_reflexive(inst_set, 661, 'precedes') self.assertEqual(len(inst_set), 10) for idx, inst in enumerate(inst_set): self.assertEqual(inst.LineNumber, 9 - idx) @@ -81,7 +81,7 @@ def test_recursion(self): self.assertTrue(xtuml.relate(p4, p1, 55, 'precedes')) inst_set = self.m.select_many('S_BPARM') - inst_set = xtuml.sort_reflexive(inst_set, 55, 'precedes') + inst_set = xtuml.sort_reflexive(inst_set, 55, 'succeeds') self.assertEqual(len(inst_set), 4) for inst1, inst2 in zip(inst_set, [p1, p2, p3, p4]): diff --git a/xtuml/meta.py b/xtuml/meta.py index abbcfd2..d597ea9 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -945,12 +945,12 @@ def _find_link(inst1, inst2, rel_id, phrase): if (ass.source_link.from_metaclass == metaclass1 and ass.source_link.to_metaclass == metaclass2 and - ass.target_link.phrase == phrase): + ass.source_link.phrase == phrase): return inst1, inst2, ass if (ass.target_link.from_metaclass == metaclass1 and ass.target_link.to_metaclass == metaclass2 and - ass.source_link.phrase == phrase): + ass.target_link.phrase == phrase): return inst2, inst1, ass raise UnknownLinkException(metaclass1.kind, metaclass2.kind, rel_id, phrase) @@ -1126,12 +1126,12 @@ def define_association(self, rel_id, source_kind, source_keys, source_many, source_link = target_metaclass.add_link(source_metaclass, rel_id, many=source_many, - phrase=source_phrase, + phrase=target_phrase, conditional=source_conditional) target_link = source_metaclass.add_link(target_metaclass, rel_id, many=target_many, - phrase=target_phrase, + phrase=source_phrase, conditional=target_conditional) ass = Association(rel_id, diff --git a/xtuml/persist.py b/xtuml/persist.py index f8b301d..e94c10f 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -100,15 +100,15 @@ def serialize_association(ass): ass.source_link.to_metaclass.kind, ', '.join(ass.source_keys)) - if ass.source_link.phrase: - s1 += " PHRASE '%s'" % ass.source_link.phrase + if ass.target_link.phrase: + s1 += " PHRASE '%s'" % ass.target_link.phrase s2 = '%s %s (%s)' % (ass.target_link.cardinality, ass.target_link.to_metaclass.kind, ', '.join(ass.target_keys)) - if ass.target_link.phrase: - s2 += " PHRASE '%s'" % ass.target_link.phrase + if ass.source_link.phrase: + s2 += " PHRASE '%s'" % ass.source_link.phrase return 'CREATE ROP REF_ID %s FROM %s TO %s;\n' % (ass.rel_id, s1, From 69429f10f45404f8a8a06172ee1896c197f8b615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 08:41:35 +0200 Subject: [PATCH 178/216] builtin EEs: add python implementation of LOG::LogReal --- bridgepoint/external_entities.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bridgepoint/external_entities.py b/bridgepoint/external_entities.py index 30e696c..5541309 100644 --- a/bridgepoint/external_entities.py +++ b/bridgepoint/external_entities.py @@ -26,6 +26,10 @@ class LOG(object): @staticmethod def LogInteger(message): print('LogInteger: %d' % message) + + @staticmethod + def LogReal(message, r): + print('LogReal: %f %s' % (r, message)) @staticmethod def LogInfo(message): From 2a4fc1328f30d86a5ee0bdc4021270129d0dd3b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 08:52:46 +0200 Subject: [PATCH 179/216] api: add the convenient functions get_metaclass() and get_metamodel() --- xtuml/__init__.py | 2 ++ xtuml/meta.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 5e114ac..676ad38 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -76,6 +76,8 @@ from xtuml.meta import cardinality from xtuml.meta import where_eq from xtuml.meta import sort_reflexive +from xtuml.meta import get_metaclass +from xtuml.meta import get_metamodel from .consistency_check import check_association_integrity from .consistency_check import check_uniqueness_constraint diff --git a/xtuml/meta.py b/xtuml/meta.py index d597ea9..905c23a 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -1002,6 +1002,26 @@ def unrelate(from_instance, to_instance, rel_id, phrase=''): return True +def get_metaclass(class_or_instance): + ''' + Get the metaclass for a *class_or_instance*. + ''' + if isinstance(class_or_instance, Class): + return class_or_instance.__metaclass__ + + elif issubclass(class_or_instance, Class): + return class_or_instance.__metaclass__ + + raise DeleteException("the provided argument is not an xtuml class or instance") + + +def get_metamodel(class_or_instance): + ''' + Get the metamodel in which a *class_or_instance* was created. + ''' + return get_metaclass(class_or_instance).metamodel + + def delete(instance): ''' Delete an *instance* from its metaclass instance pool. From b044e909d4bff35b6105f129b3257b35bf5c2ace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 08:53:27 +0200 Subject: [PATCH 180/216] cosmetics --- bridgepoint/prebuild.py | 2 +- xtuml/consistency_check.py | 6 +++--- xtuml/load.py | 3 ++- xtuml/persist.py | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index f7855b9..c7fc8cf 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1815,7 +1815,7 @@ def prebuild_action(instance): 'SPR_PO': ProvidedOperationPrebuilder, 'SPR_PS': ProvidedSignalPrebuilder } - metaclass = instance.__metaclass__ + metaclass = xtuml.get_metaclass(instance) walker = walker_map[metaclass.kind](metaclass.metamodel, instance) logger.info('processing action %s' % walker.label) # walker.visitors.append(xtuml.tools.NodePrintVisitor()) diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 1166533..9b09c87 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -34,7 +34,7 @@ def pretty_to_link(inst, link): ''' values = '' prefix = '' - metaclass = inst.__metaclass__ + metaclass = xtuml.get_metaclass(inst) for name, ty in metaclass.attributes: if name in link.key_map: @@ -53,7 +53,7 @@ def pretty_from_link(inst, link): ''' values = '' prefix = '' - metaclass = inst.__metaclass__ + metaclass = xtuml.get_metaclass(inst) for name, ty in metaclass.attributes: if name in link.key_map: @@ -71,7 +71,7 @@ def pretty_unique_identifier(inst, identifier): ''' values = '' prefix = '' - metaclass = inst.__metaclass__ + metaclass = xtuml.get_metaclass(inst) for name, ty in metaclass.attributes: if name in metaclass.identifying_attributes: diff --git a/xtuml/load.py b/xtuml/load.py index 21b0058..00369c7 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -422,7 +422,8 @@ def populate_connections(self, metamodel): ass.target_link.connect(inst, other_inst, check=False) for inst in metamodel.instances: - for attr in inst.__metaclass__.referential_attributes: + metaclass = xtuml.get_metaclass(inst) + for attr in metaclass.referential_attributes: if attr in inst.__dict__: delattr(inst, attr) diff --git a/xtuml/persist.py b/xtuml/persist.py index e94c10f..69e3123 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -62,7 +62,7 @@ def serialize_instance(instance): Serialize an *instance* from a metamodel. ''' attr_count = 0 - metaclass = instance.__metaclass__ + metaclass = xtuml.get_metaclass(instance) s = 'INSERT INTO %s VALUES (' % metaclass.kind for name, ty in metaclass.attributes: value = getattr(instance, name) @@ -119,7 +119,7 @@ def serialize_class(Cls): ''' Serialize an xtUML metamodel class. ''' - metaclass = Cls.__metaclass__ + metaclass = xtuml.get_metaclass(Cls) attributes = ['%s %s' % (name, ty.upper()) for name, ty in metaclass.attributes] s = 'CREATE TABLE %s (\n ' % metaclass.kind From bc0eb6237f89e264cc45b2e3aace394e625e4c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 08:53:47 +0200 Subject: [PATCH 181/216] meta: remove dead code --- xtuml/meta.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 905c23a..1e0dd8e 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -492,18 +492,7 @@ def add_link(self, metaclass, rel_id, phrase, conditional, many): self.links[key] = link return link - - def find_link(self, kind, rel_id, phrase=''): - ''' - Find a link with a given *rel_id* and *phrase* that yield instances of - some *kind*. - ''' - if isinstance(rel_id, int): - rel_id = 'R%d' % rel_id - key = (kind.upper(), rel_id, phrase) - return self.links.get(key, None) - def append_attribute(self, name, type_name): ''' Append an attribute with a given *name* and *type name* at the end of From 5f42c8e5dfd2ebbd3820605d6c34a739dd2c4aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 09:26:18 +0200 Subject: [PATCH 182/216] cosmetics --- xtuml/meta.py | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 1e0dd8e..5f15b34 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -115,7 +115,8 @@ def _is_null(instance, name): return True name = name.upper() - for attr_name, attr_ty in instance.__metaclass__.attributes: + metaclass = get_metaclass(instance) + for attr_name, attr_ty in metaclass.attributes: if attr_name.upper() != name: continue @@ -195,17 +196,16 @@ def fget(inst, ref_name, alt_prop): return getattr(other_inst, ref_name, None) def fset(inst, value, name, ref_name, alt_prop): - kind = inst.__metaclass__.kind + kind = get_metaclass(inst).kind raise MetaException('%s.%s is a referential attribute '\ 'and cannot be assigned directly'% (kind, name)) - other_inst = self.target_link.navigate_one(inst) - if other_inst is None and alt_prop: - return alt_prop.fset(inst, value) - - elif other_inst: - return setattr(other_inst, ref_name, value) - + #other_inst = self.target_link.navigate_one(inst) + #if other_inst is None and alt_prop: + # return alt_prop.fset(inst, value) + # + #elif other_inst: + # return setattr(other_inst, ref_name, value) for ref_key, primary_key in zip(self.source_keys, self.target_keys): prop = getattr(source_class.clazz, ref_key, None) @@ -387,7 +387,7 @@ def __sub__(self, other): def __getattr__(self, name): uname = name.upper() - for attr, _ in self.__metaclass__.attributes: + for attr, _ in get_metaclass(self).attributes: if attr.upper() != uname : continue @@ -400,7 +400,7 @@ def __getattr__(self, name): def __setattr__(self, name, value): uname = name.upper() - for attr, _ in self.__metaclass__.attributes: + for attr, _ in get_metaclass(self).attributes: if attr.upper() != uname : continue @@ -421,7 +421,7 @@ def __delattr__(self, name): def __str__(self): values = list() - for attr, ty in self.__metaclass__.attributes: + for attr, ty in get_metaclass(self).attributes: value = getattr(self, attr) value = xtuml.serialize_value(value, ty) values.append('%s=%s' % (attr, value)) @@ -605,7 +605,7 @@ def clone(self, instance): part of the same metaclass. ''' args = list() - for name, _ in instance.__metaclass__.attributes: + for name, _ in get_metaclass(instance).attributes: value = getattr(instance, name) args.append(value) @@ -723,7 +723,8 @@ def _nav(handle, kind, rel_id, phrase): rel_id = 'R%d' % rel_id for inst in iter(handle): - for result in inst.__metaclass__.navigate(inst, kind, rel_id, phrase): + metaclass = get_metaclass(inst) + for result in metaclass.navigate(inst, kind, rel_id, phrase): yield result def __getattr__(self, kind): @@ -832,7 +833,8 @@ def navigate_subtype(supertype, rel_id): if isinstance(rel_id, int): rel_id = 'R%d' % rel_id - for kind, rel_id_candidate, _ in supertype.__metaclass__.links: + metaclass = get_metaclass(supertype) + for kind, rel_id_candidate, _ in metaclass.links: if rel_id != rel_id_candidate: continue @@ -884,7 +886,7 @@ def sort_reflexive(set_of_instances, rel_id, phrase): rel_id = 'R%d' % rel_id # Figure out the phrase in the other direction - metaclass = set_of_instances.first.__metaclass__ + metaclass = get_metaclass(set_of_instances.first) for link in metaclass.links.values(): if link.to_metaclass != metaclass: continue @@ -922,8 +924,8 @@ def _find_link(inst1, inst2, rel_id, phrase): ''' Find links that correspond to the given arguments. ''' - metaclass1 = inst1.__metaclass__ - metaclass2 = inst2.__metaclass__ + metaclass1 = get_metaclass(inst1) + metaclass2 = get_metaclass(inst2) if isinstance(rel_id, int): rel_id = 'R%d' % rel_id @@ -1001,7 +1003,7 @@ def get_metaclass(class_or_instance): elif issubclass(class_or_instance, Class): return class_or_instance.__metaclass__ - raise DeleteException("the provided argument is not an xtuml class or instance") + raise MetaException("the provided argument is not an xtuml class or instance") def get_metamodel(class_or_instance): @@ -1018,7 +1020,7 @@ def delete(instance): if not isinstance(instance, Class): raise DeleteException("the provided argument is not an xtuml instance") - return instance.__metaclass__.delete(instance) + return get_metaclass(instance).delete(instance) def cardinality(instance_or_set): @@ -1116,7 +1118,8 @@ def clone(self, instance): **Note:** the clone and the original instance **does not** have to be part of the same metaclass. ''' - metaclass = self.find_metaclass(instance.__metaclass__.kind) + metaclass = get_metaclass(instance) + metaclass = self.find_metaclass(metaclass.kind) return metaclass.clone(instance) def define_association(self, rel_id, source_kind, source_keys, source_many, From 1148692c71b81d6946f1ef370b7713a6badb63a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 09:30:39 +0200 Subject: [PATCH 183/216] cosmetics --- xtuml/meta.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 5f15b34..a3c61af 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -181,7 +181,11 @@ def batch_relate(self): self.source_link.connect(inst2, inst1, check=False) self.target_link.connect(inst1, inst2, check=False) - def formalize(self): + def formalize(self): + ''' + Formalize the association and expose referential attributes + on instances. + ''' source_class = self.source_link.to_metaclass target_class = self.target_link.to_metaclass From c0ef0a4da2157f470c7026009578d46e0d384f16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 09:36:52 +0200 Subject: [PATCH 184/216] cosmetics --- xtuml/meta.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/xtuml/meta.py b/xtuml/meta.py index a3c61af..c45d51f 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -326,6 +326,10 @@ def navigate_one(self, instance): return next(iter(self.navigate(instance)), None) def compute_lookup_key(self, from_instance): + ''' + Compute the lookup key for an instance, i.e. a foreign key that + can be used to identify an instance at the end of the link. + ''' kwargs = dict() for attr, other_attr in self.key_map.items(): if _is_null(from_instance, attr): @@ -339,6 +343,10 @@ def compute_lookup_key(self, from_instance): return frozenset(tuple(kwargs.items())) def compute_index_key(self, to_instance): + ''' + Compute the index key that can be used to identify an instance + on the link. + ''' kwargs = dict() for attr in self.key_map.values(): if _is_null(to_instance, attr): From 75d392d1c749344b6554bfab367236db6c616b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 10:11:49 +0200 Subject: [PATCH 185/216] doc: add additional functions and methods to API reference Specifically: - xtuml.get_metamodel - xtuml.get_metaclass - xtuml.MetaClass.attribute_type - xtuml.MetaModel.find_metaclass --- docs/api-reference.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/api-reference.rst b/docs/api-reference.rst index bb51cb6..3678efe 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -16,7 +16,7 @@ Loading Metamodels Metamodel Operations ^^^^^^^^^^^^^^^^^^^^ .. autoclass:: xtuml.MetaModel - :members: clone, new, find_class, select_one, select_many + :members: clone, new, find_class, find_metaclass, select_one, select_many .. autofunction:: xtuml.navigate_one .. autofunction:: xtuml.navigate_any @@ -28,11 +28,13 @@ Metamodel Operations .. autofunction:: xtuml.cardinality .. autofunction:: xtuml.where_eq .. autofunction:: xtuml.sort_reflexive +.. autofunction:: xtuml.get_metamodel +.. autofunction:: xtuml.get_metaclass .. autoclass:: xtuml.MetaClass :members: clone, new, select_one, select_many, query, navigate, delete, attribute_names, append_attribute, insert_attribute, delete_attribute, - referential_attributes, identifying_attributes + referential_attributes, identifying_attributes, attribute_type .. autofunction:: xtuml.check_association_integrity .. autofunction:: xtuml.check_uniqueness_constraint From eb633899ab51517889d5cc4ce1a203dc9a289062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=83=C2=B6rnblom?= Date: Thu, 25 May 2017 10:12:27 +0200 Subject: [PATCH 186/216] doc: add description on the command line interface for the OAL interpreter --- docs/cli.rst | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/cli.rst b/docs/cli.rst index 40aec08..f026729 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -55,6 +55,30 @@ Option Description --verbosity, -v increase debug logging level =============== =================================================== +Model Execution +--------------- +pyxtuml is able to execute BridgePoint functions, derived attributes and class +operations (both class-based and instance-based). There is also support for the +built-in external entities ARCH and LOG. Asynchronous execution is currently +not supported, i.e. events, signals and state machines. + +:: + + $ python -m bridgepoint.interpret [options] [another_model_path...] + + +**Available options** + +========================= ========================================================= +Option Description +========================= ========================================================= +--version show program's version number and exit +--help, -h show this help message and exit +--function=NAME, -d NAME invoke a function named NAME +--component=NAME, -c NAME look for the function to invoke in a component named NAME +--verbosity, -v increase debug logging level +========================= ========================================================= + SQL Schema Generator -------------------- To create an sql schema from a BridgePoint model, the following command may be used: From 116c1121ff5973be98a224adf5596ccc6e511045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 10:17:28 +0200 Subject: [PATCH 187/216] cosmetics --- docs/cli.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/cli.rst b/docs/cli.rst index f026729..ce7cfb4 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -47,8 +47,8 @@ Option Description =============== =================================================== --version show program's version number and exit --help, -h show this help message and exit --r limit consistency check to one or more associations --k limit check for uniqueness constraint violations to +-r NUMBER limit consistency check to one or more associations +-k KEY_LETTER limit check for uniqueness constraint violations to one or more classes --globals, -g add builtin global data types automatically, e.g. boolean, integer and real From 9d5c839f717732de1cf01cbc8fc7539dbc1e254a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 25 May 2017 10:26:32 +0200 Subject: [PATCH 188/216] cosmetics --- docs/cli.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/cli.rst b/docs/cli.rst index ce7cfb4..99c1724 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -23,8 +23,8 @@ Option Description =============== =================================================== --version show program's version number and exit --help, -h show this help message and exit --r limit consistency check to one or more associations --k limit check for uniqueness constraint violations to +-r NUMBER limit consistency check to one or more associations +-k KEY_LETTER limit check for uniqueness constraint violations to one or more classes --verbosity, -v increase debug logging level =============== =================================================== @@ -74,7 +74,7 @@ Option Description ========================= ========================================================= --version show program's version number and exit --help, -h show this help message and exit ---function=NAME, -d NAME invoke a function named NAME +--function=NAME, -f NAME invoke a function named NAME --component=NAME, -c NAME look for the function to invoke in a component named NAME --verbosity, -v increase debug logging level ========================= ========================================================= From e0d53aaa96a140e2f72b5e892a8bf9ac22b7d13c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 29 May 2017 17:59:43 +0200 Subject: [PATCH 189/216] doc: cosmetics --- docs/contributing.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/contributing.rst b/docs/contributing.rst index da6e47c..ee806cc 100644 --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -2,6 +2,6 @@ Contributing ============ If you encounter problems with pyxtuml, please `file a github issue `__. If you plan on sending -pull request which affect more than a few lines of code, please file an issue -before you start to work on you changes. This will allow us to discuss the +a pull request which affect more than a few lines of code, please file an issue +before you start to work on your changes. This will allow us to discuss the solution properly before you commit time and effort. From 2cb25818b3cee7bb2406e076f4f4297ab6bf076a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 30 May 2017 21:49:23 +0200 Subject: [PATCH 190/216] meta: unrelate instances that are deleted --- tests/test_xtuml/test_metamodel.py | 3 +++ xtuml/meta.py | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 1126fb4..38ae822 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -173,7 +173,10 @@ def test_select_many_undefined(self): def test_delete(self): inst = self.metamodel.select_any('S_DT', where(Name='void')) + self.assertTrue(xtuml.navigate_one(inst).PE_PE[8001]()) + xtuml.delete(inst) + self.assertFalse(xtuml.navigate_one(inst).PE_PE[8001]()) inst = self.metamodel.select_any('S_DT', where(Name='void')) self.assertFalse(inst) diff --git a/xtuml/meta.py b/xtuml/meta.py index c45d51f..742b5c1 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -625,14 +625,22 @@ def clone(self, instance): def delete(self, instance): ''' - Delete an *instance* from the instance pool. If the *instance* is not - part of the metaclass, a *MetaException* is thrown. + Delete an *instance* from the instance pool and disconnect it from any + links it might be connected to. If the *instance* is not part of the + metaclass, a *MetaException* is thrown. ''' if instance in self.storage: self.storage.remove(instance) else: raise DeleteException("Instance not found in the instance pool") + for link in self.links.values(): + if instance not in link: + continue + + for other in link[instance]: + unrelate(instance, other, link.rel_id, link.phrase) + def select_one(self, where_clause=None): ''' Select a single instance from the instance pool. Optionally, a @@ -1027,7 +1035,8 @@ def get_metamodel(class_or_instance): def delete(instance): ''' - Delete an *instance* from its metaclass instance pool. + Delete an *instance* from its metaclass instance pool and disconnect it from + any links it might be connected to. ''' if not isinstance(instance, Class): raise DeleteException("the provided argument is not an xtuml instance") From dc4becf5d10b9670cf1a81f36e614bcbdbf1926b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 31 May 2017 20:01:40 +0200 Subject: [PATCH 191/216] examples: fix minor typo in help description of integrity check generator --- examples/gen_rt_integrity_check.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gen_rt_integrity_check.py b/examples/gen_rt_integrity_check.py index e26d36a..2ac6764 100755 --- a/examples/gen_rt_integrity_check.py +++ b/examples/gen_rt_integrity_check.py @@ -264,7 +264,7 @@ def main(): action="store", default=None) parser.add_option("-o", "--output", dest='output', metavar="PATH", - help="save sql schema to PATH (required)", + help="save sql model instances to PATH (required)", action="store", default=None) parser.add_option("-v", "--verbosity", dest='verbosity', action="count", From f925d70044c3788e5aaa42bcea362af27f2b52e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 2 Jun 2017 22:44:54 +0200 Subject: [PATCH 192/216] ooaofooa: add convenient function to remove globals from a model --- bridgepoint/ooaofooa.py | 14 ++++++++ tests/test_bridgepoint/test_ooaofooa.py | 45 +++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 tests/test_bridgepoint/test_ooaofooa.py diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 3cc2377..0bc51d5 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -531,6 +531,20 @@ def load_metamodel(resource=None, load_globals=True): return loader.build_metamodel() +def remove_globals(m): + filt = lambda sel: (247728914420827907967735776184937480192 <= + sel.DT_ID <= + 247728914420827907967735776184937480208) + + for s_dt in m.select_many('S_DT', filt): + xtuml.delete(one(s_dt).PE_PE[8001]()) + xtuml.delete(subtype(s_dt, 17)) + xtuml.delete(s_dt) + + + + + # Backwards compatabillity with older versions of pyxtuml Loader = ModelLoader empty_model = load_metamodel diff --git a/tests/test_bridgepoint/test_ooaofooa.py b/tests/test_bridgepoint/test_ooaofooa.py new file mode 100644 index 0000000..fc64f16 --- /dev/null +++ b/tests/test_bridgepoint/test_ooaofooa.py @@ -0,0 +1,45 @@ +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . +import unittest +import xtuml +from bridgepoint import ooaofooa + + +class TestOoaOfOoa(unittest.TestCase): + + def test_remove_globals(self): + m = ooaofooa.empty_model(load_globals=False) + s = xtuml.serialize_instances(m) + self.assertFalse(s) + + m = ooaofooa.empty_model(load_globals=True) + s = xtuml.serialize_instances(m) + self.assertTrue(s) + + ooaofooa.remove_globals(m) + s = xtuml.serialize_instances(m) + self.assertFalse(s) + + +if __name__ == "__main__": + import logging + import unittest + + logging.basicConfig(level=logging.DEBUG) + unittest.main() + From 4f56e946f41a16acc911b0b985e99bc9e4bd1dd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 3 Jun 2017 08:14:36 +0200 Subject: [PATCH 193/216] meta: stop adding new instances to a set during reflexive sorting --- xtuml/meta.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 742b5c1..f0132a6 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -932,7 +932,8 @@ def sequence_generator(): for first in first_instances: inst = first while inst: - yield inst + if inst in set_of_instances: + yield inst inst = navigate_one(inst).nav(metaclass.kind, rel_id, other_phrase)() if inst is first: break From cbb2fa12a7b9d9e91bd96c96511d9d9eceea4351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 3 Jun 2017 09:28:10 +0200 Subject: [PATCH 194/216] meta: make disconnect operation performed during instance deletion optional --- xtuml/meta.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index f0132a6..b667146 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -623,17 +623,20 @@ def clone(self, instance): return self.new(*args) - def delete(self, instance): + def delete(self, instance, disconnect=True): ''' - Delete an *instance* from the instance pool and disconnect it from any - links it might be connected to. If the *instance* is not part of the - metaclass, a *MetaException* is thrown. + Delete an *instance* from the instance pool and optionally *disconnect* + it from any links it might be connected to. If the *instance* is not + part of the metaclass, a *MetaException* is thrown. ''' if instance in self.storage: self.storage.remove(instance) else: raise DeleteException("Instance not found in the instance pool") + if not disconnect: + return + for link in self.links.values(): if instance not in link: continue @@ -1034,15 +1037,15 @@ def get_metamodel(class_or_instance): return get_metaclass(class_or_instance).metamodel -def delete(instance): +def delete(instance, disconnect=True): ''' - Delete an *instance* from its metaclass instance pool and disconnect it from - any links it might be connected to. + Delete an *instance* from its metaclass instance pool and optionally + *disconnect* it from any links it might be connected to. ''' if not isinstance(instance, Class): raise DeleteException("the provided argument is not an xtuml instance") - return get_metaclass(instance).delete(instance) + return get_metaclass(instance).delete(instance, disconnect) def cardinality(instance_or_set): From f1f92bd3460922a4891803b570bfa78e6476ad3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=83=C2=B6rnblom?= Date: Sat, 3 Jun 2017 09:30:32 +0200 Subject: [PATCH 195/216] ooaofooa: rename remove_globals to delete_globals, and make the disconnect operation optional --- bridgepoint/ooaofooa.py | 8 ++++---- tests/test_bridgepoint/test_ooaofooa.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index 0bc51d5..d50e060 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -531,15 +531,15 @@ def load_metamodel(resource=None, load_globals=True): return loader.build_metamodel() -def remove_globals(m): +def delete_globals(m, disconnect=False): filt = lambda sel: (247728914420827907967735776184937480192 <= sel.DT_ID <= 247728914420827907967735776184937480208) for s_dt in m.select_many('S_DT', filt): - xtuml.delete(one(s_dt).PE_PE[8001]()) - xtuml.delete(subtype(s_dt, 17)) - xtuml.delete(s_dt) + xtuml.delete(one(s_dt).PE_PE[8001](), disconnect) + xtuml.delete(subtype(s_dt, 17), disconnect) + xtuml.delete(s_dt, disconnect) diff --git a/tests/test_bridgepoint/test_ooaofooa.py b/tests/test_bridgepoint/test_ooaofooa.py index fc64f16..b5a68f3 100644 --- a/tests/test_bridgepoint/test_ooaofooa.py +++ b/tests/test_bridgepoint/test_ooaofooa.py @@ -31,7 +31,7 @@ def test_remove_globals(self): s = xtuml.serialize_instances(m) self.assertTrue(s) - ooaofooa.remove_globals(m) + ooaofooa.delete_globals(m) s = xtuml.serialize_instances(m) self.assertFalse(s) From 1c19d70c0900413fdcb2e649f6e33098958d6387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 3 Jun 2017 09:36:43 +0200 Subject: [PATCH 196/216] cosmetics --- tests/test_bridgepoint/test_ooaofooa.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_bridgepoint/test_ooaofooa.py b/tests/test_bridgepoint/test_ooaofooa.py index b5a68f3..5afed37 100644 --- a/tests/test_bridgepoint/test_ooaofooa.py +++ b/tests/test_bridgepoint/test_ooaofooa.py @@ -38,7 +38,6 @@ def test_remove_globals(self): if __name__ == "__main__": import logging - import unittest logging.basicConfig(level=logging.DEBUG) unittest.main() From 0caccd7a3fa4d9ca08caa4661de4eb67aa6aab04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 3 Jun 2017 09:38:38 +0200 Subject: [PATCH 197/216] persist: parameterize the file mode --- xtuml/persist.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/xtuml/persist.py b/xtuml/persist.py index 69e3123..13b2aff 100644 --- a/xtuml/persist.py +++ b/xtuml/persist.py @@ -182,23 +182,23 @@ def serialize(resource): return serialize_instance(resource) -def persist_instances(metamodel, path): +def persist_instances(metamodel, path, mode='w'): ''' Persist all instances in a *metamodel* by serializing them and saving to a *path* on disk. ''' - with open(path, 'w') as f: + with open(path, mode) as f: for inst in metamodel.instances: s = serialize_instance(inst) f.write(s) -def persist_schema(metamodel, path): +def persist_schema(metamodel, path, mode='w'): ''' Persist all class and association definitions in a *metamodel* by serializing them and saving to a *path* on disk. ''' - with open(path, 'w') as f: + with open(path, mode) as f: for kind in sorted(metamodel.metaclasses.keys()): s = serialize_class(metamodel.metaclasses[kind].clazz) f.write(s) @@ -208,12 +208,12 @@ def persist_schema(metamodel, path): f.write(s) -def persist_unique_identifiers(metamodel, path): +def persist_unique_identifiers(metamodel, path, mode='w'): ''' Persist all unique identifiers in a *metamodel* by serializing them and saving to a *path* on disk. ''' - with open(path, 'w') as f: + with open(path, mode) as f: for metaclass in metamodel.metaclasses.values(): for index_name, attribute_names in metaclass.indices.items(): attribute_names = ', '.join(attribute_names) @@ -223,12 +223,12 @@ def persist_unique_identifiers(metamodel, path): f.write(s) -def persist_database(metamodel, path): +def persist_database(metamodel, path, mode='w'): ''' Persist all instances, class definitions and association definitions in a *metamodel* by serializing them and saving to a *path* on disk. ''' - with open(path, 'w') as f: + with open(path, mode) as f: for kind in sorted(metamodel.metaclasses.keys()): metaclass = metamodel.metaclasses[kind] s = serialize_class(metaclass.clazz) From fe035acef9433fa93c56ea75af411f2de1571f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 3 Jun 2017 09:46:36 +0200 Subject: [PATCH 198/216] cosmetics --- bridgepoint/ooaofooa.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bridgepoint/ooaofooa.py b/bridgepoint/ooaofooa.py index d50e060..ea8f8b4 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -532,6 +532,9 @@ def load_metamodel(resource=None, load_globals=True): def delete_globals(m, disconnect=False): + ''' + Remove global instances, e.g. the core data type integer. + ''' filt = lambda sel: (247728914420827907967735776184937480192 <= sel.DT_ID <= 247728914420827907967735776184937480208) @@ -542,10 +545,7 @@ def delete_globals(m, disconnect=False): xtuml.delete(s_dt, disconnect) - - - -# Backwards compatabillity with older versions of pyxtuml +# Backwards compatibility with older versions of pyxtuml Loader = ModelLoader empty_model = load_metamodel From 9e65d428e4e14ab677e62e90ef5ad8abe216b946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 3 Jun 2017 10:19:33 +0200 Subject: [PATCH 199/216] cosmetics --- xtuml/__init__.py | 55 ++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/xtuml/__init__.py b/xtuml/__init__.py index 676ad38..f4b01a7 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -49,39 +49,36 @@ from .persist import serialize_value from .persist import serialize -from xtuml.meta import Association -from xtuml.meta import Link +from .meta import Association +from .meta import Link -from xtuml.meta import QuerySet -from xtuml.meta import Class -from xtuml.meta import BaseObject -from xtuml.meta import MetaClass -from xtuml.meta import MetaModel +from .meta import QuerySet +from .meta import Class +from .meta import BaseObject +from .meta import MetaClass +from .meta import MetaModel -from xtuml.meta import MetaException -from xtuml.meta import DeleteException -from xtuml.meta import RelateException -from xtuml.meta import UnrelateException -from xtuml.meta import MetaModelException -from xtuml.meta import UnknownLinkException -from xtuml.meta import UnknownClassException +from .meta import MetaException +from .meta import DeleteException +from .meta import RelateException +from .meta import UnrelateException +from .meta import MetaModelException +from .meta import UnknownLinkException +from .meta import UnknownClassException -from xtuml.meta import navigate_any -from xtuml.meta import navigate_one -from xtuml.meta import navigate_many -from xtuml.meta import navigate_subtype -from xtuml.meta import relate -from xtuml.meta import unrelate -from xtuml.meta import delete -from xtuml.meta import cardinality -from xtuml.meta import where_eq -from xtuml.meta import sort_reflexive -from xtuml.meta import get_metaclass -from xtuml.meta import get_metamodel +from .meta import navigate_any +from .meta import navigate_one +from .meta import navigate_many +from .meta import navigate_subtype +from .meta import relate +from .meta import unrelate +from .meta import delete +from .meta import cardinality +from .meta import where_eq +from .meta import sort_reflexive +from .meta import get_metaclass +from .meta import get_metamodel from .consistency_check import check_association_integrity from .consistency_check import check_uniqueness_constraint from .consistency_check import check_subtype_integrity - - - From d52e88c38fa09471caef43f9123ee5b020c0fc5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 3 Jun 2017 10:32:58 +0200 Subject: [PATCH 200/216] meta: allow links across instances with the same schema, but different meta model instantiations --- xtuml/meta.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index b667146..3239965 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -958,13 +958,13 @@ def _find_link(inst1, inst2, rel_id, phrase): if ass.rel_id != rel_id: continue - if (ass.source_link.from_metaclass == metaclass1 and - ass.source_link.to_metaclass == metaclass2 and + if (ass.source_link.from_metaclass.kind == metaclass1.kind and + ass.source_link.to_metaclass.kind == metaclass2.kind and ass.source_link.phrase == phrase): return inst1, inst2, ass - if (ass.target_link.from_metaclass == metaclass1 and - ass.target_link.to_metaclass == metaclass2 and + if (ass.target_link.from_metaclass.kind == metaclass1.kind and + ass.target_link.to_metaclass.kind == metaclass2.kind and ass.target_link.phrase == phrase): return inst2, inst1, ass From 88271184259aa213d867d04469579c957cc9443a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 7 Jun 2017 19:53:52 +0200 Subject: [PATCH 201/216] meta: only apply filter function if a where_clause is provided --- xtuml/meta.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 3239965..0424de7 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -651,8 +651,10 @@ def select_one(self, where_clause=None): ''' if isinstance(where_clause, dict): s = self.query(where_clause) - else: + elif where_clause: s = iter(filter(where_clause, self.storage)) + else: + s = iter(self.storage) return next(s, None) @@ -663,9 +665,11 @@ def select_many(self, where_clause=None): ''' if isinstance(where_clause, dict): s = self.query(where_clause) - else: + elif where_clause: s = filter(where_clause, self.storage) - + else: + s = iter(self.storage) + return QuerySet(s) def _find_assoc_links(self, kind, rel_id, phrase=''): @@ -778,7 +782,10 @@ def __call__(self, where_clause=None): >>> chain(lambda selected: selected.Name == 'test') ''' handle = self.handle or list() - return QuerySet(filter(where_clause, handle)) + if where_clause: + filter(where_clause, handle) + + return QuerySet(handle) class NavOneChain(NavChain): From 6f00fceba8c46dff95397e37aa6b81539f66f2ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Wed, 7 Jun 2017 21:16:09 +0200 Subject: [PATCH 202/216] cosmetics --- xtuml/meta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index 0424de7..ce61e24 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -299,7 +299,7 @@ def connect(self, instance, another_instance, check=True): def disconnect(self, instance, another_instance): ''' - Disconnect an *instance* from *another_instance* + Disconnect an *instance* from *another_instance*. ''' if instance not in self: return False From 97bcab006f8fddd083e2ea5f210a7eaf18bb5ac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 8 Jun 2017 08:25:31 +0200 Subject: [PATCH 203/216] prebuild: use relate instead of assigning referential attributes --- bridgepoint/prebuild.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index c7fc8cf..4e33cb7 100755 --- a/bridgepoint/prebuild.py +++ b/bridgepoint/prebuild.py @@ -1399,18 +1399,23 @@ def accept_PortInvocationNode(self, node, act_smt=None): return v_val def accept_ParameterListNode(self, node, act_smt, v_val): - next_value_id = None + prev_v_par = None for child in reversed(node.children): v_par = self.accept(child) - v_par.Next_Value_ID = next_value_id + xtuml.relate(prev_v_par, v_par, 816, 'precedes') + xtuml.relate(v_par, one(v_val).V_BRV[801](), 810) + xtuml.relate(v_par, one(v_val).V_TRV[801](), 811) + xtuml.relate(v_par, one(v_val).V_FNV[801](), 817) + xtuml.relate(v_par, one(v_val).V_MSV[801](), 842) + + xtuml.relate(v_par, one(act_smt).ACT_TFM[603](), 627) + xtuml.relate(v_par, one(act_smt).ACT_BRG[603](), 628) + xtuml.relate(v_par, one(act_smt).ACT_FNC[603](), 669) + xtuml.relate(v_par, one(act_smt).ACT_IOP[603](), 679) + xtuml.relate(v_par, one(act_smt).ACT_SGN[603](), 662) + xtuml.relate(v_par, one(act_smt).E_ESS[603](), 700) - if act_smt: - v_par.Statement_ID = act_smt.Statement_ID - - if v_val: - v_par.Invocation_Value_ID = v_val.Value_ID - - next_value_id = v_par.Value_ID + prev_v_par = v_par def accept_ParameterNode(self, node): v_val = self.accept(node.expression) From 994cb12caf8545d943ba9712512dcdc5c49d08fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Thu, 8 Jun 2017 20:00:28 +0200 Subject: [PATCH 204/216] consistency: improve performance by checking uniqness constraints with a hashtable instead of linear queries --- tests/test_xtuml/test_consistency.py | 2 +- xtuml/consistency_check.py | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py index cba531a..265fdaa 100644 --- a/tests/test_xtuml/test_consistency.py +++ b/tests/test_xtuml/test_consistency.py @@ -85,7 +85,7 @@ def test_uniqueness_constraint(self): pe_pe_clone = m.clone(pe_pe) self.assertFalse(m.is_consistent()) - self.assertEqual(2, xtuml.check_uniqueness_constraint(m, 'PE_PE')) + self.assertEqual(1, xtuml.check_uniqueness_constraint(m, 'PE_PE')) xtuml.delete(pe_pe_clone) self.assertTrue(m.is_consistent()) diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index 9b09c87..49b9b64 100644 --- a/xtuml/consistency_check.py +++ b/xtuml/consistency_check.py @@ -94,8 +94,12 @@ def check_uniqueness_constraint(m, kind=None): res = 0 for metaclass in metaclasses: + id_map = dict() + for identifier in metaclass.indices: + id_map[identifier] = dict() + for inst in metaclass.select_many(): - + # Check for null-values for name, ty in metaclass.attributes: if name not in metaclass.identifying_attributes: continue @@ -107,21 +111,22 @@ def check_uniqueness_constraint(m, kind=None): res += 1 logger.warning('%s.%s is part of an identifier and is null' % (metaclass.kind, name)) - - + + # Check uniqueness for identifier in metaclass.indices: kwargs = dict() for name in metaclass.indices[identifier]: kwargs[name] = getattr(inst, name) - - where_clause = xtuml.where_eq(**kwargs) - s = metaclass.select_many(where_clause) - if len(s) > 1: + + index_key = frozenset(kwargs.items()) + if index_key in id_map[identifier]: res += 1 id_string = pretty_unique_identifier(inst, identifier) logger.warning('uniqueness constraint violation in %s, %s' % (metaclass.kind, id_string)) + id_map[identifier][index_key] = inst + return res From bb7eb12f0a21f14b9d8ddb3c5454acc4c6e9f007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 10 Jun 2017 09:46:56 +0200 Subject: [PATCH 205/216] test inserting an integer with a uuid literal --- tests/test_xtuml/test_load.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/test_xtuml/test_load.py b/tests/test_xtuml/test_load.py index bdcbb15..695ff98 100644 --- a/tests/test_xtuml/test_load.py +++ b/tests/test_xtuml/test_load.py @@ -194,7 +194,16 @@ def test_insert_zero_uuid(self, m): ''' val = m.select_any('X') self.assertEqual(0, val.Id) - + + @load_docstring + def test_insert_integer_as_uuid(self, m): + ''' + CREATE TABLE X (Id INTEGER); + INSERT INTO X VALUES ("00000000-0000-0000-0000-000000000000"); + ''' + val = m.select_any('X') + self.assertEqual(0, val.Id) + @load_docstring def test_insert_positive_real(self, m): ''' From 23c87f99484faede91a258f5ce8e754aa4eac916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 10 Jun 2017 09:47:08 +0200 Subject: [PATCH 206/216] remove dead code --- xtuml/load.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/xtuml/load.py b/xtuml/load.py index 00369c7..0029d3b 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -210,12 +210,6 @@ def __init__(self): module=self, outputdir=os.path.dirname(__file__), tabmodule='xtuml.__xtuml_parsetab') - - def build_parser(self): - ''' - This method is deprecated. - ''' - pass def input(self, data, name=''): ''' From be19fb83498011731ef83f3a0ae8a9dde7f5f8f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 10 Jun 2017 12:45:13 +0200 Subject: [PATCH 207/216] cosmetics --- xtuml/meta.py | 1 - 1 file changed, 1 deletion(-) diff --git a/xtuml/meta.py b/xtuml/meta.py index ce61e24..3545505 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -36,7 +36,6 @@ logger = logging.getLogger(__name__) - class MetaException(Exception): ''' Base class for all exceptions thrown by the xtuml.meta module. From c046ee1d93e04ffe25577f1dbb336afaff947fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 19 Jun 2017 16:51:16 +0200 Subject: [PATCH 208/216] meta: fix navigate_many with a where-clause --- tests/test_xtuml/test_metamodel.py | 6 ++++++ xtuml/meta.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 38ae822..4b0e817 100644 --- a/tests/test_xtuml/test_metamodel.py +++ b/tests/test_xtuml/test_metamodel.py @@ -55,6 +55,12 @@ def test_select_many(self): q = m.select_many('S_EDT') self.assertIsInstance(q, xtuml.QuerySet) self.assertTrue(len(q) == 0) + + def test_navigate_many_where(self): + m = self.metamodel + s_cdt = m.select_many('S_CDT') + c_dt = xtuml.navigate_many(s_cdt).S_DT[17](where(Name='integer')) + self.assertEqual(1, len(c_dt)) def test_select_any_where(self): m = self.metamodel diff --git a/xtuml/meta.py b/xtuml/meta.py index 3545505..2a78945 100644 --- a/xtuml/meta.py +++ b/xtuml/meta.py @@ -782,7 +782,7 @@ def __call__(self, where_clause=None): ''' handle = self.handle or list() if where_clause: - filter(where_clause, handle) + handle = filter(where_clause, handle) return QuerySet(handle) From 4c15cf4c6d40c26ce5f91ef47b24117e516e4c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 20 Jun 2017 22:25:05 +0200 Subject: [PATCH 209/216] cosmetics --- xtuml/load.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xtuml/load.py b/xtuml/load.py index 0029d3b..c3e0c2d 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -376,7 +376,7 @@ def populate_instances(self, metamodel): else: fn = self._populate_instance_with_positional_arguments - inst = fn(metamodel, stmt) + fn(metamodel, stmt) def populate_connections(self, metamodel): ''' From f3a7e884085049144a0eb1ba0bd37fd456b8bb1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 20 Jun 2017 23:28:37 +0200 Subject: [PATCH 210/216] add test for xsd schema gen --- bridgepoint/gen_xsd_schema.py | 6 +- tests/resources/Simple_Model.xtuml | 1618 +++++++++++++++++ .../test_bridgepoint/test_build_component.py | 1453 --------------- tests/test_bridgepoint/test_gen_schema.py | 77 + 4 files changed, 1698 insertions(+), 1456 deletions(-) create mode 100644 tests/resources/Simple_Model.xtuml delete mode 100644 tests/test_bridgepoint/test_build_component.py create mode 100644 tests/test_bridgepoint/test_gen_schema.py diff --git a/bridgepoint/gen_xsd_schema.py b/bridgepoint/gen_xsd_schema.py index 4a6bb0b..74a01bc 100644 --- a/bridgepoint/gen_xsd_schema.py +++ b/bridgepoint/gen_xsd_schema.py @@ -249,7 +249,7 @@ def prettify(xml_string): return reparsed.toprettyxml(indent=" ") -def main(): +def main(args): parser = optparse.OptionParser(usage="%prog [options] [another_model_path...]", version=xtuml.version.complete_string, @@ -268,7 +268,7 @@ def main(): parser.add_option("-v", "--verbosity", dest='verbosity', action="count", help="increase debug logging level", default=2) - (opts, args) = parser.parse_args() + (opts, args) = parser.parse_args(args) if len(args) == 0 or None in [opts.component, opts.output]: parser.print_help() sys.exit(1) @@ -297,5 +297,5 @@ def main(): if __name__ == '__main__': - main() + main(sys.argv[1:]) diff --git a/tests/resources/Simple_Model.xtuml b/tests/resources/Simple_Model.xtuml new file mode 100644 index 0000000..6b32d75 --- /dev/null +++ b/tests/resources/Simple_Model.xtuml @@ -0,0 +1,1618 @@ +-- root-types-contained: Package_c +-- BP 7.1 content: StreamData syschar: 3 persistence-version: 7.1.6 + +INSERT INTO EP_PKG + VALUES ("a1a20979-675e-45d5-9f2c-a1d049b343f9", + "7aa5dd78-9a77-4aa5-9d43-3480f45e8803", + "7aa5dd78-9a77-4aa5-9d43-3480f45e8803", + 'Components', + '', + 0); +INSERT INTO GD_MD + VALUES ("31ae80b6-828a-41f3-95b1-7777c817f1d8", + 112, + "a1a20979-675e-45d5-9f2c-a1d049b343f9", + 108, + 0, + 0, + 1, + 1, + 1, + 12, + 1, + 0, + 0, + 200, + 150, + 0, + '', + 'Simple_Model::Components'); +INSERT INTO GD_GE + VALUES ("46d4257a-49eb-4451-9fc0-2b9c25109dd2", + "31ae80b6-828a-41f3-95b1-7777c817f1d8", + "109c0a69-f495-4920-9153-8764103be522", + 98, + 0, + 'Simple_Model::Components::Comp'); +INSERT INTO GD_SHP + VALUES ("46d4257a-49eb-4451-9fc0-2b9c25109dd2"); +INSERT INTO GD_NCS + VALUES ("46d4257a-49eb-4451-9fc0-2b9c25109dd2"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "46d4257a-49eb-4451-9fc0-2b9c25109dd2"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "46d4257a-49eb-4451-9fc0-2b9c25109dd2", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("46d4257a-49eb-4451-9fc0-2b9c25109dd2", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_DIA + VALUES ("31ae80b6-828a-41f3-95b1-7777c817f1d8", + '', + 1.000000, + 4000.000000, + 3000.000000, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("109c0a69-f495-4920-9153-8764103be522", + 1, + "a1a20979-675e-45d5-9f2c-a1d049b343f9", + "00000000-0000-0000-0000-000000000000", + 2); +INSERT INTO C_C + VALUES ("109c0a69-f495-4920-9153-8764103be522", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 'Comp', + '', + 0, + "00000000-0000-0000-0000-000000000000", + 0, + ''); +INSERT INTO GD_MD + VALUES ("a402a622-5f10-40a2-93d2-9215b3bc2c30", + 111, + "109c0a69-f495-4920-9153-8764103be522", + 98, + 0, + 0, + 1, + 1, + 1, + 12, + 1, + 0, + 0, + 200, + 150, + 0, + '', + 'Simple_Model::Components::Comp'); +INSERT INTO GD_GE + VALUES ("7a297681-11a6-46a0-8a16-a61b98527b43", + "a402a622-5f10-40a2-93d2-9215b3bc2c30", + "109c0a69-f495-4920-9153-8764103be522", + 103, + 0, + 'Simple_Model::Components::Comp'); +INSERT INTO GD_SHP + VALUES ("7a297681-11a6-46a0-8a16-a61b98527b43"); +INSERT INTO GD_CTR + VALUES ("7a297681-11a6-46a0-8a16-a61b98527b43"); +INSERT INTO DIM_ND + VALUES (1032.000000, + 800.000000, + "7a297681-11a6-46a0-8a16-a61b98527b43"); +INSERT INTO DIM_GE + VALUES (4100.000000, + 3100.000000, + "7a297681-11a6-46a0-8a16-a61b98527b43", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("7a297681-11a6-46a0-8a16-a61b98527b43", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_GE + VALUES ("e616b48e-b550-413d-a257-9c1d0eaed50b", + "a402a622-5f10-40a2-93d2-9215b3bc2c30", + "d0af3024-cca1-422c-9daf-87baf3724a13", + 108, + 0, + 'Simple_Model::Components::Comp::Classes'); +INSERT INTO GD_SHP + VALUES ("e616b48e-b550-413d-a257-9c1d0eaed50b"); +INSERT INTO GD_NCS + VALUES ("e616b48e-b550-413d-a257-9c1d0eaed50b"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "e616b48e-b550-413d-a257-9c1d0eaed50b"); +INSERT INTO DIM_GE + VALUES (4920.000000, + 3100.000000, + "e616b48e-b550-413d-a257-9c1d0eaed50b", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("e616b48e-b550-413d-a257-9c1d0eaed50b", + 0, + "7a297681-11a6-46a0-8a16-a61b98527b43"); +INSERT INTO DIM_DIA + VALUES ("a402a622-5f10-40a2-93d2-9215b3bc2c30", + '', + 1.000000, + 4000.000000, + 3000.000000, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("d0af3024-cca1-422c-9daf-87baf3724a13", + 1, + "00000000-0000-0000-0000-000000000000", + "109c0a69-f495-4920-9153-8764103be522", + 7); +INSERT INTO EP_PKG + VALUES ("d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + "7aa5dd78-9a77-4aa5-9d43-3480f45e8803", + 'Classes', + '', + 0); +INSERT INTO GD_MD + VALUES ("7c9a6508-b3fa-4207-8de4-026d13e20caa", + 112, + "d0af3024-cca1-422c-9daf-87baf3724a13", + 108, + 0, + 0, + 1, + 1, + 1, + 12, + 1, + 0, + 0, + 0, + 0, + 0, + '', + 'Simple_Model::Components::Comp::Classes'); +INSERT INTO GD_GE + VALUES ("5839bdde-e34a-42b1-8841-112453040996", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + 21, + 0, + 'Simple_Model::Components::Comp::Classes::Class'); +INSERT INTO GD_SHP + VALUES ("5839bdde-e34a-42b1-8841-112453040996"); +INSERT INTO GD_NCS + VALUES ("5839bdde-e34a-42b1-8841-112453040996"); +INSERT INTO DIM_ND + VALUES (204.000000, + 156.000000, + "5839bdde-e34a-42b1-8841-112453040996"); +INSERT INTO DIM_GE + VALUES (5306.000000, + 3108.000000, + "5839bdde-e34a-42b1-8841-112453040996", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("5839bdde-e34a-42b1-8841-112453040996", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("6baa6cbd-9f2d-4290-86ea-c69f807408a4", + 5400.000000, + 3264.000000, + "5839bdde-e34a-42b1-8841-112453040996"); +INSERT INTO DIM_CON + VALUES ("bc94fdd8-5cc6-4e3e-a0c5-0932bc5a7942", + 5510.000000, + 3204.000000, + "5839bdde-e34a-42b1-8841-112453040996"); +INSERT INTO GD_GE + VALUES ("d9a366d9-afcf-463b-89a8-214de9399cb8", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + 21, + 0, + 'Simple_Model::Components::Comp::Classes::Reflexive_Class'); +INSERT INTO GD_SHP + VALUES ("d9a366d9-afcf-463b-89a8-214de9399cb8"); +INSERT INTO GD_NCS + VALUES ("d9a366d9-afcf-463b-89a8-214de9399cb8"); +INSERT INTO DIM_ND + VALUES (204.000000, + 144.000000, + "d9a366d9-afcf-463b-89a8-214de9399cb8"); +INSERT INTO DIM_GE + VALUES (5798.000000, + 3108.000000, + "d9a366d9-afcf-463b-89a8-214de9399cb8", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("d9a366d9-afcf-463b-89a8-214de9399cb8", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("c9ec290e-a046-4c05-9b06-c0ca9a15d332", + 6002.000000, + 3168.000000, + "d9a366d9-afcf-463b-89a8-214de9399cb8"); +INSERT INTO DIM_CON + VALUES ("f643718d-fee0-474d-80fe-f5a684d9d5b6", + 5880.000000, + 3108.000000, + "d9a366d9-afcf-463b-89a8-214de9399cb8"); +INSERT INTO DIM_CON + VALUES ("22832bdb-1077-476e-8f4e-739c48b84514", + 5798.000000, + 3204.000000, + "d9a366d9-afcf-463b-89a8-214de9399cb8"); +INSERT INTO GD_GE + VALUES ("fd885cdf-005e-4d83-a291-ffed62b9ce97", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "7d68bff0-445a-44c9-9a71-465efba0e366", + 24, + 0, + 'Simple_Model::Components::Comp::Classes::R1'); +INSERT INTO GD_CON + VALUES ("fd885cdf-005e-4d83-a291-ffed62b9ce97", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("c95f2030-61a8-4684-bbde-dce72ec8e0d8", + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "c95f2030-61a8-4684-bbde-dce72ec8e0d8"); +INSERT INTO DIM_GE + VALUES (6012.000000, + 3178.000000, + "c95f2030-61a8-4684-bbde-dce72ec8e0d8", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("c95f2030-61a8-4684-bbde-dce72ec8e0d8", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("f04e0b67-9b0b-409e-8b49-7298dd56f677", + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "f04e0b67-9b0b-409e-8b49-7298dd56f677"); +INSERT INTO DIM_GE + VALUES (6013.000000, + 3106.000000, + "f04e0b67-9b0b-409e-8b49-7298dd56f677", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("f04e0b67-9b0b-409e-8b49-7298dd56f677", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("3cbfc959-0686-43d8-851a-a9e35af3c4fb", + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "3cbfc959-0686-43d8-851a-a9e35af3c4fb"); +INSERT INTO DIM_GE + VALUES (5890.000000, + 3081.000000, + "3cbfc959-0686-43d8-851a-a9e35af3c4fb", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("3cbfc959-0686-43d8-851a-a9e35af3c4fb", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("11c03690-20a0-42ff-a879-b2b00440ed27", + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "00000000-0000-0000-0000-000000000000", + "1101dccb-a39d-4fc6-8cf0-b4227bdfc8a6", + "788de5ea-c472-4a93-83a2-8902a6ea675b"); +INSERT INTO GD_LS + VALUES ("c8db537c-f306-48b1-95f1-1b8050300f2f", + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "11c03690-20a0-42ff-a879-b2b00440ed27", + "788de5ea-c472-4a93-83a2-8902a6ea675b", + "ee94b926-0123-4474-a49f-1e36f60a6ea4"); +INSERT INTO GD_AOS + VALUES ("a36515be-1fd7-4d23-875c-9757cec56ebb", + "c8db537c-f306-48b1-95f1-1b8050300f2f"); +INSERT INTO GD_LS + VALUES ("69444b3d-c0a8-4806-9e0c-363c50a27c0d", + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "c8db537c-f306-48b1-95f1-1b8050300f2f", + "ee94b926-0123-4474-a49f-1e36f60a6ea4", + "fc4ef623-56fb-478b-898b-5664fa53b490"); +INSERT INTO GD_LS + VALUES ("a818201e-a67c-4bbd-863f-6798d2310902", + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "69444b3d-c0a8-4806-9e0c-363c50a27c0d", + "fc4ef623-56fb-478b-898b-5664fa53b490", + "5ea41558-3c8d-43a9-bd99-df20f52396c6"); +INSERT INTO DIM_WAY + VALUES ("1101dccb-a39d-4fc6-8cf0-b4227bdfc8a6", + 6002.000000, + 3168.000000, + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("5ea41558-3c8d-43a9-bd99-df20f52396c6", + 5880.000000, + 3108.000000, + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "00000000-0000-0000-0000-000000000000", + "1101dccb-a39d-4fc6-8cf0-b4227bdfc8a6"); +INSERT INTO DIM_WAY + VALUES ("788de5ea-c472-4a93-83a2-8902a6ea675b", + 6052.000000, + 3168.000000, + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("ee94b926-0123-4474-a49f-1e36f60a6ea4", + 6052.000000, + 3059.000000, + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("fc4ef623-56fb-478b-898b-5664fa53b490", + 5882.000000, + 3059.000000, + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "fd885cdf-005e-4d83-a291-ffed62b9ce97", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("fd885cdf-005e-4d83-a291-ffed62b9ce97", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("a36515be-1fd7-4d23-875c-9757cec56ebb", + 6052.000000, + 3059.000000, + "fd885cdf-005e-4d83-a291-ffed62b9ce97"); +INSERT INTO DIM_ED + VALUES ("c9ec290e-a046-4c05-9b06-c0ca9a15d332", + "f643718d-fee0-474d-80fe-f5a684d9d5b6", + "fd885cdf-005e-4d83-a291-ffed62b9ce97"); +INSERT INTO GD_GE + VALUES ("1d5603bd-4cda-4daa-ac26-667827f39245", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + 21, + 0, + 'Simple_Model::Components::Comp::Classes::Supertype'); +INSERT INTO GD_SHP + VALUES ("1d5603bd-4cda-4daa-ac26-667827f39245"); +INSERT INTO GD_NCS + VALUES ("1d5603bd-4cda-4daa-ac26-667827f39245"); +INSERT INTO DIM_ND + VALUES (204.000000, + 156.000000, + "1d5603bd-4cda-4daa-ac26-667827f39245"); +INSERT INTO DIM_GE + VALUES (5306.000000, + 3384.000000, + "1d5603bd-4cda-4daa-ac26-667827f39245", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("1d5603bd-4cda-4daa-ac26-667827f39245", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("20abb769-d762-4c2a-b26a-5d0bc5cdb052", + 5510.000000, + 3456.000000, + "1d5603bd-4cda-4daa-ac26-667827f39245"); +INSERT INTO DIM_CON + VALUES ("4fd003ef-dbed-437b-ab2c-6e1d58dc292a", + 5400.000000, + 3384.000000, + "1d5603bd-4cda-4daa-ac26-667827f39245"); +INSERT INTO GD_GE + VALUES ("65ac15c9-a3a5-4c9b-a590-2a6914493d56", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + 21, + 0, + 'Simple_Model::Components::Comp::Classes::Subtype'); +INSERT INTO GD_SHP + VALUES ("65ac15c9-a3a5-4c9b-a590-2a6914493d56"); +INSERT INTO GD_NCS + VALUES ("65ac15c9-a3a5-4c9b-a590-2a6914493d56"); +INSERT INTO DIM_ND + VALUES (204.000000, + 144.000000, + "65ac15c9-a3a5-4c9b-a590-2a6914493d56"); +INSERT INTO DIM_GE + VALUES (5810.000000, + 3384.000000, + "65ac15c9-a3a5-4c9b-a590-2a6914493d56", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("65ac15c9-a3a5-4c9b-a590-2a6914493d56", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("85233259-7d20-458c-b90c-3c8204857413", + 5810.000000, + 3456.000000, + "65ac15c9-a3a5-4c9b-a590-2a6914493d56"); +INSERT INTO GD_GE + VALUES ("df77020c-1b0f-4316-bc4b-dce6688e5b23", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "64e67351-3221-46d7-bee1-2b70a084a90d", + 36, + 0, + 'Simple_Model::Components::Comp::Classes::R2'); +INSERT INTO GD_CON + VALUES ("df77020c-1b0f-4316-bc4b-dce6688e5b23", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("679c185e-05d7-4b25-a8bc-897077739fd9", + "df77020c-1b0f-4316-bc4b-dce6688e5b23", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "679c185e-05d7-4b25-a8bc-897077739fd9"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "679c185e-05d7-4b25-a8bc-897077739fd9", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("679c185e-05d7-4b25-a8bc-897077739fd9", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("2f43f9ba-9d38-430c-854b-932f034bfd60", + "df77020c-1b0f-4316-bc4b-dce6688e5b23", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "2f43f9ba-9d38-430c-854b-932f034bfd60"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "2f43f9ba-9d38-430c-854b-932f034bfd60", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("2f43f9ba-9d38-430c-854b-932f034bfd60", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("31605ef6-cd25-4738-b961-5d5b4c7c8a36", + "df77020c-1b0f-4316-bc4b-dce6688e5b23", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "31605ef6-cd25-4738-b961-5d5b4c7c8a36"); +INSERT INTO DIM_GE + VALUES (5748.000000, + 3466.000000, + "31605ef6-cd25-4738-b961-5d5b4c7c8a36", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("31605ef6-cd25-4738-b961-5d5b4c7c8a36", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("ebbec517-2e17-4651-bcf8-dc4c0c8a7660", + "df77020c-1b0f-4316-bc4b-dce6688e5b23", + "00000000-0000-0000-0000-000000000000", + "5fa7d658-5ceb-4031-bf9d-9986c0bbf00d", + "e7410e47-2e63-469d-8c13-56fcc3cf1509"); +INSERT INTO GD_AOS + VALUES ("23abb01b-34a7-4ea2-a1b9-361d42a23b05", + "ebbec517-2e17-4651-bcf8-dc4c0c8a7660"); +INSERT INTO DIM_WAY + VALUES ("5fa7d658-5ceb-4031-bf9d-9986c0bbf00d", + 5810.000000, + 3456.000000, + "df77020c-1b0f-4316-bc4b-dce6688e5b23", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("e7410e47-2e63-469d-8c13-56fcc3cf1509", + 5738.000000, + 3456.000000, + "df77020c-1b0f-4316-bc4b-dce6688e5b23", + "00000000-0000-0000-0000-000000000000", + "5fa7d658-5ceb-4031-bf9d-9986c0bbf00d"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "df77020c-1b0f-4316-bc4b-dce6688e5b23", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("df77020c-1b0f-4316-bc4b-dce6688e5b23", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("23abb01b-34a7-4ea2-a1b9-361d42a23b05", + 5738.000000, + 3456.000000, + "df77020c-1b0f-4316-bc4b-dce6688e5b23"); +INSERT INTO DIM_ED + VALUES ("85233259-7d20-458c-b90c-3c8204857413", + "00000000-0000-0000-0000-000000000000", + "df77020c-1b0f-4316-bc4b-dce6688e5b23"); +INSERT INTO GD_GE + VALUES ("1dfc3289-72e2-428b-ab00-81eaa0564229", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "bbefb760-3e2f-4ab4-9c4e-e0c94d11fb76", + 35, + 0, + 'Simple_Model::Components::Comp::Classes::R2::Supertype'); +INSERT INTO GD_CON + VALUES ("1dfc3289-72e2-428b-ab00-81eaa0564229", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("c814a722-9746-4cc4-81e6-fe4eda3b4b83", + "1dfc3289-72e2-428b-ab00-81eaa0564229", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "c814a722-9746-4cc4-81e6-fe4eda3b4b83"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "c814a722-9746-4cc4-81e6-fe4eda3b4b83", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("c814a722-9746-4cc4-81e6-fe4eda3b4b83", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("18b17258-49b9-4b65-961f-daa8a8e15fff", + "1dfc3289-72e2-428b-ab00-81eaa0564229", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "18b17258-49b9-4b65-961f-daa8a8e15fff"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "18b17258-49b9-4b65-961f-daa8a8e15fff", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("18b17258-49b9-4b65-961f-daa8a8e15fff", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("7048e6ba-75fd-49d8-9abd-8ef8d208e46e", + "1dfc3289-72e2-428b-ab00-81eaa0564229", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "7048e6ba-75fd-49d8-9abd-8ef8d208e46e"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "7048e6ba-75fd-49d8-9abd-8ef8d208e46e", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("7048e6ba-75fd-49d8-9abd-8ef8d208e46e", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("c8a84d19-b63d-4cbd-842e-b1538817cc22", + "1dfc3289-72e2-428b-ab00-81eaa0564229", + "00000000-0000-0000-0000-000000000000", + "8ddc93c5-f83f-472f-b9ed-c6628d63566a", + "144540b6-6474-44a1-afa3-7056edd790dd"); +INSERT INTO DIM_WAY + VALUES ("8ddc93c5-f83f-472f-b9ed-c6628d63566a", + 5510.000000, + 3456.000000, + "1dfc3289-72e2-428b-ab00-81eaa0564229", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("144540b6-6474-44a1-afa3-7056edd790dd", + 5738.000000, + 3456.000000, + "1dfc3289-72e2-428b-ab00-81eaa0564229", + "00000000-0000-0000-0000-000000000000", + "8ddc93c5-f83f-472f-b9ed-c6628d63566a"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "1dfc3289-72e2-428b-ab00-81eaa0564229", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("1dfc3289-72e2-428b-ab00-81eaa0564229", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ED + VALUES ("20abb769-d762-4c2a-b26a-5d0bc5cdb052", + "23abb01b-34a7-4ea2-a1b9-361d42a23b05", + "1dfc3289-72e2-428b-ab00-81eaa0564229"); +INSERT INTO GD_GE + VALUES ("d8be7af9-90e8-493f-b394-2c58295ca30c", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + 24, + 0, + 'Simple_Model::Components::Comp::Classes::R3'); +INSERT INTO GD_CON + VALUES ("d8be7af9-90e8-493f-b394-2c58295ca30c", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("d344068c-ad25-4191-898d-1cd0179f92c6", + "d8be7af9-90e8-493f-b394-2c58295ca30c", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "d344068c-ad25-4191-898d-1cd0179f92c6"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "d344068c-ad25-4191-898d-1cd0179f92c6", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("d344068c-ad25-4191-898d-1cd0179f92c6", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("8c5f4a22-d22e-4cd9-b5e2-033f7191b0ad", + "d8be7af9-90e8-493f-b394-2c58295ca30c", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "8c5f4a22-d22e-4cd9-b5e2-033f7191b0ad"); +INSERT INTO DIM_GE + VALUES (5361.000000, + 3316.000000, + "8c5f4a22-d22e-4cd9-b5e2-033f7191b0ad", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("8c5f4a22-d22e-4cd9-b5e2-033f7191b0ad", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("4d2f0485-d42e-4fc1-b68d-7749c0061824", + "d8be7af9-90e8-493f-b394-2c58295ca30c", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "4d2f0485-d42e-4fc1-b68d-7749c0061824"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "4d2f0485-d42e-4fc1-b68d-7749c0061824", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("4d2f0485-d42e-4fc1-b68d-7749c0061824", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("1fd5016b-c54f-4230-a7a1-a4241d835e1e", + "d8be7af9-90e8-493f-b394-2c58295ca30c", + "00000000-0000-0000-0000-000000000000", + "4e87e894-0348-498d-9ef1-d1e43ecaff70", + "ba7dfc45-dff2-4570-93fc-b5a3c6573fa3"); +INSERT INTO DIM_WAY + VALUES ("4e87e894-0348-498d-9ef1-d1e43ecaff70", + 5400.000000, + 3264.000000, + "d8be7af9-90e8-493f-b394-2c58295ca30c", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("ba7dfc45-dff2-4570-93fc-b5a3c6573fa3", + 5400.000000, + 3384.000000, + "d8be7af9-90e8-493f-b394-2c58295ca30c", + "00000000-0000-0000-0000-000000000000", + "4e87e894-0348-498d-9ef1-d1e43ecaff70"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "d8be7af9-90e8-493f-b394-2c58295ca30c", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("d8be7af9-90e8-493f-b394-2c58295ca30c", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ED + VALUES ("6baa6cbd-9f2d-4290-86ea-c69f807408a4", + "4fd003ef-dbed-437b-ab2c-6e1d58dc292a", + "d8be7af9-90e8-493f-b394-2c58295ca30c"); +INSERT INTO GD_GE + VALUES ("02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "cf86f8bf-4626-4e84-922d-783b6288bf98", + 24, + 0, + 'Simple_Model::Components::Comp::Classes::R4'); +INSERT INTO GD_CON + VALUES ("02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("cbd962be-7cfe-4106-840d-798f15843cbf", + "02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "cbd962be-7cfe-4106-840d-798f15843cbf"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "cbd962be-7cfe-4106-840d-798f15843cbf", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("cbd962be-7cfe-4106-840d-798f15843cbf", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("b0f7e4c4-441b-4a2f-858d-0a7e72b6e46c", + "02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "b0f7e4c4-441b-4a2f-858d-0a7e72b6e46c"); +INSERT INTO DIM_GE + VALUES (5647.000000, + 3162.000000, + "b0f7e4c4-441b-4a2f-858d-0a7e72b6e46c", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("b0f7e4c4-441b-4a2f-858d-0a7e72b6e46c", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("9726edf9-aa56-46f9-af8d-9d3d37cca4a6", + "02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "9726edf9-aa56-46f9-af8d-9d3d37cca4a6"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "9726edf9-aa56-46f9-af8d-9d3d37cca4a6", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("9726edf9-aa56-46f9-af8d-9d3d37cca4a6", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("45f5e223-1b23-4e37-a215-b710455ec265", + "02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + "00000000-0000-0000-0000-000000000000", + "a9e00d06-37af-4ae8-8060-74f3d8c8a112", + "d98181be-f896-4a12-822e-8414765f2360"); +INSERT INTO DIM_WAY + VALUES ("a9e00d06-37af-4ae8-8060-74f3d8c8a112", + 5510.000000, + 3204.000000, + "02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("d98181be-f896-4a12-822e-8414765f2360", + 5798.000000, + 3204.000000, + "02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + "00000000-0000-0000-0000-000000000000", + "a9e00d06-37af-4ae8-8060-74f3d8c8a112"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("02a77d3a-9cea-4e1f-a3c2-f2900b0846d1", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ED + VALUES ("bc94fdd8-5cc6-4e3e-a0c5-0932bc5a7942", + "22832bdb-1077-476e-8f4e-739c48b84514", + "02a77d3a-9cea-4e1f-a3c2-f2900b0846d1"); +INSERT INTO GD_GE + VALUES ("e777e64f-9a7a-4df7-a460-5dc92b303bef", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + 21, + 0, + 'Simple_Model::Components::Comp::Classes::Assoc_Class'); +INSERT INTO GD_SHP + VALUES ("e777e64f-9a7a-4df7-a460-5dc92b303bef"); +INSERT INTO GD_NCS + VALUES ("e777e64f-9a7a-4df7-a460-5dc92b303bef"); +INSERT INTO DIM_ND + VALUES (204.000000, + 144.000000, + "e777e64f-9a7a-4df7-a460-5dc92b303bef"); +INSERT INTO DIM_GE + VALUES (6110.000000, + 2892.000000, + "e777e64f-9a7a-4df7-a460-5dc92b303bef", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("e777e64f-9a7a-4df7-a460-5dc92b303bef", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_CON + VALUES ("28a54894-962e-4d10-9477-934ab778b01e", + 6110.000000, + 3036.000000, + "e777e64f-9a7a-4df7-a460-5dc92b303bef"); +INSERT INTO GD_GE + VALUES ("e9abeb33-e322-48dc-87a2-795db796a883", + "7c9a6508-b3fa-4207-8de4-026d13e20caa", + "7d68bff0-445a-44c9-9a71-465efba0e366", + 34, + 0, + 'Simple_Model::Components::Comp::Classes::R1::Assoc_Class'); +INSERT INTO GD_CON + VALUES ("e9abeb33-e322-48dc-87a2-795db796a883", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("f2097f11-1355-49ee-a79c-cc9922cef757", + "e9abeb33-e322-48dc-87a2-795db796a883", + 1, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "f2097f11-1355-49ee-a79c-cc9922cef757"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "f2097f11-1355-49ee-a79c-cc9922cef757", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("f2097f11-1355-49ee-a79c-cc9922cef757", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("1a2fcdae-69b3-4910-b44f-8c2983ca178a", + "e9abeb33-e322-48dc-87a2-795db796a883", + 3, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "1a2fcdae-69b3-4910-b44f-8c2983ca178a"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "1a2fcdae-69b3-4910-b44f-8c2983ca178a", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("1a2fcdae-69b3-4910-b44f-8c2983ca178a", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_CTXT + VALUES ("b130d27a-380a-4ffb-9bbe-3f5871a95091", + "e9abeb33-e322-48dc-87a2-795db796a883", + 2, + 0.000000, + 0.000000); +INSERT INTO DIM_ND + VALUES (0.000000, + 0.000000, + "b130d27a-380a-4ffb-9bbe-3f5871a95091"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "b130d27a-380a-4ffb-9bbe-3f5871a95091", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("b130d27a-380a-4ffb-9bbe-3f5871a95091", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_LS + VALUES ("4ebcaeca-ec69-48b2-8cf1-52b4fb7c34e7", + "e9abeb33-e322-48dc-87a2-795db796a883", + "00000000-0000-0000-0000-000000000000", + "6267eb7c-fa0a-4f05-b950-3d98aea0fc39", + "720b705c-59be-44e1-bd79-9e1ad67b7c6d"); +INSERT INTO DIM_WAY + VALUES ("6267eb7c-fa0a-4f05-b950-3d98aea0fc39", + 6110.000000, + 3036.000000, + "e9abeb33-e322-48dc-87a2-795db796a883", + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_WAY + VALUES ("720b705c-59be-44e1-bd79-9e1ad67b7c6d", + 6052.000000, + 3059.000000, + "e9abeb33-e322-48dc-87a2-795db796a883", + "00000000-0000-0000-0000-000000000000", + "6267eb7c-fa0a-4f05-b950-3d98aea0fc39"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "e9abeb33-e322-48dc-87a2-795db796a883", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("e9abeb33-e322-48dc-87a2-795db796a883", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ED + VALUES ("28a54894-962e-4d10-9477-934ab778b01e", + "a36515be-1fd7-4d23-875c-9757cec56ebb", + "e9abeb33-e322-48dc-87a2-795db796a883"); +INSERT INTO DIM_DIA + VALUES ("7c9a6508-b3fa-4207-8de4-026d13e20caa", + '', + 1.000000, + 4000.000000, + 3000.000000, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 4); +INSERT INTO O_OBJ + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + 'Class', + 1, + 'Class', + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO O_NBATTR + VALUES ("ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "134a924a-3edb-4741-a768-b2b34bc3f7a4"); +INSERT INTO O_BATTR + VALUES ("ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "134a924a-3edb-4741-a768-b2b34bc3f7a4"); +INSERT INTO O_ATTR + VALUES ("ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + "00000000-0000-0000-0000-000000000000", + 'Id', + '', + '', + 'Id', + 0, + "ba5eda7a-def5-0000-0000-000000000005", + '', + ''); +INSERT INTO O_REF + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + 0, + "7001a24a-8994-490d-baeb-2f28819c68eb", + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + "c21404ae-bee3-4018-ac8a-20de576d6fd6", + "726cdadd-2096-4c53-8b7d-da3a0bdce31d", + "0ae6a746-fd49-4433-a7c5-2fa92897f90b", + "f4c829e3-3b89-4596-9ac5-2d7bad6e4ff2", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Supertype', + 'Id', + 'R3'); +INSERT INTO O_RATTR + VALUES ("0ae6a746-fd49-4433-a7c5-2fa92897f90b", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + "ae4e280b-dfc4-4d95-bbb4-1d8c1a1a8afa", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + 1, + 'Id'); +INSERT INTO O_ATTR + VALUES ("0ae6a746-fd49-4433-a7c5-2fa92897f90b", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + "ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + 'Other_Id', + '', + 'Other_', + 'Id', + 1, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); +INSERT INTO O_ID + VALUES (0, + "134a924a-3edb-4741-a768-b2b34bc3f7a4"); +INSERT INTO O_OIDA + VALUES ("ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + 0, + 'Id'); +INSERT INTO O_ID + VALUES (1, + "134a924a-3edb-4741-a768-b2b34bc3f7a4"); +INSERT INTO O_ID + VALUES (2, + "134a924a-3edb-4741-a768-b2b34bc3f7a4"); +INSERT INTO PE_PE + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 4); +INSERT INTO O_OBJ + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + 'Reflexive_Class', + 2, + 'Reflexive_Class', + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO O_REF + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + 0, + "ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "cf86f8bf-4626-4e84-922d-783b6288bf98", + "ef97cbc1-dd8e-41d8-ad55-e18f10d79ee1", + "9803accb-e433-4e8d-96be-1d80b537345b", + "f188d4c8-efc7-4c40-80ca-88b36931a93f", + "5cf57def-b643-4058-931b-03098af9fb4a", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Class', + 'Id', + 'R4'); +INSERT INTO O_RATTR + VALUES ("f188d4c8-efc7-4c40-80ca-88b36931a93f", + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + 1, + 'Id'); +INSERT INTO O_ATTR + VALUES ("f188d4c8-efc7-4c40-80ca-88b36931a93f", + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "00000000-0000-0000-0000-000000000000", + 'Id', + '', + '', + 'Id', + 0, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); +INSERT INTO O_ID + VALUES (0, + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6"); +INSERT INTO O_OIDA + VALUES ("f188d4c8-efc7-4c40-80ca-88b36931a93f", + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + 0, + 'Id'); +INSERT INTO O_ID + VALUES (1, + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6"); +INSERT INTO O_ID + VALUES (2, + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6"); +INSERT INTO PE_PE + VALUES ("7d68bff0-445a-44c9-9a71-465efba0e366", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 9); +INSERT INTO R_REL + VALUES ("7d68bff0-445a-44c9-9a71-465efba0e366", + 1, + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_ASSOC + VALUES ("7d68bff0-445a-44c9-9a71-465efba0e366"); +INSERT INTO R_AONE + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "adb959b0-d522-4022-b6d5-c69e0ebb250c", + 0, + 1, + 'other'); +INSERT INTO O_RTIDA + VALUES ("f188d4c8-efc7-4c40-80ca-88b36931a93f", + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + 0, + "7d68bff0-445a-44c9-9a71-465efba0e366", + "adb959b0-d522-4022-b6d5-c69e0ebb250c"); +INSERT INTO R_RTO + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "adb959b0-d522-4022-b6d5-c69e0ebb250c", + 0); +INSERT INTO R_OIR + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "adb959b0-d522-4022-b6d5-c69e0ebb250c", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_AOTH + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "652874e7-c040-4a8d-b321-d39feb5bfb59", + 0, + 1, + 'one'); +INSERT INTO O_RTIDA + VALUES ("f188d4c8-efc7-4c40-80ca-88b36931a93f", + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + 0, + "7d68bff0-445a-44c9-9a71-465efba0e366", + "652874e7-c040-4a8d-b321-d39feb5bfb59"); +INSERT INTO R_RTO + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "652874e7-c040-4a8d-b321-d39feb5bfb59", + 0); +INSERT INTO R_OIR + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "652874e7-c040-4a8d-b321-d39feb5bfb59", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_ASSR + VALUES ("4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "54309c84-59e2-41c3-9ee6-68bbdac7a959", + 0); +INSERT INTO R_RGO + VALUES ("4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "54309c84-59e2-41c3-9ee6-68bbdac7a959"); +INSERT INTO R_OIR + VALUES ("4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "54309c84-59e2-41c3-9ee6-68bbdac7a959", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 4); +INSERT INTO O_OBJ + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + 'Supertype', + 3, + 'Supertype', + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO O_REF + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + 0, + "ae4e280b-dfc4-4d95-bbb4-1d8c1a1a8afa", + "64e67351-3221-46d7-bee1-2b70a084a90d", + "bbefb760-3e2f-4ab4-9c4e-e0c94d11fb76", + "0f277787-6e99-48ed-a316-42177e258f2a", + "7001a24a-8994-490d-baeb-2f28819c68eb", + "27fc22d9-40c9-4d81-a975-b6be014849ba", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Subtype', + 'Id', + 'R2'); +INSERT INTO O_RATTR + VALUES ("7001a24a-8994-490d-baeb-2f28819c68eb", + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "ae4e280b-dfc4-4d95-bbb4-1d8c1a1a8afa", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + 1, + 'Id'); +INSERT INTO O_ATTR + VALUES ("7001a24a-8994-490d-baeb-2f28819c68eb", + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "00000000-0000-0000-0000-000000000000", + 'Id', + '', + '', + 'Id', + 0, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); +INSERT INTO O_ID + VALUES (0, + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd"); +INSERT INTO O_OIDA + VALUES ("7001a24a-8994-490d-baeb-2f28819c68eb", + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + 0, + 'Id'); +INSERT INTO O_ID + VALUES (1, + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd"); +INSERT INTO O_ID + VALUES (2, + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd"); +INSERT INTO PE_PE + VALUES ("59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 4); +INSERT INTO O_OBJ + VALUES ("59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + 'Subtype', + 4, + 'Subtype', + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO O_NBATTR + VALUES ("ae4e280b-dfc4-4d95-bbb4-1d8c1a1a8afa", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd"); +INSERT INTO O_BATTR + VALUES ("ae4e280b-dfc4-4d95-bbb4-1d8c1a1a8afa", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd"); +INSERT INTO O_ATTR + VALUES ("ae4e280b-dfc4-4d95-bbb4-1d8c1a1a8afa", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + "00000000-0000-0000-0000-000000000000", + 'Id', + '', + '', + 'Id', + 0, + "ba5eda7a-def5-0000-0000-000000000005", + '', + ''); +INSERT INTO O_ID + VALUES (0, + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd"); +INSERT INTO O_OIDA + VALUES ("ae4e280b-dfc4-4d95-bbb4-1d8c1a1a8afa", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + 0, + 'Id'); +INSERT INTO O_ID + VALUES (1, + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd"); +INSERT INTO O_ID + VALUES (2, + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd"); +INSERT INTO PE_PE + VALUES ("64e67351-3221-46d7-bee1-2b70a084a90d", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 9); +INSERT INTO R_REL + VALUES ("64e67351-3221-46d7-bee1-2b70a084a90d", + 2, + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_SUBSUP + VALUES ("64e67351-3221-46d7-bee1-2b70a084a90d"); +INSERT INTO R_SUPER + VALUES ("59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + "64e67351-3221-46d7-bee1-2b70a084a90d", + "0f277787-6e99-48ed-a316-42177e258f2a"); +INSERT INTO O_RTIDA + VALUES ("ae4e280b-dfc4-4d95-bbb4-1d8c1a1a8afa", + "59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + 0, + "64e67351-3221-46d7-bee1-2b70a084a90d", + "0f277787-6e99-48ed-a316-42177e258f2a"); +INSERT INTO R_RTO + VALUES ("59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + "64e67351-3221-46d7-bee1-2b70a084a90d", + "0f277787-6e99-48ed-a316-42177e258f2a", + 0); +INSERT INTO R_OIR + VALUES ("59955d97-f1a2-41e7-bb3a-93e6e961c2fd", + "64e67351-3221-46d7-bee1-2b70a084a90d", + "0f277787-6e99-48ed-a316-42177e258f2a", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_SUB + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "64e67351-3221-46d7-bee1-2b70a084a90d", + "bbefb760-3e2f-4ab4-9c4e-e0c94d11fb76"); +INSERT INTO R_RGO + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "64e67351-3221-46d7-bee1-2b70a084a90d", + "bbefb760-3e2f-4ab4-9c4e-e0c94d11fb76"); +INSERT INTO R_OIR + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "64e67351-3221-46d7-bee1-2b70a084a90d", + "bbefb760-3e2f-4ab4-9c4e-e0c94d11fb76", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("ede70c4e-665a-4ee7-840a-b6bd04e1f954", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 9); +INSERT INTO R_REL + VALUES ("ede70c4e-665a-4ee7-840a-b6bd04e1f954", + 3, + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_SIMP + VALUES ("ede70c4e-665a-4ee7-840a-b6bd04e1f954"); +INSERT INTO R_FORM + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + "c21404ae-bee3-4018-ac8a-20de576d6fd6", + 1, + 1, + ''); +INSERT INTO R_RGO + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + "c21404ae-bee3-4018-ac8a-20de576d6fd6"); +INSERT INTO R_OIR + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + "c21404ae-bee3-4018-ac8a-20de576d6fd6", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_PART + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + "726cdadd-2096-4c53-8b7d-da3a0bdce31d", + 0, + 0, + ''); +INSERT INTO O_RTIDA + VALUES ("7001a24a-8994-490d-baeb-2f28819c68eb", + "69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + 0, + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + "726cdadd-2096-4c53-8b7d-da3a0bdce31d"); +INSERT INTO R_RTO + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + "726cdadd-2096-4c53-8b7d-da3a0bdce31d", + 0); +INSERT INTO R_OIR + VALUES ("69e1fbe0-c68f-4b1f-9df1-b454f524e6cd", + "ede70c4e-665a-4ee7-840a-b6bd04e1f954", + "726cdadd-2096-4c53-8b7d-da3a0bdce31d", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("cf86f8bf-4626-4e84-922d-783b6288bf98", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 9); +INSERT INTO R_REL + VALUES ("cf86f8bf-4626-4e84-922d-783b6288bf98", + 4, + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_SIMP + VALUES ("cf86f8bf-4626-4e84-922d-783b6288bf98"); +INSERT INTO R_PART + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + "cf86f8bf-4626-4e84-922d-783b6288bf98", + "9803accb-e433-4e8d-96be-1d80b537345b", + 0, + 0, + ''); +INSERT INTO O_RTIDA + VALUES ("ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + 0, + "cf86f8bf-4626-4e84-922d-783b6288bf98", + "9803accb-e433-4e8d-96be-1d80b537345b"); +INSERT INTO R_RTO + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + "cf86f8bf-4626-4e84-922d-783b6288bf98", + "9803accb-e433-4e8d-96be-1d80b537345b", + 0); +INSERT INTO R_OIR + VALUES ("134a924a-3edb-4741-a768-b2b34bc3f7a4", + "cf86f8bf-4626-4e84-922d-783b6288bf98", + "9803accb-e433-4e8d-96be-1d80b537345b", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO R_FORM + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "cf86f8bf-4626-4e84-922d-783b6288bf98", + "ef97cbc1-dd8e-41d8-ad55-e18f10d79ee1", + 1, + 1, + ''); +INSERT INTO R_RGO + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "cf86f8bf-4626-4e84-922d-783b6288bf98", + "ef97cbc1-dd8e-41d8-ad55-e18f10d79ee1"); +INSERT INTO R_OIR + VALUES ("1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + "cf86f8bf-4626-4e84-922d-783b6288bf98", + "ef97cbc1-dd8e-41d8-ad55-e18f10d79ee1", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + 1, + "d0af3024-cca1-422c-9daf-87baf3724a13", + "00000000-0000-0000-0000-000000000000", + 4); +INSERT INTO O_OBJ + VALUES ("4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + 'Assoc_Class', + 5, + 'Assoc_Class', + '', + "00000000-0000-0000-0000-000000000000"); +INSERT INTO O_REF + VALUES ("4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + 0, + "f188d4c8-efc7-4c40-80ca-88b36931a93f", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "54309c84-59e2-41c3-9ee6-68bbdac7a959", + "adb959b0-d522-4022-b6d5-c69e0ebb250c", + "5a0f3ec3-c973-4fac-ac1f-ad71ca749bd4", + "9f92116f-184e-434d-8974-98c744793fcd", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Reflexive_Class', + 'Id', + 'R1.''other'''); +INSERT INTO O_RATTR + VALUES ("5a0f3ec3-c973-4fac-ac1f-ad71ca749bd4", + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + 1, + 'Id'); +INSERT INTO O_ATTR + VALUES ("5a0f3ec3-c973-4fac-ac1f-ad71ca749bd4", + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "00000000-0000-0000-0000-000000000000", + 'Other_Id', + '', + 'Other_', + 'Id', + 1, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); +INSERT INTO O_REF + VALUES ("4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "1a706521-6fb7-42ac-a5fe-949fb4b26ef6", + 0, + "f188d4c8-efc7-4c40-80ca-88b36931a93f", + "7d68bff0-445a-44c9-9a71-465efba0e366", + "54309c84-59e2-41c3-9ee6-68bbdac7a959", + "652874e7-c040-4a8d-b321-d39feb5bfb59", + "e44e92a3-afed-4d48-9a8e-471f1e616c62", + "18a3a48c-7dd9-43f7-8d4c-5f646e9b3256", + "00000000-0000-0000-0000-000000000000", + 0, + '', + 'Reflexive_Class', + 'Id', + 'R1.''one'''); +INSERT INTO O_RATTR + VALUES ("e44e92a3-afed-4d48-9a8e-471f1e616c62", + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "ee50994e-5f2b-41e9-ba18-90cf46b2f84e", + "134a924a-3edb-4741-a768-b2b34bc3f7a4", + 1, + 'Id'); +INSERT INTO O_ATTR + VALUES ("e44e92a3-afed-4d48-9a8e-471f1e616c62", + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + "5a0f3ec3-c973-4fac-ac1f-ad71ca749bd4", + 'One_Id', + '', + 'One_', + 'Id', + 1, + "ba5eda7a-def5-0000-0000-000000000007", + '', + ''); +INSERT INTO O_ID + VALUES (0, + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e"); +INSERT INTO O_OIDA + VALUES ("5a0f3ec3-c973-4fac-ac1f-ad71ca749bd4", + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + 0, + 'Other_Id'); +INSERT INTO O_OIDA + VALUES ("e44e92a3-afed-4d48-9a8e-471f1e616c62", + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e", + 0, + 'One_Id'); +INSERT INTO O_ID + VALUES (1, + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e"); +INSERT INTO O_ID + VALUES (2, + "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e"); +INSERT INTO PE_PE + VALUES ("a1a20979-675e-45d5-9f2c-a1d049b343f9", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 7); +INSERT INTO GD_GE + VALUES ("942e37f1-4ef0-469d-99e7-1d6f3bb334be", + "8b04766a-7ad4-4dc0-886d-aef6a40581a8", + "a1a20979-675e-45d5-9f2c-a1d049b343f9", + 108, + 0, + 'Simple_Model::Components'); +INSERT INTO GD_SHP + VALUES ("942e37f1-4ef0-469d-99e7-1d6f3bb334be"); +INSERT INTO GD_NCS + VALUES ("942e37f1-4ef0-469d-99e7-1d6f3bb334be"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "942e37f1-4ef0-469d-99e7-1d6f3bb334be"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "942e37f1-4ef0-469d-99e7-1d6f3bb334be", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("942e37f1-4ef0-469d-99e7-1d6f3bb334be", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO S_SYS_PROXY + VALUES ("7aa5dd78-9a77-4aa5-9d43-3480f45e8803", + 'Simple_Model', + 1, + '../Simple_Model.xtuml'); diff --git a/tests/test_bridgepoint/test_build_component.py b/tests/test_bridgepoint/test_build_component.py deleted file mode 100644 index bdae17d..0000000 --- a/tests/test_bridgepoint/test_build_component.py +++ /dev/null @@ -1,1453 +0,0 @@ -# encoding: utf-8 -# Copyright (C) 2017 John Törnblom -# -# This file is part of pyxtuml. -# -# pyxtuml is free software: you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation, either -# version 3 of the License, or (at your option) any later version. -# -# pyxtuml is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with pyxtuml. If not, see . - -import unittest -import bridgepoint -import xtuml - - -class TestSchemaGen(unittest.TestCase): - """ - -- root-types-contained: ModelClass_c,Association_c,ClassAsSubtype_c,ClassAsLink_c - -- generics - -- BP 7.1 content: StreamData syschar: 3 persistence-version: 7.1.6 - - INSERT INTO O_OBJ - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 'Class', - 1, - 'Class', - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO O_NBATTR - VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); - INSERT INTO O_BATTR - VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); - INSERT INTO O_ATTR - VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "00000000-0000-0000-0000-000000000000", - 'Id', - '', - '', - 'Id', - 0, - "ba5eda7a-def5-0000-0000-000000000005", - '', - ''); - INSERT INTO O_REF - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "7ef7999e-5513-4984-8744-9c1a5cf46412", - 0, - "990c9f1b-71a8-4246-af0e-de20a069e784", - "3ae58522-7f90-48b3-85b4-35df51c6192a", - "b3f14c88-fd1b-4aa8-a5ae-15d202bee5d6", - "9d8b6602-75c8-44b6-ac4f-9da04573b957", - "6fdefe7f-3f99-4c57-8009-8825066fa637", - "9197e43d-966a-4435-8393-0ff6514947f6", - "00000000-0000-0000-0000-000000000000", - 0, - '', - 'Supertype', - 'Id', - 'R3'); - INSERT INTO O_RATTR - VALUES ("6fdefe7f-3f99-4c57-8009-8825066fa637", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "ee277c43-a11a-4ac9-bc82-2bb8a82fd437", - "419dc876-6997-44cb-a671-41acc466044a", - 1, - 'Id'); - INSERT INTO O_ATTR - VALUES ("6fdefe7f-3f99-4c57-8009-8825066fa637", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "f94afef8-ed1a-4b9b-bb29-36149617b861", - 'Other_Id', - '', - 'Other_', - 'Id', - 1, - "ba5eda7a-def5-0000-0000-000000000007", - '', - ''); - INSERT INTO O_ID - VALUES (0, - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); - INSERT INTO O_OIDA - VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 0, - 'Id'); - INSERT INTO O_ID - VALUES (1, - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); - INSERT INTO O_ID - VALUES (2, - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db"); - INSERT INTO PE_PE - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 4); - INSERT INTO GD_GE - VALUES ("210a115a-1c94-41b9-b811-2f86d59a6d31", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 21, - 0, - 'Test_Schema_Gen::Package::Class'); - INSERT INTO GD_SHP - VALUES ("210a115a-1c94-41b9-b811-2f86d59a6d31"); - INSERT INTO GD_NCS - VALUES ("210a115a-1c94-41b9-b811-2f86d59a6d31"); - INSERT INTO DIM_ND - VALUES (204.000000, - 156.000000, - "210a115a-1c94-41b9-b811-2f86d59a6d31"); - INSERT INTO DIM_GE - VALUES (4248.000000, - 3108.000000, - "210a115a-1c94-41b9-b811-2f86d59a6d31", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("210a115a-1c94-41b9-b811-2f86d59a6d31", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_CON - VALUES ("695fd096-c898-4f1e-9505-a036da9cf287", - 4344.000000, - 3264.000000, - "210a115a-1c94-41b9-b811-2f86d59a6d31"); - INSERT INTO DIM_CON - VALUES ("9e246129-772e-4e7e-9b8b-8dd68e80b065", - 4452.000000, - 3204.000000, - "210a115a-1c94-41b9-b811-2f86d59a6d31"); - INSERT INTO O_OBJ - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - 'Reflexive_Class', - 2, - 'Reflexive_Class', - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO O_REF - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 0, - "f94afef8-ed1a-4b9b-bb29-36149617b861", - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - "fb42f65b-cd41-411a-b022-a3cf2f481a99", - "fe0e8e09-edef-4be6-b8d7-0cb86053f640", - "64853c2b-640f-4738-a363-40892f8d4757", - "644754bf-f80c-4e00-9693-75d2dc620d54", - "00000000-0000-0000-0000-000000000000", - 0, - '', - 'Class', - 'Id', - 'R4'); - INSERT INTO O_RATTR - VALUES ("64853c2b-640f-4738-a363-40892f8d4757", - "68553234-715f-43ce-a1ce-4b93d6483cf5", - "f94afef8-ed1a-4b9b-bb29-36149617b861", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 1, - 'Id'); - INSERT INTO O_ATTR - VALUES ("64853c2b-640f-4738-a363-40892f8d4757", - "68553234-715f-43ce-a1ce-4b93d6483cf5", - "00000000-0000-0000-0000-000000000000", - 'Id', - '', - '', - 'Id', - 0, - "ba5eda7a-def5-0000-0000-000000000007", - '', - ''); - INSERT INTO O_ID - VALUES (0, - "68553234-715f-43ce-a1ce-4b93d6483cf5"); - INSERT INTO O_OIDA - VALUES ("64853c2b-640f-4738-a363-40892f8d4757", - "68553234-715f-43ce-a1ce-4b93d6483cf5", - 0, - 'Id'); - INSERT INTO O_ID - VALUES (1, - "68553234-715f-43ce-a1ce-4b93d6483cf5"); - INSERT INTO O_ID - VALUES (2, - "68553234-715f-43ce-a1ce-4b93d6483cf5"); - INSERT INTO PE_PE - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 4); - INSERT INTO GD_GE - VALUES ("ce5eb32f-79fe-419f-a56d-8c439930f96d", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "68553234-715f-43ce-a1ce-4b93d6483cf5", - 21, - 0, - 'Test_Schema_Gen::Package::Reflexive_Class'); - INSERT INTO GD_SHP - VALUES ("ce5eb32f-79fe-419f-a56d-8c439930f96d"); - INSERT INTO GD_NCS - VALUES ("ce5eb32f-79fe-419f-a56d-8c439930f96d"); - INSERT INTO DIM_ND - VALUES (204.000000, - 144.000000, - "ce5eb32f-79fe-419f-a56d-8c439930f96d"); - INSERT INTO DIM_GE - VALUES (4740.000000, - 3108.000000, - "ce5eb32f-79fe-419f-a56d-8c439930f96d", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("ce5eb32f-79fe-419f-a56d-8c439930f96d", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_CON - VALUES ("26b28f41-8966-4148-98f5-91f5505b5c92", - 4944.000000, - 3168.000000, - "ce5eb32f-79fe-419f-a56d-8c439930f96d"); - INSERT INTO DIM_CON - VALUES ("8d6716fa-92c3-46e4-8116-2ab556e15f4e", - 4824.000000, - 3108.000000, - "ce5eb32f-79fe-419f-a56d-8c439930f96d"); - INSERT INTO DIM_CON - VALUES ("6ef83aa3-47e5-43f8-bbfa-058e9a2032f5", - 4740.000000, - 3204.000000, - "ce5eb32f-79fe-419f-a56d-8c439930f96d"); - INSERT INTO R_REL - VALUES ("4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - 1, - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_ASSOC - VALUES ("4cfe4e7d-1919-4ef2-a4db-03c85c772b2a"); - INSERT INTO R_AONE - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "04310dd4-9b14-4b59-9a59-9e9dc5d99468", - 0, - 1, - 'other'); - INSERT INTO O_RTIDA - VALUES ("64853c2b-640f-4738-a363-40892f8d4757", - "68553234-715f-43ce-a1ce-4b93d6483cf5", - 0, - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "04310dd4-9b14-4b59-9a59-9e9dc5d99468"); - INSERT INTO R_RTO - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "04310dd4-9b14-4b59-9a59-9e9dc5d99468", - 0); - INSERT INTO R_OIR - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "04310dd4-9b14-4b59-9a59-9e9dc5d99468", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_AOTH - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "aeb07e49-c4f9-42dc-93d2-bf42134687b4", - 0, - 1, - 'one'); - INSERT INTO O_RTIDA - VALUES ("64853c2b-640f-4738-a363-40892f8d4757", - "68553234-715f-43ce-a1ce-4b93d6483cf5", - 0, - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "aeb07e49-c4f9-42dc-93d2-bf42134687b4"); - INSERT INTO R_RTO - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "aeb07e49-c4f9-42dc-93d2-bf42134687b4", - 0); - INSERT INTO R_OIR - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "aeb07e49-c4f9-42dc-93d2-bf42134687b4", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_ASSR - VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "bc18e358-1a8c-41d3-9ed5-5013ba99339c", - 0); - INSERT INTO R_RGO - VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "bc18e358-1a8c-41d3-9ed5-5013ba99339c"); - INSERT INTO R_OIR - VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "bc18e358-1a8c-41d3-9ed5-5013ba99339c", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO PE_PE - VALUES ("4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 9); - INSERT INTO GD_GE - VALUES ("7bd1fcbb-abc0-435a-af67-11079f2b1404", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - 24, - 0, - 'Test_Schema_Gen::Package::R1'); - INSERT INTO GD_CON - VALUES ("7bd1fcbb-abc0-435a-af67-11079f2b1404", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("6c59d5ff-5c41-4e5d-bec3-6a7608db86c3", - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - 1, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "6c59d5ff-5c41-4e5d-bec3-6a7608db86c3"); - INSERT INTO DIM_GE - VALUES (4954.000000, - 3178.000000, - "6c59d5ff-5c41-4e5d-bec3-6a7608db86c3", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("6c59d5ff-5c41-4e5d-bec3-6a7608db86c3", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("d3e5f1ba-bcff-47ab-92ae-0cce0d3a416b", - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - 3, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "d3e5f1ba-bcff-47ab-92ae-0cce0d3a416b"); - INSERT INTO DIM_GE - VALUES (4955.000000, - 3106.000000, - "d3e5f1ba-bcff-47ab-92ae-0cce0d3a416b", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("d3e5f1ba-bcff-47ab-92ae-0cce0d3a416b", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("a0e511d2-2174-4ad6-9f3b-9b3502929f8a", - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - 2, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "a0e511d2-2174-4ad6-9f3b-9b3502929f8a"); - INSERT INTO DIM_GE - VALUES (4834.000000, - 3081.000000, - "a0e511d2-2174-4ad6-9f3b-9b3502929f8a", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("a0e511d2-2174-4ad6-9f3b-9b3502929f8a", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_LS - VALUES ("6d15d3b0-8cad-49b7-9b9e-0db3cfa4ac05", - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "00000000-0000-0000-0000-000000000000", - "76c98002-bf63-4027-a727-d84c74c0d612", - "b4c22ed9-4a33-4629-976a-79db62426ea6"); - INSERT INTO GD_LS - VALUES ("b392c3bc-222a-4c84-8eef-e14c9442e110", - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "6d15d3b0-8cad-49b7-9b9e-0db3cfa4ac05", - "b4c22ed9-4a33-4629-976a-79db62426ea6", - "0d565025-f494-43bd-9bff-ae4bf62bc727"); - INSERT INTO GD_AOS - VALUES ("bc2759d4-1947-4b2d-b842-9faece1ecc82", - "b392c3bc-222a-4c84-8eef-e14c9442e110"); - INSERT INTO GD_LS - VALUES ("a911e69d-97ed-454e-a494-7828c0ba57ee", - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "b392c3bc-222a-4c84-8eef-e14c9442e110", - "0d565025-f494-43bd-9bff-ae4bf62bc727", - "53cd2b79-85ba-474d-9090-46ac0fe88f7f"); - INSERT INTO GD_LS - VALUES ("f148f99d-15ab-4bd3-9aab-42301a186edb", - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "a911e69d-97ed-454e-a494-7828c0ba57ee", - "53cd2b79-85ba-474d-9090-46ac0fe88f7f", - "a44fd264-30ef-463e-8524-c49407b83d3a"); - INSERT INTO DIM_WAY - VALUES ("76c98002-bf63-4027-a727-d84c74c0d612", - 4944.000000, - 3168.000000, - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_WAY - VALUES ("a44fd264-30ef-463e-8524-c49407b83d3a", - 4824.000000, - 3108.000000, - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "00000000-0000-0000-0000-000000000000", - "76c98002-bf63-4027-a727-d84c74c0d612"); - INSERT INTO DIM_WAY - VALUES ("b4c22ed9-4a33-4629-976a-79db62426ea6", - 4994.000000, - 3168.000000, - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_WAY - VALUES ("0d565025-f494-43bd-9bff-ae4bf62bc727", - 4994.000000, - 3059.000000, - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_WAY - VALUES ("53cd2b79-85ba-474d-9090-46ac0fe88f7f", - 4824.000000, - 3059.000000, - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "7bd1fcbb-abc0-435a-af67-11079f2b1404", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("7bd1fcbb-abc0-435a-af67-11079f2b1404", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_CON - VALUES ("bc2759d4-1947-4b2d-b842-9faece1ecc82", - 4994.000000, - 3059.000000, - "7bd1fcbb-abc0-435a-af67-11079f2b1404"); - INSERT INTO DIM_ED - VALUES ("26b28f41-8966-4148-98f5-91f5505b5c92", - "8d6716fa-92c3-46e4-8116-2ab556e15f4e", - "7bd1fcbb-abc0-435a-af67-11079f2b1404"); - INSERT INTO O_OBJ - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - 'Supertype', - 3, - 'Supertype', - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO O_REF - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - "419dc876-6997-44cb-a671-41acc466044a", - 0, - "ee277c43-a11a-4ac9-bc82-2bb8a82fd437", - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - "dfca81f1-7154-44ce-90e1-66b28dd10093", - "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b", - "990c9f1b-71a8-4246-af0e-de20a069e784", - "2e2f0436-ad26-449f-9fbc-dfcfc110c5c2", - "00000000-0000-0000-0000-000000000000", - 0, - '', - 'Subtype', - 'Id', - 'R2'); - INSERT INTO O_RATTR - VALUES ("990c9f1b-71a8-4246-af0e-de20a069e784", - "7ef7999e-5513-4984-8744-9c1a5cf46412", - "ee277c43-a11a-4ac9-bc82-2bb8a82fd437", - "419dc876-6997-44cb-a671-41acc466044a", - 1, - 'Id'); - INSERT INTO O_ATTR - VALUES ("990c9f1b-71a8-4246-af0e-de20a069e784", - "7ef7999e-5513-4984-8744-9c1a5cf46412", - "00000000-0000-0000-0000-000000000000", - 'Id', - '', - '', - 'Id', - 0, - "ba5eda7a-def5-0000-0000-000000000007", - '', - ''); - INSERT INTO O_ID - VALUES (0, - "7ef7999e-5513-4984-8744-9c1a5cf46412"); - INSERT INTO O_OIDA - VALUES ("990c9f1b-71a8-4246-af0e-de20a069e784", - "7ef7999e-5513-4984-8744-9c1a5cf46412", - 0, - 'Id'); - INSERT INTO O_ID - VALUES (1, - "7ef7999e-5513-4984-8744-9c1a5cf46412"); - INSERT INTO O_ID - VALUES (2, - "7ef7999e-5513-4984-8744-9c1a5cf46412"); - INSERT INTO PE_PE - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 4); - INSERT INTO GD_GE - VALUES ("79aca22c-cf37-4577-ba92-e707cb1a5a00", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "7ef7999e-5513-4984-8744-9c1a5cf46412", - 21, - 0, - 'Test_Schema_Gen::Package::Supertype'); - INSERT INTO GD_SHP - VALUES ("79aca22c-cf37-4577-ba92-e707cb1a5a00"); - INSERT INTO GD_NCS - VALUES ("79aca22c-cf37-4577-ba92-e707cb1a5a00"); - INSERT INTO DIM_ND - VALUES (204.000000, - 156.000000, - "79aca22c-cf37-4577-ba92-e707cb1a5a00"); - INSERT INTO DIM_GE - VALUES (4248.000000, - 3384.000000, - "79aca22c-cf37-4577-ba92-e707cb1a5a00", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("79aca22c-cf37-4577-ba92-e707cb1a5a00", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_CON - VALUES ("600d4cd2-9ac4-4b2a-9f34-04e21b7b9e2e", - 4452.000000, - 3456.000000, - "79aca22c-cf37-4577-ba92-e707cb1a5a00"); - INSERT INTO DIM_CON - VALUES ("5d0a2f7c-52a1-4a2a-b547-8698a26116d6", - 4344.000000, - 3384.000000, - "79aca22c-cf37-4577-ba92-e707cb1a5a00"); - INSERT INTO O_OBJ - VALUES ("419dc876-6997-44cb-a671-41acc466044a", - 'Subtype', - 4, - 'Subtype', - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO O_NBATTR - VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", - "419dc876-6997-44cb-a671-41acc466044a"); - INSERT INTO O_BATTR - VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", - "419dc876-6997-44cb-a671-41acc466044a"); - INSERT INTO O_ATTR - VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", - "419dc876-6997-44cb-a671-41acc466044a", - "00000000-0000-0000-0000-000000000000", - 'Id', - '', - '', - 'Id', - 0, - "ba5eda7a-def5-0000-0000-000000000005", - '', - ''); - INSERT INTO O_ID - VALUES (0, - "419dc876-6997-44cb-a671-41acc466044a"); - INSERT INTO O_OIDA - VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", - "419dc876-6997-44cb-a671-41acc466044a", - 0, - 'Id'); - INSERT INTO O_ID - VALUES (1, - "419dc876-6997-44cb-a671-41acc466044a"); - INSERT INTO O_ID - VALUES (2, - "419dc876-6997-44cb-a671-41acc466044a"); - INSERT INTO PE_PE - VALUES ("419dc876-6997-44cb-a671-41acc466044a", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 4); - INSERT INTO GD_GE - VALUES ("89013d61-2e68-484d-9cd1-5b8a45e822e5", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "419dc876-6997-44cb-a671-41acc466044a", - 21, - 0, - 'Test_Schema_Gen::Package::Subtype'); - INSERT INTO GD_SHP - VALUES ("89013d61-2e68-484d-9cd1-5b8a45e822e5"); - INSERT INTO GD_NCS - VALUES ("89013d61-2e68-484d-9cd1-5b8a45e822e5"); - INSERT INTO DIM_ND - VALUES (204.000000, - 144.000000, - "89013d61-2e68-484d-9cd1-5b8a45e822e5"); - INSERT INTO DIM_GE - VALUES (4752.000000, - 3384.000000, - "89013d61-2e68-484d-9cd1-5b8a45e822e5", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("89013d61-2e68-484d-9cd1-5b8a45e822e5", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_CON - VALUES ("31631bcb-2ac4-4d50-9642-9c8d19567a55", - 4752.000000, - 3456.000000, - "89013d61-2e68-484d-9cd1-5b8a45e822e5"); - INSERT INTO R_REL - VALUES ("ca692c8a-5b63-4c1c-b24e-c99f10a22360", - 2, - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_SUBSUP - VALUES ("ca692c8a-5b63-4c1c-b24e-c99f10a22360"); - INSERT INTO R_SUPER - VALUES ("419dc876-6997-44cb-a671-41acc466044a", - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b"); - INSERT INTO O_RTIDA - VALUES ("ee277c43-a11a-4ac9-bc82-2bb8a82fd437", - "419dc876-6997-44cb-a671-41acc466044a", - 0, - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b"); - INSERT INTO R_RTO - VALUES ("419dc876-6997-44cb-a671-41acc466044a", - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b", - 0); - INSERT INTO R_OIR - VALUES ("419dc876-6997-44cb-a671-41acc466044a", - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - "5b750bea-fdb5-42f2-83fe-dcbf34b0f73b", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_SUB - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - "dfca81f1-7154-44ce-90e1-66b28dd10093"); - INSERT INTO R_RGO - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - "dfca81f1-7154-44ce-90e1-66b28dd10093"); - INSERT INTO R_OIR - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - "dfca81f1-7154-44ce-90e1-66b28dd10093", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO PE_PE - VALUES ("ca692c8a-5b63-4c1c-b24e-c99f10a22360", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 9); - INSERT INTO GD_GE - VALUES ("4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "ca692c8a-5b63-4c1c-b24e-c99f10a22360", - 36, - 0, - 'Test_Schema_Gen::Package::R2'); - INSERT INTO GD_CON - VALUES ("4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("69027323-0038-4e79-a453-bd46450bee6c", - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - 1, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "69027323-0038-4e79-a453-bd46450bee6c"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "69027323-0038-4e79-a453-bd46450bee6c", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("69027323-0038-4e79-a453-bd46450bee6c", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("2c6c2ec4-539d-47d6-8227-45ab1e368f63", - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - 3, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "2c6c2ec4-539d-47d6-8227-45ab1e368f63"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "2c6c2ec4-539d-47d6-8227-45ab1e368f63", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("2c6c2ec4-539d-47d6-8227-45ab1e368f63", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("2d996854-73d5-49fa-bcaa-c1ad545c06f7", - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - 2, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "2d996854-73d5-49fa-bcaa-c1ad545c06f7"); - INSERT INTO DIM_GE - VALUES (4690.000000, - 3466.000000, - "2d996854-73d5-49fa-bcaa-c1ad545c06f7", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("2d996854-73d5-49fa-bcaa-c1ad545c06f7", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_LS - VALUES ("fd2cbf3c-464d-4edf-b0e6-eddf3419f6a8", - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - "00000000-0000-0000-0000-000000000000", - "084b93a5-1703-4f1e-9919-78c736fea417", - "f7ffc992-9a46-40f4-be36-2f23fd77226b"); - INSERT INTO GD_AOS - VALUES ("e1eb1982-33ca-4f6d-a252-27f7a81ce028", - "fd2cbf3c-464d-4edf-b0e6-eddf3419f6a8"); - INSERT INTO DIM_WAY - VALUES ("084b93a5-1703-4f1e-9919-78c736fea417", - 4752.000000, - 3456.000000, - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_WAY - VALUES ("f7ffc992-9a46-40f4-be36-2f23fd77226b", - 4680.000000, - 3456.000000, - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - "00000000-0000-0000-0000-000000000000", - "084b93a5-1703-4f1e-9919-78c736fea417"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("4de2c013-f1a6-4eda-b88d-44ce07f25e7e", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_CON - VALUES ("e1eb1982-33ca-4f6d-a252-27f7a81ce028", - 4680.000000, - 3456.000000, - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e"); - INSERT INTO DIM_ED - VALUES ("31631bcb-2ac4-4d50-9642-9c8d19567a55", - "00000000-0000-0000-0000-000000000000", - "4de2c013-f1a6-4eda-b88d-44ce07f25e7e"); - INSERT INTO GD_GE - VALUES ("efbe981c-68c9-40a1-a16f-6c7ccebdc003", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "dfca81f1-7154-44ce-90e1-66b28dd10093", - 35, - 0, - 'Test_Schema_Gen::Package::R2::Supertype'); - INSERT INTO GD_CON - VALUES ("efbe981c-68c9-40a1-a16f-6c7ccebdc003", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("a0df184b-f045-4eb9-9976-f6b51a8154fa", - "efbe981c-68c9-40a1-a16f-6c7ccebdc003", - 1, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "a0df184b-f045-4eb9-9976-f6b51a8154fa"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "a0df184b-f045-4eb9-9976-f6b51a8154fa", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("a0df184b-f045-4eb9-9976-f6b51a8154fa", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("d2017075-da48-487b-834e-be43bb16b1a1", - "efbe981c-68c9-40a1-a16f-6c7ccebdc003", - 3, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "d2017075-da48-487b-834e-be43bb16b1a1"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "d2017075-da48-487b-834e-be43bb16b1a1", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("d2017075-da48-487b-834e-be43bb16b1a1", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("a847a23e-35ae-4a70-863e-a003fe46297e", - "efbe981c-68c9-40a1-a16f-6c7ccebdc003", - 2, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "a847a23e-35ae-4a70-863e-a003fe46297e"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "a847a23e-35ae-4a70-863e-a003fe46297e", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("a847a23e-35ae-4a70-863e-a003fe46297e", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_LS - VALUES ("bf5f42ff-588f-4a88-92d8-42f6820f6ecb", - "efbe981c-68c9-40a1-a16f-6c7ccebdc003", - "00000000-0000-0000-0000-000000000000", - "9e96af85-25de-44ec-bf21-b42b433ebffa", - "ebdb9a6d-6f16-43fc-834d-2068c9a99b92"); - INSERT INTO DIM_WAY - VALUES ("9e96af85-25de-44ec-bf21-b42b433ebffa", - 4452.000000, - 3456.000000, - "efbe981c-68c9-40a1-a16f-6c7ccebdc003", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_WAY - VALUES ("ebdb9a6d-6f16-43fc-834d-2068c9a99b92", - 4680.000000, - 3456.000000, - "efbe981c-68c9-40a1-a16f-6c7ccebdc003", - "00000000-0000-0000-0000-000000000000", - "9e96af85-25de-44ec-bf21-b42b433ebffa"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "efbe981c-68c9-40a1-a16f-6c7ccebdc003", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("efbe981c-68c9-40a1-a16f-6c7ccebdc003", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ED - VALUES ("600d4cd2-9ac4-4b2a-9f34-04e21b7b9e2e", - "e1eb1982-33ca-4f6d-a252-27f7a81ce028", - "efbe981c-68c9-40a1-a16f-6c7ccebdc003"); - INSERT INTO R_REL - VALUES ("3ae58522-7f90-48b3-85b4-35df51c6192a", - 3, - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_SIMP - VALUES ("3ae58522-7f90-48b3-85b4-35df51c6192a"); - INSERT INTO R_FORM - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "3ae58522-7f90-48b3-85b4-35df51c6192a", - "b3f14c88-fd1b-4aa8-a5ae-15d202bee5d6", - 1, - 1, - ''); - INSERT INTO R_RGO - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "3ae58522-7f90-48b3-85b4-35df51c6192a", - "b3f14c88-fd1b-4aa8-a5ae-15d202bee5d6"); - INSERT INTO R_OIR - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "3ae58522-7f90-48b3-85b4-35df51c6192a", - "b3f14c88-fd1b-4aa8-a5ae-15d202bee5d6", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_PART - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - "3ae58522-7f90-48b3-85b4-35df51c6192a", - "9d8b6602-75c8-44b6-ac4f-9da04573b957", - 0, - 0, - ''); - INSERT INTO O_RTIDA - VALUES ("990c9f1b-71a8-4246-af0e-de20a069e784", - "7ef7999e-5513-4984-8744-9c1a5cf46412", - 0, - "3ae58522-7f90-48b3-85b4-35df51c6192a", - "9d8b6602-75c8-44b6-ac4f-9da04573b957"); - INSERT INTO R_RTO - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - "3ae58522-7f90-48b3-85b4-35df51c6192a", - "9d8b6602-75c8-44b6-ac4f-9da04573b957", - 0); - INSERT INTO R_OIR - VALUES ("7ef7999e-5513-4984-8744-9c1a5cf46412", - "3ae58522-7f90-48b3-85b4-35df51c6192a", - "9d8b6602-75c8-44b6-ac4f-9da04573b957", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO PE_PE - VALUES ("3ae58522-7f90-48b3-85b4-35df51c6192a", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 9); - INSERT INTO GD_GE - VALUES ("6ba08f56-c2f9-4a88-9b58-f704f6854e52", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "3ae58522-7f90-48b3-85b4-35df51c6192a", - 24, - 0, - 'Test_Schema_Gen::Package::R3'); - INSERT INTO GD_CON - VALUES ("6ba08f56-c2f9-4a88-9b58-f704f6854e52", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("8dfb356b-0d77-46ea-8855-a5ba37d8ff15", - "6ba08f56-c2f9-4a88-9b58-f704f6854e52", - 1, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "8dfb356b-0d77-46ea-8855-a5ba37d8ff15"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "8dfb356b-0d77-46ea-8855-a5ba37d8ff15", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("8dfb356b-0d77-46ea-8855-a5ba37d8ff15", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("3c1d46f9-ab6e-490a-a8e3-162d318c2012", - "6ba08f56-c2f9-4a88-9b58-f704f6854e52", - 3, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "3c1d46f9-ab6e-490a-a8e3-162d318c2012"); - INSERT INTO DIM_GE - VALUES (4305.000000, - 3316.000000, - "3c1d46f9-ab6e-490a-a8e3-162d318c2012", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("3c1d46f9-ab6e-490a-a8e3-162d318c2012", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("7de675d0-3599-4597-af10-f95c19e4b88d", - "6ba08f56-c2f9-4a88-9b58-f704f6854e52", - 2, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "7de675d0-3599-4597-af10-f95c19e4b88d"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "7de675d0-3599-4597-af10-f95c19e4b88d", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("7de675d0-3599-4597-af10-f95c19e4b88d", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_LS - VALUES ("fe7c1f3d-0d73-4636-a75c-7c422e81cea4", - "6ba08f56-c2f9-4a88-9b58-f704f6854e52", - "00000000-0000-0000-0000-000000000000", - "2b37073b-2797-4ce1-a214-89176c2e1eab", - "39bb5949-4f3b-4816-b225-70804b654aa0"); - INSERT INTO DIM_WAY - VALUES ("2b37073b-2797-4ce1-a214-89176c2e1eab", - 4344.000000, - 3264.000000, - "6ba08f56-c2f9-4a88-9b58-f704f6854e52", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_WAY - VALUES ("39bb5949-4f3b-4816-b225-70804b654aa0", - 4344.000000, - 3384.000000, - "6ba08f56-c2f9-4a88-9b58-f704f6854e52", - "00000000-0000-0000-0000-000000000000", - "2b37073b-2797-4ce1-a214-89176c2e1eab"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "6ba08f56-c2f9-4a88-9b58-f704f6854e52", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("6ba08f56-c2f9-4a88-9b58-f704f6854e52", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ED - VALUES ("695fd096-c898-4f1e-9505-a036da9cf287", - "5d0a2f7c-52a1-4a2a-b547-8698a26116d6", - "6ba08f56-c2f9-4a88-9b58-f704f6854e52"); - INSERT INTO R_REL - VALUES ("131ece0d-48e6-40d3-a3c2-baac77f9f32c", - 4, - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_SIMP - VALUES ("131ece0d-48e6-40d3-a3c2-baac77f9f32c"); - INSERT INTO R_PART - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - "fe0e8e09-edef-4be6-b8d7-0cb86053f640", - 0, - 0, - ''); - INSERT INTO O_RTIDA - VALUES ("f94afef8-ed1a-4b9b-bb29-36149617b861", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 0, - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - "fe0e8e09-edef-4be6-b8d7-0cb86053f640"); - INSERT INTO R_RTO - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - "fe0e8e09-edef-4be6-b8d7-0cb86053f640", - 0); - INSERT INTO R_OIR - VALUES ("3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - "fe0e8e09-edef-4be6-b8d7-0cb86053f640", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO R_FORM - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - "fb42f65b-cd41-411a-b022-a3cf2f481a99", - 1, - 1, - ''); - INSERT INTO R_RGO - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - "fb42f65b-cd41-411a-b022-a3cf2f481a99"); - INSERT INTO R_OIR - VALUES ("68553234-715f-43ce-a1ce-4b93d6483cf5", - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - "fb42f65b-cd41-411a-b022-a3cf2f481a99", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO PE_PE - VALUES ("131ece0d-48e6-40d3-a3c2-baac77f9f32c", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 9); - INSERT INTO GD_GE - VALUES ("a099b13e-ed73-489b-a170-610bc3665d56", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "131ece0d-48e6-40d3-a3c2-baac77f9f32c", - 24, - 0, - 'Test_Schema_Gen::Package::R4'); - INSERT INTO GD_CON - VALUES ("a099b13e-ed73-489b-a170-610bc3665d56", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("35f54702-d6fc-47af-908b-155701489c82", - "a099b13e-ed73-489b-a170-610bc3665d56", - 1, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "35f54702-d6fc-47af-908b-155701489c82"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "35f54702-d6fc-47af-908b-155701489c82", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("35f54702-d6fc-47af-908b-155701489c82", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("09c808ad-4cd1-463a-abdf-af47037a9994", - "a099b13e-ed73-489b-a170-610bc3665d56", - 3, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "09c808ad-4cd1-463a-abdf-af47037a9994"); - INSERT INTO DIM_GE - VALUES (4589.000000, - 3162.000000, - "09c808ad-4cd1-463a-abdf-af47037a9994", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("09c808ad-4cd1-463a-abdf-af47037a9994", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("ee5cc3d8-26bd-4f7f-8f28-7af26484d739", - "a099b13e-ed73-489b-a170-610bc3665d56", - 2, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "ee5cc3d8-26bd-4f7f-8f28-7af26484d739"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "ee5cc3d8-26bd-4f7f-8f28-7af26484d739", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("ee5cc3d8-26bd-4f7f-8f28-7af26484d739", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_LS - VALUES ("62c05ce8-3657-46de-92ab-5d263d9e62b1", - "a099b13e-ed73-489b-a170-610bc3665d56", - "00000000-0000-0000-0000-000000000000", - "7d8f35b5-b078-4369-841d-04f4476389d4", - "a69e3281-962a-43cf-977b-e541f46f73dc"); - INSERT INTO DIM_WAY - VALUES ("7d8f35b5-b078-4369-841d-04f4476389d4", - 4452.000000, - 3204.000000, - "a099b13e-ed73-489b-a170-610bc3665d56", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_WAY - VALUES ("a69e3281-962a-43cf-977b-e541f46f73dc", - 4740.000000, - 3204.000000, - "a099b13e-ed73-489b-a170-610bc3665d56", - "00000000-0000-0000-0000-000000000000", - "7d8f35b5-b078-4369-841d-04f4476389d4"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "a099b13e-ed73-489b-a170-610bc3665d56", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("a099b13e-ed73-489b-a170-610bc3665d56", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ED - VALUES ("9e246129-772e-4e7e-9b8b-8dd68e80b065", - "6ef83aa3-47e5-43f8-bbfa-058e9a2032f5", - "a099b13e-ed73-489b-a170-610bc3665d56"); - INSERT INTO O_OBJ - VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - 'Assoc_Class', - 5, - 'Assoc_Class', - '', - "00000000-0000-0000-0000-000000000000"); - INSERT INTO O_REF - VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "68553234-715f-43ce-a1ce-4b93d6483cf5", - 0, - "64853c2b-640f-4738-a363-40892f8d4757", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "bc18e358-1a8c-41d3-9ed5-5013ba99339c", - "04310dd4-9b14-4b59-9a59-9e9dc5d99468", - "9011bff4-2a98-4e04-956a-40afb80db518", - "da2bbbb4-1f61-4f3d-bd41-c13d075b9de3", - "00000000-0000-0000-0000-000000000000", - 0, - '', - 'Reflexive_Class', - 'Id', - 'R1.''other'''); - INSERT INTO O_RATTR - VALUES ("9011bff4-2a98-4e04-956a-40afb80db518", - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "f94afef8-ed1a-4b9b-bb29-36149617b861", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 1, - 'Id'); - INSERT INTO O_ATTR - VALUES ("9011bff4-2a98-4e04-956a-40afb80db518", - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "00000000-0000-0000-0000-000000000000", - 'Other_Id', - '', - 'Other_', - 'Id', - 1, - "ba5eda7a-def5-0000-0000-000000000007", - '', - ''); - INSERT INTO O_REF - VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "68553234-715f-43ce-a1ce-4b93d6483cf5", - 0, - "64853c2b-640f-4738-a363-40892f8d4757", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - "bc18e358-1a8c-41d3-9ed5-5013ba99339c", - "aeb07e49-c4f9-42dc-93d2-bf42134687b4", - "86f8146a-5d3f-4ff0-9119-6338bcb1d53f", - "fc3810e5-50ec-41f2-9998-27236801e3f4", - "00000000-0000-0000-0000-000000000000", - 0, - '', - 'Reflexive_Class', - 'Id', - 'R1.''one'''); - INSERT INTO O_RATTR - VALUES ("86f8146a-5d3f-4ff0-9119-6338bcb1d53f", - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "f94afef8-ed1a-4b9b-bb29-36149617b861", - "3beb857e-8f3e-41c8-a1d5-e3dd66d836db", - 1, - 'Id'); - INSERT INTO O_ATTR - VALUES ("86f8146a-5d3f-4ff0-9119-6338bcb1d53f", - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - "9011bff4-2a98-4e04-956a-40afb80db518", - 'One_Id', - '', - 'One_', - 'Id', - 1, - "ba5eda7a-def5-0000-0000-000000000007", - '', - ''); - INSERT INTO O_ID - VALUES (0, - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3"); - INSERT INTO O_OIDA - VALUES ("9011bff4-2a98-4e04-956a-40afb80db518", - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - 0, - 'Other_Id'); - INSERT INTO O_OIDA - VALUES ("86f8146a-5d3f-4ff0-9119-6338bcb1d53f", - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - 0, - 'One_Id'); - INSERT INTO O_ID - VALUES (1, - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3"); - INSERT INTO O_ID - VALUES (2, - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3"); - INSERT INTO PE_PE - VALUES ("bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - 1, - "b48a6732-c56c-4e98-8773-afe91fcb30e4", - "00000000-0000-0000-0000-000000000000", - 4); - INSERT INTO GD_GE - VALUES ("ff43aac8-2d20-4e64-b96a-4b5499633df3", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "bd62e326-bbc2-4c55-8ee1-69a59e5146d3", - 21, - 0, - 'Test_Schema_Gen::Package::Assoc_Class'); - INSERT INTO GD_SHP - VALUES ("ff43aac8-2d20-4e64-b96a-4b5499633df3"); - INSERT INTO GD_NCS - VALUES ("ff43aac8-2d20-4e64-b96a-4b5499633df3"); - INSERT INTO DIM_ND - VALUES (204.000000, - 144.000000, - "ff43aac8-2d20-4e64-b96a-4b5499633df3"); - INSERT INTO DIM_GE - VALUES (5052.000000, - 2892.000000, - "ff43aac8-2d20-4e64-b96a-4b5499633df3", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("ff43aac8-2d20-4e64-b96a-4b5499633df3", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_CON - VALUES ("d8027605-c5c5-4f0f-9c1a-18011924e4f7", - 5052.000000, - 3034.000000, - "ff43aac8-2d20-4e64-b96a-4b5499633df3"); - INSERT INTO GD_GE - VALUES ("df68e95e-64e3-4f29-a097-a408048a4399", - "1344bf4e-528f-4e2b-b8cc-4db9e48e1967", - "4cfe4e7d-1919-4ef2-a4db-03c85c772b2a", - 34, - 0, - 'Test_Schema_Gen::Package::R1::Assoc_Class'); - INSERT INTO GD_CON - VALUES ("df68e95e-64e3-4f29-a097-a408048a4399", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("3867a3c3-9d8a-4b31-80c0-ab20ec032c14", - "df68e95e-64e3-4f29-a097-a408048a4399", - 1, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "3867a3c3-9d8a-4b31-80c0-ab20ec032c14"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "3867a3c3-9d8a-4b31-80c0-ab20ec032c14", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("3867a3c3-9d8a-4b31-80c0-ab20ec032c14", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("b4bd7874-bb29-4c55-ad5a-dd0c39ffa704", - "df68e95e-64e3-4f29-a097-a408048a4399", - 3, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "b4bd7874-bb29-4c55-ad5a-dd0c39ffa704"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "b4bd7874-bb29-4c55-ad5a-dd0c39ffa704", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("b4bd7874-bb29-4c55-ad5a-dd0c39ffa704", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_CTXT - VALUES ("654909ae-f193-4496-8254-34f8d3909641", - "df68e95e-64e3-4f29-a097-a408048a4399", - 2, - 0.000000, - 0.000000); - INSERT INTO DIM_ND - VALUES (0.000000, - 0.000000, - "654909ae-f193-4496-8254-34f8d3909641"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "654909ae-f193-4496-8254-34f8d3909641", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("654909ae-f193-4496-8254-34f8d3909641", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO GD_LS - VALUES ("e8c9a444-4942-4b30-bb2e-88684284d17d", - "df68e95e-64e3-4f29-a097-a408048a4399", - "00000000-0000-0000-0000-000000000000", - "c71b6092-0b55-4fc3-8365-b0c8c301d4e7", - "5a6aa846-482c-45d3-8da2-0b08a214e22b"); - INSERT INTO DIM_WAY - VALUES ("c71b6092-0b55-4fc3-8365-b0c8c301d4e7", - 5052.000000, - 3034.000000, - "df68e95e-64e3-4f29-a097-a408048a4399", - "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_WAY - VALUES ("5a6aa846-482c-45d3-8da2-0b08a214e22b", - 4994.000000, - 3059.000000, - "df68e95e-64e3-4f29-a097-a408048a4399", - "00000000-0000-0000-0000-000000000000", - "c71b6092-0b55-4fc3-8365-b0c8c301d4e7"); - INSERT INTO DIM_GE - VALUES (0.000000, - 0.000000, - "df68e95e-64e3-4f29-a097-a408048a4399", - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ELE - VALUES ("df68e95e-64e3-4f29-a097-a408048a4399", - 0, - "00000000-0000-0000-0000-000000000000"); - INSERT INTO DIM_ED - VALUES ("d8027605-c5c5-4f0f-9c1a-18011924e4f7", - "bc2759d4-1947-4b2d-b842-9faece1ecc82", - "df68e95e-64e3-4f29-a097-a408048a4399"); - """ - - def test_simple_class(self): - l = bridgepoint.ModelLoader() - l.input(self.__doc__, '') - m = l.build_component() - - cls = m.new('Class') - self.assertTrue(cls.Id) - - supertype = m.new('Supertype') - subtype = m.new('Subtype') - self.assertTrue(xtuml.relate(supertype, subtype, 2)) - self.assertTrue(xtuml.relate(supertype, cls, 3)) - self.assertTrue(supertype.Id) - self.assertTrue(subtype.Id) - - reflexive_class1 = m.new('Reflexive_Class') - reflexive_class2 = m.new('Reflexive_Class') - self.assertTrue(xtuml.relate(reflexive_class1, cls, 4)) - self.assertTrue(xtuml.relate(reflexive_class2, cls, 4)) - - assoc_class = m.new('Assoc_Class') - self.assertTrue(xtuml.relate(reflexive_class1, assoc_class, 1, 'one')) - self.assertTrue(xtuml.relate(reflexive_class2, assoc_class, 1, 'other')) - - -if __name__ == "__main__": - unittest.main() - diff --git a/tests/test_bridgepoint/test_gen_schema.py b/tests/test_bridgepoint/test_gen_schema.py new file mode 100644 index 0000000..83bb94f --- /dev/null +++ b/tests/test_bridgepoint/test_gen_schema.py @@ -0,0 +1,77 @@ +# encoding: utf-8 +# Copyright (C) 2017 John Törnblom +# +# This file is part of pyxtuml. +# +# pyxtuml is free software: you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version. +# +# pyxtuml is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with pyxtuml. If not, see . + +import unittest +import bridgepoint.gen_xsd_schema +import xtuml +import tempfile +import os + +import xml.etree.ElementTree as ET + + +simple_model = (os.path.dirname(__file__) + os.path.sep + os.path.pardir + + os.path.sep + 'resources' + os.path.sep + 'Simple_Model.xtuml') + + +class TestSchemaGen(unittest.TestCase): + + def test_build_component(self): + l = bridgepoint.ModelLoader() + l.filename_input(simple_model) + m = l.build_component() + + cls = m.new('Class') + self.assertTrue(cls.Id) + + supertype = m.new('Supertype') + subtype = m.new('Subtype') + self.assertTrue(xtuml.relate(supertype, subtype, 2)) + self.assertTrue(xtuml.relate(supertype, cls, 3)) + self.assertTrue(supertype.Id) + self.assertTrue(subtype.Id) + + reflexive_class1 = m.new('Reflexive_Class') + reflexive_class2 = m.new('Reflexive_Class') + self.assertTrue(xtuml.relate(reflexive_class1, cls, 4)) + self.assertTrue(xtuml.relate(reflexive_class2, cls, 4)) + + assoc_class = m.new('Assoc_Class') + self.assertTrue(xtuml.relate(reflexive_class1, assoc_class, 1, 'one')) + self.assertTrue(xtuml.relate(reflexive_class2, assoc_class, 1, 'other')) + + def test_gen_xsd(self): + outfile = tempfile.mktemp() + args = ['-c', 'Comp', '-o', outfile, simple_model] + bridgepoint.gen_xsd_schema.main(args) + + ns = 'http://www.w3.org/2001/XMLSchema' + tree = ET.parse(outfile) + + self.assertTrue(tree.findall(".//{%s}simpleType[@name='boolean']" % ns)) + self.assertTrue(tree.findall(".//{%s}simpleType[@name='integer']" % ns)) + self.assertTrue(tree.findall(".//{%s}simpleType[@name='real']" % ns)) + self.assertTrue(tree.findall(".//{%s}simpleType[@name='string']" % ns)) + self.assertTrue(tree.findall(".//{%s}simpleType[@name='unique_id']" % ns)) + self.assertTrue(tree.findall(".//{%s}element[@name='Comp']" % ns)) + self.assertTrue(tree.findall(".//{%s}attribute[@name='One_Id']" % ns)) + + +if __name__ == "__main__": + unittest.main() + From bcf47b88cefab23911b15ae35d2ce9b6075a238d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Tue, 20 Jun 2017 23:40:31 +0200 Subject: [PATCH 211/216] test xsd gen for enums and user defined types --- tests/resources/Simple_Model.xtuml | 156 ++++++++++++++++++++-- tests/test_bridgepoint/test_gen_schema.py | 3 + 2 files changed, 146 insertions(+), 13 deletions(-) diff --git a/tests/resources/Simple_Model.xtuml b/tests/resources/Simple_Model.xtuml index 6b32d75..9567a6c 100644 --- a/tests/resources/Simple_Model.xtuml +++ b/tests/resources/Simple_Model.xtuml @@ -1,4 +1,5 @@ -- root-types-contained: Package_c +-- generics -- BP 7.1 content: StreamData syschar: 3 persistence-version: 7.1.6 INSERT INTO EP_PKG @@ -105,7 +106,7 @@ INSERT INTO GD_SHP INSERT INTO GD_CTR VALUES ("7a297681-11a6-46a0-8a16-a61b98527b43"); INSERT INTO DIM_ND - VALUES (1032.000000, + VALUES (1252.000000, 800.000000, "7a297681-11a6-46a0-8a16-a61b98527b43"); INSERT INTO DIM_GE @@ -141,6 +142,30 @@ INSERT INTO DIM_ELE VALUES ("e616b48e-b550-413d-a257-9c1d0eaed50b", 0, "7a297681-11a6-46a0-8a16-a61b98527b43"); +INSERT INTO GD_GE + VALUES ("94683010-9ff7-422c-873d-bfb1b78eaa16", + "a402a622-5f10-40a2-93d2-9215b3bc2c30", + "ae10ad4d-0705-48ca-8238-0a8c27848d15", + 108, + 0, + 'Simple_Model::Components::Comp::Types'); +INSERT INTO GD_SHP + VALUES ("94683010-9ff7-422c-873d-bfb1b78eaa16"); +INSERT INTO GD_NCS + VALUES ("94683010-9ff7-422c-873d-bfb1b78eaa16"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "94683010-9ff7-422c-873d-bfb1b78eaa16"); +INSERT INTO DIM_GE + VALUES (5140.000000, + 3100.000000, + "94683010-9ff7-422c-873d-bfb1b78eaa16", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("94683010-9ff7-422c-873d-bfb1b78eaa16", + 0, + "7a297681-11a6-46a0-8a16-a61b98527b43"); INSERT INTO DIM_DIA VALUES ("a402a622-5f10-40a2-93d2-9215b3bc2c30", '', @@ -1582,35 +1607,140 @@ INSERT INTO O_ID VALUES (2, "4e5b0f0d-7374-4ae3-946e-64514d3e3a3e"); INSERT INTO PE_PE - VALUES ("a1a20979-675e-45d5-9f2c-a1d049b343f9", + VALUES ("ae10ad4d-0705-48ca-8238-0a8c27848d15", 1, "00000000-0000-0000-0000-000000000000", - "00000000-0000-0000-0000-000000000000", + "109c0a69-f495-4920-9153-8764103be522", 7); -INSERT INTO GD_GE - VALUES ("942e37f1-4ef0-469d-99e7-1d6f3bb334be", - "8b04766a-7ad4-4dc0-886d-aef6a40581a8", - "a1a20979-675e-45d5-9f2c-a1d049b343f9", +INSERT INTO EP_PKG + VALUES ("ae10ad4d-0705-48ca-8238-0a8c27848d15", + "00000000-0000-0000-0000-000000000000", + "7aa5dd78-9a77-4aa5-9d43-3480f45e8803", + 'Types', + '', + 0); +INSERT INTO GD_MD + VALUES ("ce1980f7-0ec3-4d84-8c7b-5bccb234aa3a", + 112, + "ae10ad4d-0705-48ca-8238-0a8c27848d15", 108, 0, - 'Simple_Model::Components'); + 0, + 1, + 1, + 1, + 12, + 1, + 0, + 0, + 200, + 150, + 0, + '', + 'Simple_Model::Components::Comp::Types'); +INSERT INTO GD_GE + VALUES ("46866705-ebd3-4368-9918-0d33e8eac121", + "ce1980f7-0ec3-4d84-8c7b-5bccb234aa3a", + "2cf50950-5c55-443b-9baa-ae2a45f53cfe", + 51, + 0, + 'Simple_Model::Components::Comp::Types::My_Integer'); INSERT INTO GD_SHP - VALUES ("942e37f1-4ef0-469d-99e7-1d6f3bb334be"); + VALUES ("46866705-ebd3-4368-9918-0d33e8eac121"); INSERT INTO GD_NCS - VALUES ("942e37f1-4ef0-469d-99e7-1d6f3bb334be"); + VALUES ("46866705-ebd3-4368-9918-0d33e8eac121"); INSERT INTO DIM_ND VALUES (200.000000, 150.000000, - "942e37f1-4ef0-469d-99e7-1d6f3bb334be"); + "46866705-ebd3-4368-9918-0d33e8eac121"); INSERT INTO DIM_GE VALUES (0.000000, 0.000000, - "942e37f1-4ef0-469d-99e7-1d6f3bb334be", + "46866705-ebd3-4368-9918-0d33e8eac121", "00000000-0000-0000-0000-000000000000"); INSERT INTO DIM_ELE - VALUES ("942e37f1-4ef0-469d-99e7-1d6f3bb334be", + VALUES ("46866705-ebd3-4368-9918-0d33e8eac121", 0, "00000000-0000-0000-0000-000000000000"); +INSERT INTO GD_GE + VALUES ("3948cb3e-d617-4710-848b-1e3ac706f2ea", + "ce1980f7-0ec3-4d84-8c7b-5bccb234aa3a", + "abc9c677-4fd5-4409-ada6-7ce59a014a81", + 52, + 0, + 'Simple_Model::Components::Comp::Types::My_Enum'); +INSERT INTO GD_SHP + VALUES ("3948cb3e-d617-4710-848b-1e3ac706f2ea"); +INSERT INTO GD_NCS + VALUES ("3948cb3e-d617-4710-848b-1e3ac706f2ea"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "3948cb3e-d617-4710-848b-1e3ac706f2ea"); +INSERT INTO DIM_GE + VALUES (220.000000, + 0.000000, + "3948cb3e-d617-4710-848b-1e3ac706f2ea", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + VALUES ("3948cb3e-d617-4710-848b-1e3ac706f2ea", + 0, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_DIA + VALUES ("ce1980f7-0ec3-4d84-8c7b-5bccb234aa3a", + '', + 1.000000, + 4000.000000, + 3000.000000, + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("2cf50950-5c55-443b-9baa-ae2a45f53cfe", + 1, + "ae10ad4d-0705-48ca-8238-0a8c27848d15", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("2cf50950-5c55-443b-9baa-ae2a45f53cfe", + "00000000-0000-0000-0000-000000000000", + 'My_Integer', + '', + ''); +INSERT INTO S_UDT + VALUES ("2cf50950-5c55-443b-9baa-ae2a45f53cfe", + "ba5eda7a-def5-0000-0000-000000000002", + 0); +INSERT INTO PE_PE + VALUES ("abc9c677-4fd5-4409-ada6-7ce59a014a81", + 1, + "ae10ad4d-0705-48ca-8238-0a8c27848d15", + "00000000-0000-0000-0000-000000000000", + 3); +INSERT INTO S_DT + VALUES ("abc9c677-4fd5-4409-ada6-7ce59a014a81", + "00000000-0000-0000-0000-000000000000", + 'My_Enum', + '', + ''); +INSERT INTO S_EDT + VALUES ("abc9c677-4fd5-4409-ada6-7ce59a014a81"); +INSERT INTO S_ENUM + VALUES ("43a43df2-3bd6-4ba1-8f9b-8e7cb7c3b765", + 'E2', + '', + "abc9c677-4fd5-4409-ada6-7ce59a014a81", + "901c86cb-92a2-4fdb-8ff5-2f3ebec74e54"); +INSERT INTO S_ENUM + VALUES ("901c86cb-92a2-4fdb-8ff5-2f3ebec74e54", + 'E1', + '', + "abc9c677-4fd5-4409-ada6-7ce59a014a81", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO PE_PE + VALUES ("a1a20979-675e-45d5-9f2c-a1d049b343f9", + 1, + "00000000-0000-0000-0000-000000000000", + "00000000-0000-0000-0000-000000000000", + 7); INSERT INTO S_SYS_PROXY VALUES ("7aa5dd78-9a77-4aa5-9d43-3480f45e8803", 'Simple_Model', diff --git a/tests/test_bridgepoint/test_gen_schema.py b/tests/test_bridgepoint/test_gen_schema.py index 83bb94f..e6e8b62 100644 --- a/tests/test_bridgepoint/test_gen_schema.py +++ b/tests/test_bridgepoint/test_gen_schema.py @@ -68,6 +68,9 @@ def test_gen_xsd(self): self.assertTrue(tree.findall(".//{%s}simpleType[@name='real']" % ns)) self.assertTrue(tree.findall(".//{%s}simpleType[@name='string']" % ns)) self.assertTrue(tree.findall(".//{%s}simpleType[@name='unique_id']" % ns)) + self.assertTrue(tree.findall(".//{%s}simpleType[@name='My_Enum']" % ns)) + self.assertTrue(tree.findall(".//{%s}enumeration[@value='E1']" % ns)) + self.assertTrue(tree.findall(".//{%s}simpleType[@name='My_Integer']" % ns)) self.assertTrue(tree.findall(".//{%s}element[@name='Comp']" % ns)) self.assertTrue(tree.findall(".//{%s}attribute[@name='One_Id']" % ns)) From df89e96a96a9151e01d55e0afe6e22acc6e352fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 21 Jul 2017 23:10:25 +0200 Subject: [PATCH 212/216] test: add cases with strings escaped at the start and end of a string --- tests/test_xtuml/test_load.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/test_xtuml/test_load.py b/tests/test_xtuml/test_load.py index 695ff98..26f636a 100644 --- a/tests/test_xtuml/test_load.py +++ b/tests/test_xtuml/test_load.py @@ -175,6 +175,26 @@ def test_insert_escaped_string(self, m): val = m.select_any('X') self.assertTrue(val is not None) self.assertEqual(val.Id, "TE'ST") + + @load_docstring + def test_insert_escaped_string_beginning(self, m): + """ + CREATE TABLE X (Id STRING); + INSERT INTO X VALUES ('''TEST'); + """ + val = m.select_any('X') + self.assertTrue(val is not None) + self.assertEqual(val.Id, "'TEST") + + @load_docstring + def test_insert_escaped_string_end(self, m): + """ + CREATE TABLE X (Id STRING); + INSERT INTO X VALUES ('TEST'''); + """ + val = m.select_any('X') + self.assertTrue(val is not None) + self.assertEqual(val.Id, "TEST'") @load_docstring def test_insert_null_uuid(self, m): From b73358084dd12657c8ec5aebf25cc3b6bb5c9035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Fri, 21 Jul 2017 23:30:42 +0200 Subject: [PATCH 213/216] load: fix deserialization of the string "'" --- tests/test_xtuml/test_load.py | 10 ++++++++++ xtuml/load.py | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_xtuml/test_load.py b/tests/test_xtuml/test_load.py index 26f636a..29a6471 100644 --- a/tests/test_xtuml/test_load.py +++ b/tests/test_xtuml/test_load.py @@ -176,6 +176,16 @@ def test_insert_escaped_string(self, m): self.assertTrue(val is not None) self.assertEqual(val.Id, "TE'ST") + @load_docstring + def test_insert_escaped_single_quot(self, m): + """ + CREATE TABLE X (Id STRING); + INSERT INTO X VALUES (''''); + """ + val = m.select_any('X') + self.assertTrue(val is not None) + self.assertEqual(val.Id, "'") + @load_docstring def test_insert_escaped_string_beginning(self, m): """ diff --git a/xtuml/load.py b/xtuml/load.py index c3e0c2d..a272606 100644 --- a/xtuml/load.py +++ b/xtuml/load.py @@ -82,7 +82,7 @@ def deserialize_value(ty, value): return float(value) elif uty == 'STRING': - return value.replace("''", "'")[1:-1] + return value[1:-1].replace("''", "'") elif uty == 'UNIQUE_ID': if '"' in value: From 853c2eff2062145ba6a4f7a8f40c82aaa3fa5b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 22 Jul 2017 00:27:15 +0200 Subject: [PATCH 214/216] add python 3.6 to travis (cherry picked from commit 106ed37f4beed0c43e7d474f1f806592b4249a84) --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 649df30..139a74b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: python python: + - "3.6" - "3.5" - "2.7" install: From 391babfe96d371534a98cc334decd87bcf497fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sat, 22 Jul 2017 00:34:06 +0200 Subject: [PATCH 215/216] setup: add python 3.6 to list of supported python dialects (cherry picked from commit 658830ca681d8ab0f2759999d1a52fc4dc1ede5b) --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index d7e9f06..34c9e99 100755 --- a/setup.py +++ b/setup.py @@ -82,7 +82,8 @@ def run(self): 'Topic :: Software Development :: Compilers', 'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)', 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.5'], + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6'], keywords='xtuml bridgepoint', packages=['xtuml', 'bridgepoint'], requires=['ply'], From 30b35a86ae5914a94a62c92b0f14c555a6446428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Sun, 23 Jul 2017 14:18:28 +0200 Subject: [PATCH 216/216] bump version to 2.0b1 --- setup.py | 2 +- xtuml/version.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 34c9e99..0c6e531 100755 --- a/setup.py +++ b/setup.py @@ -69,7 +69,7 @@ def run(self): setup(name='pyxtuml', - version='0.9.9', # ensure that this is the same as in xtuml.version + version='2.0b1', # ensure that this is the same as in xtuml.version description='Library for parsing, manipulating, and generating BridgePoint xtUML models', author='John Törnblom', author_email='john.tornblom@gmail.com', diff --git a/xtuml/version.py b/xtuml/version.py index 6bb4ab1..06c139e 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -17,8 +17,8 @@ # License along with pyxtuml. If not, see . name = 'pyxtuml' -date = '2017-05-28' -version = '0.9' -release = '0.9.9' # ensure that this is the same as in setup.py +date = '2017-07-23' +version = '2.0' +release = '2.0b1' # ensure that this is the same as in setup.py complete_string = '%s v%s (%s)' % (name, release, date)