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: 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/MANIFEST.in b/MANIFEST.in index 1155b0f..7fc21b9 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,5 @@ -include LICENSE +include COPYING +include COPYING.LESSER include AUTHORS -include README.rst \ No newline at end of file +include README.rst +include requirements.txt diff --git a/README.rst b/README.rst index 9f58634..5c91ad2 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 @@ -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 diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..955bb4e --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,27 @@ +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 man docs dist" + +artifacts: + - path: dist\* 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 4f4e92c..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). @@ -15,7 +30,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()) @@ -30,10 +45,14 @@ 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) - (opts, args) = parser.parse_args() + (opts, args) = parser.parse_args(args) if len(args) == 0: parser.print_help() sys.exit(1) @@ -46,27 +65,28 @@ 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) 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) - sys.exit(error) + error += xtuml.check_uniqueness_constraint(m) + return error -if __name__ == '__main__': - main() +if __name__ == '__main__': + num_errors = main(sys.argv[1:]) + sys.exit(num_errors > 0) diff --git a/bridgepoint/external_entities.py b/bridgepoint/external_entities.py new file mode 100644 index 0000000..5541309 --- /dev/null +++ b/bridgepoint/external_entities.py @@ -0,0 +1,117 @@ +# 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 + + +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): + 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 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): + + @staticmethod + def shutdown(): + sys.exit() + + +class PERSIST(object): + + @staticmethod + def commit(): + return 0 + + @staticmethod + def restore(): + 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/gen_sql_schema.py b/bridgepoint/gen_sql_schema.py index 4e863fe..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. @@ -34,6 +49,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 +78,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/gen_xsd_schema.py b/bridgepoint/gen_xsd_schema.py index 7e22c40..74a01bc 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. @@ -30,16 +45,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: @@ -98,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 @@ -115,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 @@ -234,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, @@ -253,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) @@ -282,5 +297,5 @@ def main(): if __name__ == '__main__': - main() + main(sys.argv[1:]) 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/interpret.py b/bridgepoint/interpret.py new file mode 100644 index 0000000..2b4c81e --- /dev/null +++ b/bridgepoint/interpret.py @@ -0,0 +1,596 @@ +#!/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 xtuml + +from bridgepoint import oal +from xtuml import where_eq as where + +from functools import partial + + +logger = logging.getLogger(__name__) + + +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) + + +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 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): + 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() + + try: + self.accept(node.block) + except ReturnException: + pass + except 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(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() + 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), + '==': 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, + '+': lambda value: +value, + 'not': lambda value: not value, + 'cardinality': lambda value: xtuml.cardinality(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, label, action, kwargs, inst): + w = OperationWalker(metaclass.metamodel, kwargs, inst) + #w.visitors.append(NodePrintVisitor()) + root = oal.parse(action, label) + 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, label, action, attribute_name, inst): + w = DerivedAttributeWalker(metaclass.metamodel, attribute_name, inst) + #w.visitors.append(NodePrintVisitor()) + root = oal.parse(action, label) + 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, label, action, kwargs): + w = FunctionWalker(domain, kwargs) + #w.visitors.append(NodePrintVisitor()) + root = oal.parse(action, label) + 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", + 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: + 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)) + + from bridgepoint import ooaofooa + mm = ooaofooa.load_metamodel(args) + 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() + + +if __name__ == '__main__': + rc = main() + sys.exit(rc) + diff --git a/bridgepoint/oal.py b/bridgepoint/oal.py index fbf30d7..b1e60ff 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). @@ -164,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): @@ -208,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): @@ -393,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): @@ -408,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): @@ -421,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): @@ -436,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): @@ -499,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): @@ -667,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 @@ -682,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 @@ -764,6 +783,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, @@ -909,7 +929,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, @@ -917,6 +937,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) @@ -1264,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): @@ -1291,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): @@ -1972,13 +1999,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 dbbdf5c..ea8f8b4 100644 --- a/bridgepoint/ooaofooa.py +++ b/bridgepoint/ooaofooa.py @@ -1,6 +1,23 @@ # 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 collections +import functools import os import logging import xtuml @@ -10,3703 +27,36 @@ from xtuml import navigate_subtype as subtype from xtuml import where_eq as where +from bridgepoint import interpret +from bridgepoint import external_entities as builtin_ee +from bridgepoint import schema -logger = logging.getLogger(__name__) - - -__version__ = 4.2 +logger = logging.getLogger(__name__) -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 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_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 ); -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 ); -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 ); -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 ); -CREATE TABLE SM_NETXN ( - Trans_ID UNIQUE_ID, - SM_ID UNIQUE_ID, - SMstt_ID UNIQUE_ID, - SMspd_ID UNIQUE_ID ); -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 ); -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 ); -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 ); -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 ); -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 ); -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_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 ); -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 ); - -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 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 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 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 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 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 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 C_IO (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 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 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 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 SM_TAH (SM_ID, Act_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 SPR_REP (Id); -CREATE UNIQUE INDEX I1 ON SPR_RO (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 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 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 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 UC_E (Assoc_ID); -CREATE UNIQUE INDEX I1 ON UC_G (Assoc_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 V_EPR (SM_ID, SMedi_ID, Value_ID, PP_Id); -CREATE UNIQUE INDEX I1 ON V_FNV (Value_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 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 V_VAL (Value_ID); -CREATE UNIQUE INDEX I1 ON V_VAR (Var_ID); -''' +class OoaOfOoaException(Exception): + pass -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 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 OoaOfOoaException('Unknown symbol %s' % name) def is_contained_in(pe_pe, root): @@ -3752,27 +102,13 @@ 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. ''' 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' @@ -3812,33 +148,147 @@ def get_related_attributes(r_rgo, r_rto): return l1, l2 - -def mk_class(m, o_obj): + +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] + Enum = collections.namedtuple(s_dt.Name, enums) + 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. + ''' + action = s_sync.Action_Semantics_internal + label = s_sync.Name + return lambda **kwargs: interpret.run_function(metamodel, label, + action, kwargs) + + +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]() + + 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): + ''' + 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) + run = interpret.run_operation + + if o_tfr.Instance_Based: + return lambda self, **kwargs: run(metaclass, label, action, kwargs, self) + else: + fn = lambda cls, **kwargs: run(metaclass, label, action, kwargs, None) + return classmethod(fn) + + +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 + 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) + + +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() 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](): + 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)) + else: + attributes.append((o_attr.Name, ty)) + + o_attr = one(o_attr).O_ATTR[103, 'precedes']() - 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]() - 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 + 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): @@ -3850,31 +300,35 @@ 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.info('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_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): @@ -3885,32 +339,34 @@ 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]() - if None in [r_rgo, r_aone, r_aoth]: - 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): @@ -3921,21 +377,23 @@ 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]() 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): ''' @@ -3959,22 +417,48 @@ 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 component c_c. ''' - target = xtuml.MetaModel() + target = Domain() 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) + 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() + + 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 @@ -3985,9 +469,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): ''' @@ -4004,42 +490,62 @@ 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): + ''' + 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. + + 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)) 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) + raise OoaOfOoaException('Unable to find the component %s' % name) else: - return mk_component(mm, c_c) - - -# 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() - + return mk_component(mm, c_c, derived_attributes) + -def load_metamodel(resource): +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 and/or paths. ''' + resource = resource or list() + if isinstance(resource, str): resource = [resource] - loader = Loader() + loader = Loader(load_globals) for filename in resource: loader.filename_input(filename) return loader.build_metamodel() +def delete_globals(m, disconnect=False): + ''' + Remove global instances, e.g. the core data type integer. + ''' + 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](), disconnect) + xtuml.delete(subtype(s_dt, 17), disconnect) + xtuml.delete(s_dt, disconnect) + + +# Backwards compatibility with older versions of pyxtuml +Loader = ModelLoader +empty_model = load_metamodel + diff --git a/bridgepoint/prebuild.py b/bridgepoint/prebuild.py index e6a5466..4e33cb7 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. @@ -368,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) @@ -1122,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 + '*') @@ -1145,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 + '*') @@ -1345,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) @@ -1384,26 +1399,31 @@ 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 - - if act_smt: - v_par.Statement_ID = act_smt.Statement_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 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) - 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))) @@ -1800,8 +1820,8 @@ def prebuild_action(instance): 'SPR_PO': ProvidedOperationPrebuilder, 'SPR_PS': ProvidedSignalPrebuilder } - kind = instance.__class__.__name__ - walker = walker_map[kind](instance.__m__, instance) + 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()) root = oal.parse(instance.Action_Semantics_internal) 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); +''' diff --git a/bridgepoint/sourcegen.py b/bridgepoint/sourcegen.py index 4cd9626..e9239de 100644 --- a/bridgepoint/sourcegen.py +++ b/bridgepoint/sourcegen.py @@ -1,11 +1,27 @@ # 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 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 @@ -77,30 +93,20 @@ 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() 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): @@ -218,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](): @@ -237,7 +243,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 ') @@ -272,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(')') @@ -281,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(')') @@ -289,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(')') @@ -297,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(')') @@ -314,19 +320,12 @@ 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(')') 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]()) @@ -397,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.') @@ -419,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(')') @@ -428,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(')') @@ -445,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(')') @@ -453,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(')') @@ -476,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/docs/api-reference.rst b/docs/api-reference.rst index 2404d89..3678efe 100644 --- a/docs/api-reference.rst +++ b/docs/api-reference.rst @@ -13,24 +13,28 @@ 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, select_one, select_many + :members: clone, new, find_class, find_metaclass, 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.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, attribute_type .. autofunction:: xtuml.check_association_integrity .. autofunction:: xtuml.check_uniqueness_constraint @@ -49,6 +53,10 @@ Persistance Tools ^^^^^ +.. autoclass:: xtuml.UUIDGenerator + +.. autoclass:: xtuml.IntegerGenerator + .. autoclass:: xtuml.Walker :members: accept, default_accept @@ -63,7 +71,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 bridgepoint @@ -76,7 +90,7 @@ Loading Models .. autofunction:: bridgepoint.load_metamodel .. autoclass:: bridgepoint.ModelLoader - :members: filename_input + :members: filename_input, build_component Model Transformation ^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/cli.rst b/docs/cli.rst index 019e25a..99c1724 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 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 +=============== =================================================== + +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. :: @@ -32,12 +47,38 @@ 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 --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, -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 +========================= ========================================================= + SQL Schema Generator -------------------- To create an sql schema from a BridgePoint model, the following command may be used: @@ -54,6 +95,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 ========================= ============================================== diff --git a/docs/contributing.rst b/docs/contributing.rst index 5b2508f..ee806cc 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 -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 +`__. If you plan on sending +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. 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 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 new file mode 100644 index 0000000..62832cf --- /dev/null +++ b/examples/gen_ooaofooa_schema.py @@ -0,0 +1,116 @@ +#!/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 re +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 + + +logger = logging.getLogger('schema_gen') + + +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 description_filter(inst): + description = inst.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 + + +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() + + 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) + 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) + + 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](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) + + xtuml.persist_schema(c, '/dev/stdout') + #xtuml.persist.persist_unique_identifiers(c, '/dev/stdout') + +if __name__ == '__main__': + logging.basicConfig(level=logging.INFO) + main() + + + + + diff --git a/examples/gen_rt_integrity_check.py b/examples/gen_rt_integrity_check.py index 40a4a52..2ac6764 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. @@ -249,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", 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..4f55979 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 @@ -22,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/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 3fc32c3..0c6e531 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 @@ -14,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) @@ -24,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() @@ -33,40 +48,47 @@ 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) setup(name='pyxtuml', - version=xtuml.version.release, + 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', - url='https://github.com/john-tornblom/pyxtuml', - license='GPLv3', + url='https://github.com/xtuml/pyxtuml', + 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.4'], + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6'], keywords='xtuml bridgepoint', - platforms=["Linux"], packages=['xtuml', 'bridgepoint'], requires=['ply'], + install_requires=['ply'], + setup_requires=['ply'], cmdclass={'build_py': BuildCommand, 'test': TestCommand} ) diff --git a/tests/resources/Simple_Model.xtuml b/tests/resources/Simple_Model.xtuml new file mode 100644 index 0000000..9567a6c --- /dev/null +++ b/tests/resources/Simple_Model.xtuml @@ -0,0 +1,1748 @@ +-- root-types-contained: Package_c +-- generics +-- 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 (1252.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 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", + '', + 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 ("ae10ad4d-0705-48ca-8238-0a8c27848d15", + 1, + "00000000-0000-0000-0000-000000000000", + "109c0a69-f495-4920-9153-8764103be522", + 7); +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, + 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 ("46866705-ebd3-4368-9918-0d33e8eac121"); +INSERT INTO GD_NCS + VALUES ("46866705-ebd3-4368-9918-0d33e8eac121"); +INSERT INTO DIM_ND + VALUES (200.000000, + 150.000000, + "46866705-ebd3-4368-9918-0d33e8eac121"); +INSERT INTO DIM_GE + VALUES (0.000000, + 0.000000, + "46866705-ebd3-4368-9918-0d33e8eac121", + "00000000-0000-0000-0000-000000000000"); +INSERT INTO DIM_ELE + 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', + 1, + '../Simple_Model.xtuml'); diff --git a/tests/test_bridgepoint/test_assign.py b/tests/test_bridgepoint/test_assign.py index db7e513..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 @@ -22,8 +37,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 +47,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 +79,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 +89,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 +121,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 +131,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..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 @@ -22,8 +37,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 +65,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 +93,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 +121,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 +149,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 +177,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 +205,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 +233,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 +261,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 +289,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 +317,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 +352,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 +380,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_consistency.py b/tests/test_bridgepoint/test_consistency.py new file mode 100644 index 0000000..7ba474f --- /dev/null +++ b/tests/test_bridgepoint/test_consistency.py @@ -0,0 +1,59 @@ +# 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 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) + diff --git a/tests/test_bridgepoint/test_const.py b/tests/test_bridgepoint/test_const.py index 2fa61e9..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 @@ -22,8 +37,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 +59,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 +72,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 +94,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 +116,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 +129,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 +151,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 +173,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 +195,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 +217,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 +239,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') 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_gen_schema.py b/tests/test_bridgepoint/test_gen_schema.py new file mode 100644 index 0000000..e6e8b62 --- /dev/null +++ b/tests/test_bridgepoint/test_gen_schema.py @@ -0,0 +1,80 @@ +# 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}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)) + + +if __name__ == "__main__": + unittest.main() + diff --git a/tests/test_bridgepoint/test_generate.py b/tests/test_bridgepoint/test_generate.py index 87e40fb..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 @@ -20,6 +35,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 +53,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 +69,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') 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_interpret.py b/tests/test_bridgepoint/test_interpret.py new file mode 100644 index 0000000..96b0c41 --- /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.''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.''one'']; + +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 diff --git a/tests/test_bridgepoint/test_ooaofooa.py b/tests/test_bridgepoint/test_ooaofooa.py new file mode 100644 index 0000000..5afed37 --- /dev/null +++ b/tests/test_bridgepoint/test_ooaofooa.py @@ -0,0 +1,44 @@ +# 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.delete_globals(m) + s = xtuml.serialize_instances(m) + self.assertFalse(s) + + +if __name__ == "__main__": + import logging + + logging.basicConfig(level=logging.DEBUG) + unittest.main() + 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..ca2f3b3 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 @@ -68,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) @@ -113,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) @@ -165,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) @@ -212,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 c00c990..9c3ef21 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 @@ -125,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') @@ -133,9 +148,9 @@ 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.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') @@ -184,9 +199,9 @@ 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.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') 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..a9e3c35 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 @@ -63,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) diff --git a/tests/test_xtuml/test_consistency.py b/tests/test_xtuml/test_consistency.py new file mode 100644 index 0000000..265fdaa --- /dev/null +++ b/tests/test_xtuml/test_consistency.py @@ -0,0 +1,136 @@ +# 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 bridgepoint + +import xtuml.consistency_check + + +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.assertEqual(1, xtuml.check_association_integrity(m, 22)) + self.assertTrue(xtuml.relate(s_bparm, s_dt, 22)) + self.assertEqual(0, xtuml.check_association_integrity(m, 22)) + + self.assertEqual(1, xtuml.check_association_integrity(m, 21)) + self.assertTrue(xtuml.relate(s_bparm, s_brg, 21)) + self.assertEqual(0, xtuml.check_association_integrity(m, 21)) + + self.assertEqual(1, xtuml.check_association_integrity(m, 20)) + self.assertTrue(xtuml.relate(s_brg, s_dt, 20)) + self.assertEqual(0, xtuml.check_association_integrity(m, 20)) + + self.assertEqual(1, xtuml.check_association_integrity(m, 8001)) + self.assertTrue(xtuml.relate(s_ee, pe_pe, 8001)) + self.assertEqual(0, xtuml.check_association_integrity(m, 8001)) + + self.assertEqual(1, xtuml.check_association_integrity(m, 19)) + self.assertTrue(xtuml.relate(s_brg, s_ee, 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. + #self.assertTrue(m.is_consistent()) + + def test_unique_identifier_with_null(self): + m = self.metamodel + 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 + self.assertTrue(m.is_consistent()) + + s_dt = m.select_one('S_DT', xtuml.where_eq(Name='string')) + pe_pe = xtuml.navigate_one(s_dt).PE_PE[8001]() + pe_pe_clone = m.clone(pe_pe) + + self.assertFalse(m.is_consistent()) + self.assertEqual(1, xtuml.check_uniqueness_constraint(m, 'PE_PE')) + + xtuml.delete(pe_pe_clone) + 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): + ''' + Test suite for the xtuml.consistency_check + command line interface. + ''' + def main(self, *args): + try: + return xtuml.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_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) + + diff --git a/tests/test_xtuml/test_load.py b/tests/test_xtuml/test_load.py index f0fce81..29a6471 100644 --- a/tests/test_xtuml/test_load.py +++ b/tests/test_xtuml/test_load.py @@ -1,36 +1,48 @@ # 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 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__) + res = loader.build_metamodel() + except Exception as ex: + res = ex + + fn(self, res) + 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 +52,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 +60,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 +68,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 +76,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 +84,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 +92,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 +100,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 +108,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 +116,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 +124,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 +132,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 +140,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 +148,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 +156,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 +166,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); @@ -163,8 +175,38 @@ 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_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 + @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): ''' CREATE TABLE X (Id UNIQUE_ID); @@ -174,7 +216,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); @@ -182,8 +224,17 @@ def test_insert_zero_uuid(self, m): ''' val = m.select_any('X') self.assertEqual(0, val.Id) - - @load + + @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): ''' CREATE TABLE X (Id REAL); @@ -193,7 +244,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 +254,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 +264,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 +274,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 +284,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 +294,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 +314,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 +332,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.MetaException) - @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 +433,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 +441,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 +453,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 +465,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 +475,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'); diff --git a/tests/test_xtuml/test_metamodel.py b/tests/test_xtuml/test_metamodel.py index 86cf5d8..4b0e817 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 @@ -7,71 +22,7 @@ from bridgepoint import ooaofooa from xtuml import where_eq as where -from tests.test_xtuml.utils import expect_exception - -class TestAssociation(unittest.TestCase): - ''' - Test suite for the class xtuml.AssociationLink - ''' - - def testAssociationConstructor(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 testAssociationLinkConstructor(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 TestNavChain(unittest.TestCase): - ''' - Test suite for the class xtuml.NavChain - ''' - - 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)()) - - class TestModel(unittest.TestCase): ''' Test suite for the class xtuml.MetaModel @@ -87,15 +38,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) @@ -104,37 +55,24 @@ def testSelectMany(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 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): - 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): - 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): - 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) @@ -149,7 +87,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) @@ -158,13 +96,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) + self.assertIsInstance(q, xtuml.Class) - def testQueryOrder(self): + def test_query_order(self): m = self.metamodel q = m.select_many('S_DT') @@ -175,9 +113,9 @@ def testQueryOrder(self): self.assertEqual(index == length - 1, inst == q.last) self.assertEqual(index != length - 1, inst != q.last) - def testCaseSensitivity(self): - self.metamodel.define_class('Aa', []) - + def test_case_sensitivity(self): + self.metamodel.define_class('Aa', [('Id', 'unique_id')]) + self.metamodel.new('AA') self.assertTrue(self.metamodel.select_any('aA')) @@ -194,50 +132,67 @@ 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): + metaclass = self.metamodel.find_metaclass('aa') + metaclass.append_attribute('Next_Id', 'unique_id') + + 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, 'next'].AA[1, 'next']()) + + def test_unknown_type(self): self.metamodel.define_class('A', [('Id', '')]) - self.metamodel.new('A') + self.assertRaises(xtuml.MetaException, self.metamodel.new, 'A') - @expect_exception(xtuml.ModelException) - def testUndefinedClass(self): - self.metamodel.new('MY_UNDEFINED_CLASS') + def test_undefined_class(self): + self.assertRaises(xtuml.UnknownClassException, self.metamodel.new, + 'MY_UNDEFINED_CLASS') - @expect_exception(xtuml.ModelException) - def testRedefinedClass1(self): - self.metamodel.define_class('MY_CLASS', []) + def test_redefined_class(self): self.metamodel.define_class('MY_CLASS', []) + self.assertRaises(xtuml.MetaModelException, self.metamodel.define_class, + 'MY_CLASS', []) - @expect_exception(xtuml.ModelException) - def testSelectAnyUndefined(self): - self.metamodel.select_any('MY_CLASS') + def test_select_any_undefined(self): + self.assertRaises(xtuml.UnknownClassException, self.metamodel.select_any, + 'MY_CLASS') - @expect_exception(xtuml.ModelException) - def testSelectManyUndefined(self): - self.metamodel.select_many('MY_CLASS') + def test_select_many_undefined(self): + self.assertRaises(xtuml.UnknownClassException, self.metamodel.select_many, + 'MY_CLASS') - def testRelate(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 testDelete(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) - @expect_exception(xtuml.ModelException) - def testDeleteRwise(self): + def test_delete_twise(self): inst = self.metamodel.select_any('S_DT', where(Name='void')) xtuml.delete(inst) - xtuml.delete(inst) + self.assertRaises(xtuml.DeleteException, 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)) @@ -253,7 +208,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) @@ -262,201 +216,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) - - def testRelateReflexive1(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 testSortReflexive(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 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')) - - inst_set = xtuml.navigate_many(act_blk).ACT_SMT[602]() - self.assertEqual(len(inst_set), 1) - xtuml.sort_reflexive(inst_set, 661, 'precedes') - - 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']()) - - @expect_exception(xtuml.ModelException) - def testRelateReflexiveWithoutPhrase(self): - inst1 = self.metamodel.new('ACT_SMT') - inst2 = self.metamodel.new('ACT_SMT') - - xtuml.relate(inst1, inst2, 661, '') - - def testRelateInvertedOrder(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]()) - - @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]()) - - def testUnrelate(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 testRelateInWrongOrder(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 testRelateTopDown(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 testRelateBottomUp(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) - - def testConcistencyOfEmptyModel(self): - self.assertTrue(self.metamodel.is_consistent()) - def testConsistencyOfNonEmptyModel(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()) + def test_delete_unknown_instance(self): + self.assertRaises(xtuml.DeleteException, xtuml.delete, self) class TestDefineAssociations(unittest.TestCase): @@ -470,40 +232,57 @@ 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')]) - endpint1 = xtuml.SingleAssociationLink('A', ids=['Id'], phrase='prev') - endpint2 = xtuml.SingleAssociationLink('A', ids=['Next_Id'], phrase='next') - self.metamodel.define_relation('R1', endpint1, endpint2) + 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") 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 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']) - b_endpint = xtuml.ManyAssociationLink('B', ids=['A_Id']) - - self.metamodel.define_relation(1, a_endpint, b_endpint) + 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)) @@ -511,31 +290,32 @@ def testOneToMany(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 ''' - - def testPlusOperator(self): - inst1 = xtuml.BaseObject() - inst2 = xtuml.BaseObject() + My_Class = xtuml.MetaClass('My_Class') + + def test_plus_operator(self): + inst1 = self.My_Class() + inst2 = self.My_Class() q = inst1 + inst2 self.assertEqual(2, len(q)) self.assertIn(inst1, q) self.assertIn(inst2, q) - def testMinusOperator(self): - inst1 = xtuml.BaseObject() - inst2 = xtuml.BaseObject() + def test_minus_operator(self): + inst1 = self.My_Class() + inst2 = self.My_Class() q = inst1 - inst2 self.assertEqual(1, len(q)) self.assertIn(inst1, q) self.assertNotIn(inst2, q) - def testNonPersistingAttribute(self): - inst = xtuml.BaseObject() + def test_non_persisting_attribute(self): + inst = self.My_Class() setattr(inst, 'test1', 1) self.assertEqual(getattr(inst, 'test1'), 1) @@ -549,99 +329,80 @@ 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') + def test_gettattr_with_undefined_attribute(self): + inst = self.My_Class() + self.assertRaises(AttributeError, getattr, inst, 'test') + def test_undefined_attribute_access(self): + inst = self.My_Class() + try: + _ = inst.test + self.fail('AttributeError expected') + except AttributeError: + 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.append_attribute('number', 'integer') + self.metaclass.append_attribute('name', 'string') + self.metaclass.insert_attribute(1, 'email', 'string') + + 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') + + for expected_name, name in zip(['number', 'email', 'name'], + self.metaclass.attribute_names): + self.assertEqual(expected_name, name) + + self.metaclass.delete_attribute('name') + self.assertNotIn('name', self.metaclass.attribute_names) - @expect_exception(AttributeError) - def testUndefinedAttribute2(self): - inst = xtuml.BaseObject() - _ = inst.test + self.assertEqual(inst1.number, 2) + self.assertEqual(inst1.name, 'test') class TestQuerySet(unittest.TestCase): ''' Test suite for the class xtuml.QuerySet ''' - - def testEqualOperator(self): - q1 = xtuml.QuerySet() - q2 = xtuml.QuerySet() - - self.assertEqual(q1, q2) - - q1 = xtuml.QuerySet([1]) - q2 = xtuml.QuerySet([1]) + def test_first(self): + q = xtuml.QuerySet([1, 2, 3]) + self.assertEqual(q.first, 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 testNotEqualOperator(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) - @expect_exception(KeyError) - def testPopEmpty(self): - q = xtuml.QuerySet() - q.pop() - - def testPopLast(self): - q1 = xtuml.QuerySet([1, 2]) - q2 = xtuml.QuerySet([1]) - self.assertNotEqual(q1, q2) - - q1.pop() - self.assertEqual(q1, q2) - def testPopFirst(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 testIntegerGeneratorBasic(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 testIntegerGeneratorIterator(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_navigate.py b/tests/test_xtuml/test_navigate.py new file mode 100644 index 0000000..a05a8fe --- /dev/null +++ b/tests/test_xtuml/test_navigate.py @@ -0,0 +1,76 @@ +# 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 +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_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)) + self.assertEqual(len(xtuml.navigate_many(None)()), 0) + + def test_navigate_invalid_handle(self): + self.assertRaises(xtuml.MetaException, xtuml.navigate_one, 50) + + +if __name__ == "__main__": + unittest.main() + diff --git a/tests/test_xtuml/test_persist.py b/tests/test_xtuml/test_persist.py index e35c64c..d24acc4 100644 --- a/tests/test_xtuml/test_persist.py +++ b/tests/test_xtuml/test_persist.py @@ -1,9 +1,25 @@ # 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 import tempfile +import atexit import xtuml @@ -108,7 +124,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 +161,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 +188,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 = ''' @@ -204,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 = ''' @@ -344,7 +360,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) @@ -355,12 +371,7 @@ def test_implicit_serialize(self): s2 = xtuml.serialize_association(R1) self.assertTrue(s1) self.assertEqual(s1, s2) - - s1 = xtuml.serialize(R1.source) - s2 = xtuml.persist.serialize_association_link(R1.source) - self.assertTrue(s1) - self.assertEqual(s1, s2) - + x = m.new('X', Boolean=True, Integer=4, String='str') s1 = xtuml.serialize(x) @@ -379,26 +390,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/tests/test_xtuml/test_phrase.py b/tests/test_xtuml/test_phrase.py new file mode 100644 index 0000000..1483852 --- /dev/null +++ b/tests/test_xtuml/test_phrase.py @@ -0,0 +1,200 @@ +# 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 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()) + 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')) + + self.assertTrue(one(cls1).Class[1, 'other']()) + self.assertFalse(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') + 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 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() + + diff --git a/tests/test_xtuml/test_relate.py b/tests/test_xtuml/test_relate.py new file mode 100644 index 0000000..e7a9d14 --- /dev/null +++ b/tests/test_xtuml/test_relate.py @@ -0,0 +1,187 @@ +# 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 +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.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]()) + + 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') + 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') + 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, '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_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, '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_without_phrase(self): + inst1 = self.m.new('ACT_SMT') + inst2 = self.m.new('ACT_SMT') + + self.assertRaises(xtuml.UnknownLinkException, 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.UnknownLinkException, 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, '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, 'succeeds')) + 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.assertTrue(xtuml.unrelate(inst1, inst2, 8001)) + + def test_unrelate_none(self): + inst = self.m.new('ACT_SMT') + 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') + 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') + 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() + diff --git a/tests/test_xtuml/test_sort.py b/tests/test_xtuml/test_sort.py new file mode 100644 index 0000000..1fdac7b --- /dev/null +++ b/tests/test_xtuml/test_sort.py @@ -0,0 +1,102 @@ +# 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 +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, '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, 'precedes') + 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.MetaException, 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.UnknownLinkException, + 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, 'succeeds') + + self.assertEqual(len(inst_set), 4) + 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() + diff --git a/tests/test_xtuml/test_tools.py b/tests/test_xtuml/test_tools.py index 832745f..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 @@ -56,6 +72,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/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 diff --git a/xtuml/__init__.py b/xtuml/__init__.py index a15ca6c..f4b01a7 100644 --- a/xtuml/__init__.py +++ b/xtuml/__init__.py @@ -1,8 +1,34 @@ # 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. +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 @@ -11,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 @@ -22,35 +49,36 @@ from .persist import serialize_value from .persist import serialize -from .model import Association -from .model import AssociationLink -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 MetaModel -from .model import ModelException - -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 .meta import Association +from .meta import Link -from .consistency_check import check_association_integrity -from .consistency_check import check_uniqueness_constraint +from .meta import QuerySet +from .meta import Class +from .meta import BaseObject +from .meta import MetaClass +from .meta import MetaModel -from .tools import Walker -from .tools import Visitor -from .tools import NodePrintVisitor +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 . import version +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 diff --git a/xtuml/consistency_check.py b/xtuml/consistency_check.py index b1a12c0..49b9b64 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. ''' @@ -13,40 +28,41 @@ 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 = '' - - for name, ty in inst.__a__: - if name in from_link.ids: + metaclass = xtuml.get_metaclass(inst) + + for name, ty in metaclass.attributes: + 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 = '' - - for name, ty in inst.__a__: - if name in inst.__i__: + metaclass = xtuml.get_metaclass(inst) + + for name, ty in metaclass.attributes: + if name in link.key_map: value = getattr(inst, name) value = xtuml.serialize_value(value, ty) 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): @@ -55,9 +71,10 @@ def pretty_unique_identifier(inst, identifier): ''' values = '' prefix = '' + metaclass = xtuml.get_metaclass(inst) - 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) @@ -65,54 +82,90 @@ 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. ''' 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(): + 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 + + value = getattr(inst, name) + isnull = value is None + isnull |= (ty == 'UNIQUE_ID' and not value) + if isnull: + 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 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) - if len(s) != 1: - res = False + + 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' - % (Cls.__name__, id_string)) + % (metaclass.kind, id_string)) + + id_map[identifier][index_key] = inst 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)() - - if(len(q_set) < 1 and not to_link.is_conditional) or ( - (len(q_set) > 1 and not to_link.is_many)): - res = False + 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 += 1 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_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): ''' Check the model for integrity violations on association(s). @@ -120,16 +173,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.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.source_link) + res += check_link_integrity(m, ass.target_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()) @@ -147,7 +200,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) @@ -166,22 +219,23 @@ 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) + return error if __name__ == '__main__': - main() + num_errors = main(sys.argv[1:]) + sys.exit(num_errors > 0) diff --git a/xtuml/load.py b/xtuml/load.py index 6e451da..a272606 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). @@ -55,53 +70,71 @@ 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': - return int(value) + if '"' in value: + return uuid.UUID(value[1:-1]).int + else: + return int(value) elif uty == 'REAL': return float(value) elif uty == 'STRING': - return value.replace("''", "'")[1:-1] + return value[1:-1].replace("''", "'") elif uty == 'UNIQUE_ID': if '"' in value: return uuid.UUID(value[1:-1]).int else: return int(value) - - else: - raise ParsingException("Unknown type named '%s'" % ty) - + class ParsingException(Exception): + ''' + An exception that may be thrown while loading (and parsing) a metamodel. + ''' 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 self.values = values self.names = names -class CreateClassStmt(object): + +class CreateClassStmt(Stmt): def __init__(self, kind, attributes): self.kind = kind self.attributes = attributes -class CreateRelatationStmt(object): - - def __init__(self, ass1, ass2, rel_id): - self.end_points = (ass1, ass2) - self.id = rel_id +class CreateAssociationStmt(Stmt): + 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): +class CreateUniqueStmt(Stmt): def __init__(self, kind, name, attributes): self.kind = kind @@ -131,23 +164,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', @@ -158,8 +192,7 @@ class ModelLoader(object): 'RPAREN', 'RELID', 'SEMICOLON', - 'STRING', - 'CARDINALITY', + 'STRING' ) # A string containing ignored characters (spaces and tabs). @@ -177,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=''): ''' @@ -197,7 +224,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): @@ -228,8 +255,21 @@ def populate_associations(self, metamodel): input. ''' for stmt in self.statements: - if isinstance(stmt, CreateRelatationStmt): - metamodel.define_relation(stmt.id, *stmt.end_points) + 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) + ass.formalize() def populate_unique_identifiers(self, metamodel): ''' @@ -261,26 +301,29 @@ 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.metaclasses: names = ['_%s' % idx for idx in range(len(stmt.values))] ModelLoader._populate_matching_class(metamodel, stmt.kind, names, stmt.values) - Cls = metamodel.classes[ukind] - args = list() - - if len(Cls.__a__) != len(stmt.values): - logger.warn('schema mismatch while loading an instance of %s', - stmt.kind) + metaclass = metamodel.find_metaclass(stmt.kind) + if len(metaclass.attributes) != len(stmt.values): + logger.warn('%s:%d:schema mismatch' % (stmt.filename, stmt.lineno)) - for attr, value in zip(Cls.__a__, stmt.values): - _, ty = attr - value = deserialize_value(ty, value) - args.append(value) - - metamodel.new(stmt.kind, *args) + inst = metamodel.new(stmt.kind) + for attr, value in zip(metaclass.attributes, stmt.values): + name, ty = attr + 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 @staticmethod def _populate_instance_with_named_arguments(metamodel, stmt): @@ -288,34 +331,37 @@ 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.metaclasses: ModelLoader._populate_matching_class(metamodel, stmt.kind, stmt.names, stmt.values) - Cls = metamodel.classes[ukind] + 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): - logger.warn('schema mismatch while loading an instance of %s', - stmt.kind) + logger.warn('%s:%d:schema mismatch' % (stmt.filename, stmt.lineno)) - args = list() - for name, ty in Cls.__a__: + inst = metamodel.new(stmt.kind) + for name, ty in metaclass.attributes: uname = name.upper() 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 - - args.append(value) - - metamodel.new(stmt.kind, *args) + + inst.__dict__[name] = value + return inst + def populate_instances(self, metamodel): ''' Populate a *metamodel* with instances previously encountered from @@ -326,20 +372,65 @@ 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 + + fn(metamodel, stmt) + + def populate_connections(self, metamodel): + ''' + 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 + + 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 + + if inst_key not in storage[target_class][link_key]: + storage[target_class][link_key][inst_key] = xtuml.OrderedSet() + + 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 inst_key not in storage[target_class][link_key]: + continue + + 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 inst in metamodel.instances: + metaclass = xtuml.get_metaclass(inst) + for attr in metaclass.referential_attributes: + 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_associations(metamodel) self.populate_unique_identifiers(metamodel) + self.populate_associations(metamodel) self.populate_instances(metamodel) - + self.populate_connections(metamodel) + def build_metamodel(self, id_generator=None): ''' Build and return a *xtuml.MetaModel* containing previously loaded input. @@ -453,6 +544,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''' @@ -520,15 +614,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/meta.py b/xtuml/meta.py new file mode 100644 index 0000000..2a78945 --- /dev/null +++ b/xtuml/meta.py @@ -0,0 +1,1244 @@ +# 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 . +''' +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 + + +logger = logging.getLogger(__name__) + + +class MetaException(Exception): + ''' + Base class for all exceptions thrown by the xtuml.meta module. + ''' + + +class DeleteException(MetaException): + ''' + An exception that may be thrown during delete operations. + ''' + + +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): + ''' + An exception that may be thrown when a 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)) + + MetaException.__init__(self, 'Unknown link ' + msg) + + +class MetaModelException(MetaException): + ''' + Base class for exceptions thrown by the MetaModel class. + ''' + + +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): + ''' + Determine if an attribute of an *instance* with a specific *name* + is null. + ''' + if name in instance.__dict__: + value = instance.__dict__[name] + else: + value = getattr(instance, name) + + if value: + return False + + elif value is None: + return True + + name = name.upper() + metaclass = get_metaclass(instance) + for attr_name, attr_ty in 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 Association(object): + ''' + An association connects two metaclasses to each other via two directed + links. + ''' + rel_id = None + source_keys = None + source_link = None + target_keys = None + target_link = None + + def __init__(self, rel_id, + source_keys, source_link, + target_keys, target_link): + self.rel_id = rel_id + 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.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 + key_map = tuple(zip(self.source_keys, self.target_keys)) + + for inst1 in source_class.storage: + kwargs = dict() + 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) + + 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 + + source_class.referential_attributes |= set(self.source_keys) + target_class.identifying_attributes |= set(self.target_keys) + + 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) + + return getattr(other_inst, ref_name, None) + + def fset(inst, value, name, ref_name, alt_prop): + 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) + + 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, name=ref_key, ref_name=primary_key, alt_prop=prop)) + setattr(source_class.clazz, ref_key, prop) + + +class Link(dict): + ''' + 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 + phrase = None + key_map = None + conditional = None + many = None + + 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 + + self.from_metaclass = from_metaclass + self.rel_id = rel_id + self.to_metaclass = to_metaclass + self.key_map = dict() + self.phrase = phrase + self.conditional = conditional + self.many = many + + @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: + s = '1' + + if self.conditional: + s += 'C' + + return s + + @property + def kind(self): + ''' + Obtain the resulting kind when the link is navigated. + ''' + return self.to_metaclass.kind + + 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] = xtuml.OrderedSet() + + if another_instance in self[instance]: + return True + + if self[instance] and not self.many and check: + return False + + self[instance].add(another_instance) + return True + + def disconnect(self, instance, another_instance): + ''' + Disconnect an *instance* from *another_instance*. + ''' + if instance not in self: + return False + + if another_instance not in self[instance]: + return False + + self[instance].remove(another_instance) + return True + + def navigate(self, instance): + ''' + Navigate from *instance* across the link. + ''' + if instance in self: + return self[instance] + else: + return set() + + def navigate_one(self, instance): + ''' + Navigate from *instance* across the link. + ''' + 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): + 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): + ''' + 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): + 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. + ''' + @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 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 __add__(self, other): + assert isinstance(other, Class) + return QuerySet([self, other]) + + def __sub__(self, other): + assert isinstance(other, Class) + if self == other: return QuerySet() + else: return QuerySet([self]) + + def __getattr__(self, name): + uname = name.upper() + for attr, _ in get_metaclass(self).attributes: + if attr.upper() != uname : + continue + + if attr in self.__dict__: + return self.__dict__[attr] + else: + return object.__getattribute__(self, attr) + + return object.__getattribute__(self, name) + + def __setattr__(self, name, value): + uname = name.upper() + for attr, _ in get_metaclass(self).attributes: + 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): + uname = name.upper() + for name in self.__dict__: + if uname == name.upper(): + break + + del self.__dict__[name] + + def __str__(self): + values = list() + for attr, ty in get_metaclass(self).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 compatibility 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 + referential_attributes = None + identifying_attributes = None + links = None + indices = None + clazz = None + storage = None + + 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.storage = list() + 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 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, phrase, conditional, many): + ''' + Add a new link from *self* to *metaclass*. + ''' + link = Link(self, rel_id, metaclass, phrase, conditional, many) + key = (metaclass.kind.upper(), rel_id, phrase) + self.links[key] = link + + return link + + 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) + + 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) + + 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: + del self.attributes[idx] + return + + def default_value(self, type_name): + ''' + Obtain the default value for some *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': + if self.metamodel: + return next(self.metamodel.id_generator) + else: + return None + else: + raise MetaException("Unknown type named '%s'" % type_name) + + def new(self, *args, **kwargs): + ''' + Create and return a new instance. + ''' + 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 not in self.referential_attributes: + value = self.default_value(ty) + setattr(inst, name, value) + + # set all positional arguments + for attr, value in zip(self.attributes, args): + name, ty = attr + 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(): + if name not in self.referential_attributes: + setattr(inst, name, value) + 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()): + continue + + kwargs = dict() + for key, value in link.key_map.items(): + kwargs[key] = referential_attributes[value] + + 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): + ''' + Create a shallow clone of an *instance*. + + **Note:** the clone and the original instance **does not** have to be + part of the same metaclass. + ''' + args = list() + for name, _ in get_metaclass(instance).attributes: + value = getattr(instance, name) + args.append(value) + + return self.new(*args) + + def delete(self, instance, disconnect=True): + ''' + 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 + + 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 + conditional *where-clause* in the form of a function may be provided. + ''' + if isinstance(where_clause, dict): + s = self.query(where_clause) + elif where_clause: + s = iter(filter(where_clause, self.storage)) + else: + s = iter(self.storage) + + 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) + 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=''): + 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 + instances of some *kind*. + ''' + key = (kind.upper(), rel_id, phrase) + if key in self.links: + link = self.links[key] + return link.navigate(inst) + + 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 + *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: + break + else: + yield inst + + +class NavChain(object): + ''' + A navigation chain initializes a navigation from one or more instances. + Navigation 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: ) + ''' + + def __init__(self, handle): + if handle is None: + handle = [] + + elif isinstance(handle, Class): + handle = [handle] + + elif not isinstance(handle, collections.Iterable): + raise MetaException("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): + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + for inst in iter(handle): + metaclass = get_metaclass(inst) + for result in metaclass.navigate(inst, kind, rel_id, phrase): + yield result + + def __getattr__(self, kind): + ''' + The navigation chain specified a *kind*, e.g. + >>> chain.X + ''' + self._kind = kind + return self + + def __getitem__(self, args): + ''' + The navigation chain specified a link, e.g. the rel_id and phrase, e.g. + >>> chain[100, 'phrase'] + ''' + if not isinstance(args, tuple): + args = (args, '') + + relid, phrase = args + + return self.nav(self._kind, relid, phrase) + + def __call__(self, where_clause=None): + ''' + The navigation chain is invoked. Optionally, a conditional + *where-clause* in the form of a function may be provided, e.g + + >>> chain(lambda selected: selected.Name == 'test') + ''' + handle = self.handle or list() + if where_clause: + handle = filter(where_clause, handle) + + return QuerySet(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): + ''' + Initialize a navigation from one *instance* to another across a one-to-one + association. + + The resulting query will return an instance or None. + + Usage example: + + >>> from xtuml import navigate_one as one + >>> m = xtuml.load_metamodel('db.sql') + >>> inst = m.select_any('My_Modeled_Class') + >>> other_inst = one(inst).Some_Other_Class[4]() + + The syntax is somewhat similar to the action language used in BridgePoint. + The same semantics would be expressed in BridgePoint as:: + + select any inst from instances of My_Modeled_Class; + select one other_inst related by inst->Some_Other_Class[R4]; + + **Note:** If the navigated association is reflexive, a phrase must be + provided, e.g. + + >>> other_inst = one(inst).Some_Other_Class[4, 'some phrase']() + ''' + return navigate_any(instance) + + +def navigate_any(instance_or_set): + ''' + Initialize a navigation from an instance, or a set of instances, to + associated instances across a one-to-many or many-to-many association. + + The resulting query will return an instance or None. + ''' + return NavOneChain(instance_or_set) + + +def navigate_many(instance_or_set): + ''' + Initialize a navigation from an instance, or a set of instances, to + associated instances across a one-to-many or many-to-many association. + + The resulting query will return a set of instances. + ''' + return NavChain(instance_or_set) + + +def navigate_subtype(supertype, rel_id): + ''' + Perform a navigation from *supertype* to its subtype across *rel_id*. The + navigated association must be modeled as a subtype-supertype association. + + The return value will an instance or None. + ''' + if not supertype: + return + + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + metaclass = get_metaclass(supertype) + for kind, rel_id_candidate, _ in metaclass.links: + if rel_id != rel_id_candidate: + continue + + subtype = navigate_one(supertype).nav(kind, rel_id)() + if subtype: + return subtype + + +class WhereEqual(dict): + ''' + Helper class to create a 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 that 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 + 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): + raise MetaException('The collection to sort must be a QuerySet') + + if not set_of_instances.first: + return QuerySet() + + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + # Figure out the phrase in the other direction + metaclass = get_metaclass(set_of_instances.first) + 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: + 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: + #the instance sequence is recursive, start anywhere + first_instances = [set_of_instances.first] + + def sequence_generator(): + for first in first_instances: + inst = first + while 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 + + return QuerySet(sequence_generator()) + + +def _find_link(inst1, inst2, rel_id, phrase): + ''' + Find links that correspond to the given arguments. + ''' + metaclass1 = get_metaclass(inst1) + metaclass2 = get_metaclass(inst2) + + if isinstance(rel_id, int): + rel_id = 'R%d' % rel_id + + for ass in metaclass1.metamodel.associations: + if ass.rel_id != rel_id: + continue + + 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.kind == metaclass1.kind and + ass.target_link.to_metaclass.kind == metaclass2.kind and + ass.target_link.phrase == phrase): + return inst2, inst1, ass + + raise UnknownLinkException(metaclass1.kind, metaclass2.kind, rel_id, phrase) + + +def relate(from_instance, to_instance, rel_id, phrase=''): + ''' + 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 + 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. A set of all affected instances will be returned. + ''' + if None in [from_instance, to_instance]: + return False + + 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) + + 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=''): + ''' + 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 + existing associations are propagated. A set of all affected instances will + be returned. + ''' + if None in [from_instance, to_instance]: + return False + + 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) + + if not ass.target_link.disconnect(inst2, inst1): + raise UnrelateException(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 MetaException("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, disconnect=True): + ''' + 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, disconnect) + + +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. + + **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.storage: + 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) + + 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*. + + 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 = 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, + source_conditional, source_phrase, target_kind, + target_keys, target_many, target_conditional, + target_phrase): + ''' + 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 + + source_metaclass = self.find_metaclass(source_kind) + target_metaclass = self.find_metaclass(target_kind) + + source_link = target_metaclass.add_link(source_metaclass, rel_id, + many=source_many, + phrase=target_phrase, + conditional=source_conditional) + + target_link = source_metaclass.add_link(target_metaclass, rel_id, + many=target_many, + phrase=source_phrase, + conditional=target_conditional) + + ass = Association(rel_id, + 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 + + 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] = tuple(named_attributes) + metaclass.identifying_attributes |= 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) + + 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) + + # Backwards compatibility with older versions of pyxtuml + select_any = select_one + + def is_consistent(self): + ''' + Check the metamodel for integrity violations. + ''' + if xtuml.check_association_integrity(self): + return False + + return xtuml.check_uniqueness_constraint(self) == 0 + + diff --git a/xtuml/model.py b/xtuml/model.py deleted file mode 100644 index 72536fc..0000000 --- a/xtuml/model.py +++ /dev/null @@ -1,940 +0,0 @@ -# encoding: utf-8 -# Copyright (C) 2015 John Törnblom - -from itertools import chain -from functools import partial - -import logging -import uuid -import collections - -try: - from future_builtins import filter, zip -except ImportError: - pass - -import xtuml - - -logger = logging.getLogger(__name__) - - -class ModelException(Exception): - pass - - -def navigation(handle, kind, relid, phrase): - kind = kind.upper() - if isinstance(relid, int): - relid = 'R%d' % relid - - for start_inst in iter(handle): - query = start_inst.__q__[kind][relid][phrase] - for inst in query(start_inst): - yield inst - - -class NavChain(object): - ''' - 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: ) - ''' - - 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 = navigation(self.handle, kind, relid, phrase) - return self - - 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 __call__(self, where_clause=None): - handle = self.handle or list() - if not where_clause: - where_clause = lambda sel: True - - for inst in handle: - if where_clause(inst): - return inst - - -class NavManyChain(NavChain): - - def __call__(self, where_clause=None): - handle = self.handle or list() - return QuerySet(filter(where_clause, handle)) - - -class Association(object): - ''' - An association connects two classes to each other via two association links. - ''' - - def __init__(self, relid, source, target): - if isinstance(relid, int): - relid = 'R%d' % relid - self.id = relid - self.source = source - self.target = target - - @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() - - -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 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): - ''' - An ordered set which holds instances that match queries from a metamodel. - ''' - - @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): - result = None - generator = None - - def __init__(self, table, kwargs): - self.result = collections.deque() - self.items = collections.deque(kwargs.items()) - self.table = table - self.generator = self.mk_generator() - - def mk_generator(self): - for inst in iter(self.table): - 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.generator = None - - def execute(self): - for inst in self.result: - yield inst - - while self.generator: - yield next(self.generator) - - -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 - __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 - - def __init__(self): - self.__c__.clear() - - def __add__(self, other): - assert isinstance(other, BaseObject) - return QuerySet([self, other]) - - def __sub__(self, other): - assert isinstance(other, BaseObject) - if self == other: return QuerySet() - else: return QuerySet([self]) - - def __getattr__(self, name): - uname = name.upper() - for attr, _ in self.__a__: - if attr.upper() == uname: - return self.__dict__[attr] - - return object.__getattribute__(self, name) - - def __setattr__(self, name, value): - uname = name.upper() - for attr, _ in self.__a__: - if attr.upper() == uname: - self.__dict__[attr] = value - self.__c__.clear() - return - - self.__dict__[name] = value - - def __str__(self): - return str(self.__dict__) - - -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: - return False - - elif value is None: - return True - - name = name.upper() - for attr_name, attr_ty in inst.__a__: - 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): - ''' - A metamodel contains class definitions with associations between them, - and instances of different kinds of classes. - - **Note:** All identifiers, e.g. attributes, association ids, key letters - (the kind or name of a class), are case **insensitive**. - ''' - - classes = None - instances = 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 = UUIDGenerator() - - self.classes = dict() - self.instances = dict() - self.associations = list() - self.id_generator = id_generator - - 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(): - 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() - - return Cls - - 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 metamodel schema. - ''' - ukind = kind.upper() - if ukind not in self.classes: - raise ModelException("Unknown class %s" % kind) - - Cls = self.classes[ukind] - 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[ukind].append(inst) - - return 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 metamodel. - ''' - clone = self.new(instance.__class__.__name__) - for name, _ in instance.__a__: - value = getattr(instance, name) - 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): - ''' - Define and return an association between *source* to *target* named - *rel_id*. - ''' - ass = Association(rel_id, source, target) - self.associations.append(ass) - - source_kind = source.kind.upper() - target_kind = target.kind.upper() - - Source = self.classes[source_kind] - Target = self.classes[target_kind] - - 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) - - 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): - ''' - Define a unique identifier for some *kind* of class based on its *named attributes* - ''' - if not named_attributes: - return - - kind = kind.upper() - if isinstance(name, int): - name = 'I%d' % name - - Cls = self.classes[kind] - Cls.__u__[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) - ''' - ukind = kind.upper() - if ukind not in self.instances: - raise ModelException("Unknown class %s" % kind) - - return QuerySet(filter(where_clause, self.instances[ukind])) - - def select_any(self, kind, where_clause=None): - ''' - This method is deprecated. Use *select_any* instead. - ''' - return self.select_one(kind, where_clause) - - def select_one(self, kind, where_clause=None): - ''' - Query the model 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') - ''' - ukind = kind.upper() - if ukind not in self.instances: - raise ModelException("Unknown class %s" % kind) - - s = filter(where_clause, self.instances[ukind]) - return next(s, None) - - def is_consistent(self): - ''' - Check the model for integrity violations. - ''' - if not xtuml.check_association_integrity(self): - return False - - 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() - - 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__ - if cache_key not in cache: - cache[cache_key] = Query(self.instances[target_kind], kwargs) - - return cache[cache_key].execute() - - def _formalized_query(self, source, target): - return lambda inst, **kwargs: self._select_endpoint(inst, source, - 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 - association. - - The resulting query will return an instance or None. - - Usage example: - - >>> from xtuml import navigate_one as one - >>> m = xtuml.load_metamodel('db.sql') - >>> inst = m.select_any('My_Modeled_Class') - >>> other_inst = one(inst).Some_Other_Class[4]() - - The syntax is somewhat similar to the action language used in BridgePoint. - The same semantics would be expressed in BridgePoint as:: - - select any inst from instances of My_Modeled_Class; - select one other_inst related by inst->Some_Other_Class[R4]; - - **Note:** If the navigated association is reflexive, a phrase must be - provided, e.g. - - >>> other_inst = one(inst).Some_Other_Class[4, 'some phrase']() - ''' - return navigate_any(instance) - - -def navigate_any(instance_or_set): - ''' - Initialize a navigation from an instance, or a set of instances, to - associated instances across a one-to-many or many-to-many association. - - The resulting query will return an instance or None. - ''' - return NavOneChain(instance_or_set) - - -def navigate_many(instance_or_set): - ''' - Initialize a navigation from an instance, or a set of instances, to - associated instances across a one-to-many or many-to-many association. - - The resulting query will return a set of instances. - ''' - return NavManyChain(instance_or_set) - - -def navigate_subtype(supertype, rel_id): - ''' - Perform a navigation from *supertype* to its subtype across *rel_id*. The - navigated association must be modeled as a subtype-supertype association. - - The return value will an instance or None. - ''' - if not supertype: - return - - if isinstance(rel_id, int): - rel_id = 'R%d' % rel_id - - for kind, query in supertype.__q__.items(): - if rel_id not in query: - continue - - subtype = navigate_one(supertype).nav(kind, rel_id)() - if subtype: - return subtype - - -def sort_reflexive(set_of_instances, rel_id, phrase): - ''' - Sort a *set of instances* in the order they appear across a conditional and - 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): - return QuerySet() - - if isinstance(rel_id, int): - rel_id = 'R%d' % rel_id - - 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] - def sequence_generator(): - count = 0 - for inst in filter(first_filt, set_of_instances): - 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') - - return QuerySet(sequence_generator()) - - -def relate(from_instance, to_instance, rel_id, phrase=''): - ''' - Relate *from_instance* to *to_instance* across *rel_id*. For refelxive - association, a *phrase* indicating the direction must also be provided. - - 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. - ''' - 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, - relate) - - updated = False - for from_name, to_name in zip(ass.source.ids, ass.target.ids): - if _is_null(to_instance, to_name): - raise ModelException('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 ModelException('instance is already related') - - updated = True - setattr(from_instance, from_name, to_value) - - if updated: - for deferred_relate in post_process: - deferred_relate() - - return updated - - -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. - - 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. - ''' - 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) - - updated = False - from_names = set(ass.source.ids) & from_instance.__d__ - from_instance.__i__ - for from_name in from_names: - if _is_null(from_instance, from_name): - raise ModelException('instances not related') - - updated = True - setattr(from_instance, from_name, None) - - if updated: - for deferred_unrelate in post_process: - deferred_unrelate() - - return updated - - -def delete(instance): - ''' - Delete an *instance* from its metamodel. - ''' - 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") - - -def where_eq(**kwargs): - ''' - Return a where-clause function 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)) - ''' - 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 - diff --git a/xtuml/persist.py b/xtuml/persist.py index 073caec..13b2aff 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. @@ -47,17 +62,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 = xtuml.get_metaclass(instance) + 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,24 +86,9 @@ 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) - - return s - - -def serialize_association_link(lnk): - ''' - Serialize an xtuml metamodel association link. - ''' - s = '%s %s (%s)' % (lnk.cardinality.upper(), - lnk.kind, - ', '.join(lnk.ids)) + for inst in metamodel.instances: + s += serialize_instance(inst) - if lnk.phrase: - s += " PHRASE '%s'" % lnk.phrase - return s @@ -97,19 +96,34 @@ 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) + s1 = '%s %s (%s)' % (ass.source_link.cardinality, + ass.source_link.to_metaclass.kind, + ', '.join(ass.source_keys)) + + 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.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, + s2) 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 = xtuml.get_metaclass(Cls) + 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,13 +131,12 @@ def serialize_class(Cls): def serialize_unique_identifiers(metamodel): s = '' - for Cls in sorted(metamodel.classes.values()): - 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): @@ -131,10 +144,10 @@ 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): + for ass in sorted(metamodel.associations, key=lambda x: x.rel_id): s += serialize_association(ass) return s @@ -159,84 +172,80 @@ 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): return serialize_association(resource) - elif isinstance(resource, xtuml.AssociationLink): - return serialize_association_link(resource) - - elif isinstance(resource, xtuml.BaseObject): + elif isinstance(resource, xtuml.Class): 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: - for lst in metamodel.instances.values(): - for inst in lst: - s = serialize_instance(inst) - f.write(s) + 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: - for kind in sorted(metamodel.classes.keys()): - s = serialize_class(metamodel.classes[kind]) + with open(path, mode) as f: + 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): + for ass in sorted(metamodel.associations, key=lambda x: x.rel_id): s = serialize_association(ass) 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: - for Cls in sorted(metamodel.classes.values()): - for name, attributes in Cls.__u__.items(): - attributes = ', '.join(attributes) - s = 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (name, - Cls.__name__, - attributes) + 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) + s = 'CREATE UNIQUE INDEX %s ON %s (%s);\n' % (index_name, + metaclass.kind, + attribute_names) 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: - for kind in sorted(metamodel.classes.keys()): - Cls = metamodel.classes[kind] - s = serialize_class(Cls) + with open(path, mode) as f: + for kind in sorted(metamodel.metaclasses.keys()): + 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): + for ass in sorted(metamodel.associations, key=lambda x: x.rel_id): 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) + diff --git a/xtuml/tools.py b/xtuml/tools.py index e774399..a5eb631 100644 --- a/xtuml/tools.py +++ b/xtuml/tools.py @@ -1,5 +1,87 @@ # 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 collections +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): ''' @@ -39,6 +121,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. diff --git a/xtuml/version.py b/xtuml/version.py index 2a4ee45..06c139e 100644 --- a/xtuml/version.py +++ b/xtuml/version.py @@ -1,9 +1,24 @@ # 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 . name = 'pyxtuml' -date = '2016-04-09' -version = '0.8' -release = '0.8.2' +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)