DE69131336T2 - Verfahren und Gerät um eine inhaltsaddressierbare Abfragemöglichkeit einer Programmiersprache hinzuzufügen - Google Patents
Verfahren und Gerät um eine inhaltsaddressierbare Abfragemöglichkeit einer Programmiersprache hinzuzufügenInfo
- Publication number
- DE69131336T2 DE69131336T2 DE69131336T DE69131336T DE69131336T2 DE 69131336 T2 DE69131336 T2 DE 69131336T2 DE 69131336 T DE69131336 T DE 69131336T DE 69131336 T DE69131336 T DE 69131336T DE 69131336 T2 DE69131336 T2 DE 69131336T2
- Authority
- DE
- Germany
- Prior art keywords
- query
- language
- statements
- objects
- host
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 43
- 230000006870 function Effects 0.000 claims description 62
- 230000002085 persistent effect Effects 0.000 claims description 34
- 230000014509 gene expression Effects 0.000 claims description 26
- 238000007781 pre-processing Methods 0.000 claims description 15
- 239000000203 mixture Substances 0.000 claims description 9
- 230000007704 transition Effects 0.000 claims description 2
- 238000013499 data model Methods 0.000 description 29
- 230000006399 behavior Effects 0.000 description 9
- 230000010354 integration Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 239000002131 composite material Substances 0.000 description 6
- 238000007726 management method Methods 0.000 description 6
- 230000001052 transient effect Effects 0.000 description 6
- 238000013519 translation Methods 0.000 description 6
- 238000013459 approach Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000009472 formulation Methods 0.000 description 2
- 238000009533 lab test Methods 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241000854350 Enicospilus group Species 0.000 description 1
- 206010065042 Immune reconstitution inflammatory syndrome Diseases 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- HUTDUHSNJYTCAR-UHFFFAOYSA-N ancymidol Chemical compound C1=CC(OC)=CC=C1C(O)(C=1C=NC=NC=1)C1CC1 HUTDUHSNJYTCAR-UHFFFAOYSA-N 0.000 description 1
- 230000027455 binding Effects 0.000 description 1
- 238000009739 binding Methods 0.000 description 1
- 239000008280 blood Substances 0.000 description 1
- 210000004369 blood Anatomy 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013497 data interchange Methods 0.000 description 1
- 230000000779 depleting effect Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000036039 immunity Effects 0.000 description 1
- 206010022000 influenza Diseases 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- JEIPFZHSYJVQDO-UHFFFAOYSA-N iron(III) oxide Inorganic materials O=[Fe]O[Fe]=O JEIPFZHSYJVQDO-UHFFFAOYSA-N 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000007935 neutral effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 208000008128 pulmonary tuberculosis Diseases 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000011435 rock Substances 0.000 description 1
- 230000009870 specific binding Effects 0.000 description 1
- 230000005477 standard model Effects 0.000 description 1
- 201000008827 tuberculosis Diseases 0.000 description 1
- 238000002604 ultrasonography Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/2438—Embedded query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/289—Object oriented databases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
- Y10S707/99934—Query formulation, input preparation, or translation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
Description
- Diese Erfindung bezieht sich auf objektorientierte Programmiersprachen und auf objektorientierte Datenbank-Managementsysteme und genauer auf eine Sprache zum Abfragen von Sammlungen von unter Verwendung einer Host-Programmiersprache modellierten Objekten, die ihrerseits in einem objektorientierten Datenbanksystem gespeichert sein können.
- Die Berichte der 15. Internationalen Konferenz über sehr große Datenbanken, 22.-25. August 1989, S. 433-442, offenbaren eine objektorientiert strukturierte Programmiersprache mit Anweisungen zum Abfragen einer Datenbank. Das Ergebnis des Abfragens der Datenbank ist eine ebenfalls objektorientiert strukturierte Unterdatenbank. Die von diesem Artikel vorgeschlagene Sprache ist eine vollständig neue und in sich abgeschlossene Sprache, d. h. keine Erweiterung einer existierenden Sprache. Zusätzlich zu den Abfrageanweisungen ermöglicht die Sprache, an die Objekte, aus denen die Ergebnisse einer Abfrage bestehen, Meldungen zu schicken oder Operationen an ihnen auszuführen; diese Meldungen oder Operationen können, wie z. B. "print" und "display", computersystemorientiert oder, wie z. B. "hire-employee", anwenderdefiniert sein. Das verwendete Objektmodell ermöglicht sowohl die Verallgemeinerung als auch die Aggregation von Hierarchien. Die verwendeten Abfrageanweisungen besitzen die folgende Struktur:
- context association pattern expression
- where conditions
- select object classes and/or attributes
- operations object classes
- Klassen von Objekten, die miteinander verwandt sein können, d. h. gemäß dem besonderen verwendeten Realitätsmodell miteinander verwandt sein können, werden in der Kontextzeile spezifiziert, wobei die besonderen Objekte jener Klassen, die über tatsächlich existierende Bezugnahmen miteinander verwandt sind, zurückgegeben werden. Diese Objekte werden dann gemäß den in der Where-Klausel spezifizierten Bedingungen gefiltert. Die Auswahlzeile gibt von der gefilterten Gruppe der Objekte die Objekte besonderer Klassen oder besonderer Attribute zurück. Die folgende Zeile kann zum Ausführen von Operationen auf dem Ergebnis der Abfrage verwendet werden, wobei im Fall einer Gruppe von Objekten Meldungen an sie gesendet werden können. Die durch eine Abfrage erzeugten Unterdatenbanken können zur weiteren Verarbeitung benannt und dauerhaft gesichert werden. Mengenoperationen wie die Vereinigung und der Durchschnitt werden ebenfalls offenbart. Angewandte Informatik 4/87 offenbart auf den S. 149-156 eine MEMOPASCAL genannte Einbettung einer existierenden Abfragesprache MEMODAX in eine Host-Sprache PASCAL. MEMODAX ist ein relationales Datenbanksystem. Es werden Erweiterungsanweisungen bereitgestellt, die Erklärungen von Variablen eines Datenbanktyps und eines Relationstyps ermöglichen. (Eine Relation ist eine Tabelle von Daten in einer relationalen Datenbank und enthält Datensätze oder Tupel, die jeweils die gleiche Feldstruktur besitzen.) Die Erweiterungsanweisungen umfassen außerdem eine Auswahloperation, in der der Satz der zurückgegebenen Tupel einer Relation zugewiesen wird. Zum Umsetzen der Erweiterungsanweisungen in Laufzeitaufrufe für das MEMODAX-System wird ein Vorkompilierer verwendet. Der Artikel legt dar, daß es ein Vorteil ist, z. B. über eine universelle Relationsschnittstelle einen von dem über das MEMOPASCAL- Programm verschiedenen alternativen Zugriff auf die MEMODAX- Datenbank zu besitzen.
- Das relationale Modell stellt die Daten in einer Datenbank als eine Sammlung von Relationen dar. Formlos ähnelt jede Relation einer Tabelle. Jede Zeile in einer Tabelle stellt eine Sammlung verwandter Datenwerte dar, die als eine Tatsache interpretiert werden können, die ein Subjekt in der Realität beschreibt. Jede Tabelle und jede Spalte in einer relationalen Datenbank besitzt einen Namen. Die Namen werden zur Hilfe zum Interpretieren der Bedeutung der in jeder Zeile einer Tabelle enthaltenen Werte verwendet. Zum Beispiel wird die Tabelle 20 in Fig. 1 Person genannt, da jede ihrer Zeilen Tatsachen über eine besondere Person darstellt. Die Spaltennamen Name 22, SSN 24, Alter 26 und Adresse 28 spezifizieren, wie die Datenwerte in jeder Zeile auf der Grundlage der Spalte, der jeder Wert angehört, zu interpretieren sind. Alle Werte in einer Spalte haben den gleichen Typ.
- In der Terminologie der relationalen Datenbanken wird eine Tabelle eine Relation, ein Spaltenname ein Attribut und eine Zeile ein Tupel genannt. Relationen werden mittels eines durch R(A&sub1;, A&sub2;, ..., An) bezeichneten Relationsschemas, wobei R der Relationsname und A&sub1;, A&sub2;, ..., An die Attribute sind, beschrieben. Zum Beispiel ist das Schema der Relation Person nach Fig. 1 Person(Name, SSN, Alter, Adresse).
- In einer relationalen Datenbank werden die Daten unter Verwendung einer Datenbanksprache definiert, abgefragt und aktualisiert. Der Datendefinitionsteil der Sprache wird als die Datendefinitionssprache (DDL) bezeichnet, während der Abfrage- und der Aktualisierungsteil der Sprache als die Datenmanipulationssprache (DML) bezeichnet werden.
- Jedes kommerzielle relationale Datenbank-Managementsystem (DBMS) ist mit einer Datenbanksprache ausgestattet. Am besten bekannt ist die als die Datenbanksprache für den relationalen DBMS-Prototyp des Systems R der International Business Machines (IBM) erzeugte Strukturierte Abfragesprache (SQL), die nun einen ANSI-Datenbank-Sprachenstandard für relationale DBMSs dar stellt. Obgleich das (für den an der Universität von Kalifornien in Berkeley für den relationalen DBMS-Prototyp INGRES konstruierte) QUEL eine weitere wohlbekannte Datenbanksprache ist, findet SQL als eine relationale Abfragesprache breitere Verwendung.
- Die SQL-Befehle für die Datendefinition in der Datenbank sind CREATE TABLE (spezifiziert ein Relationsschema), ALTER TABLE (fügt zu einem Schema ein Attribut hinzu) und DROP TABLE (löscht ein Schema). Beispiele dieser SQL-Datendefinitionsanweisungen für die Relation Person nach Fig. 1 wären:
- Sobald die Datenbank definiert wurde, wird die SELECT-Anweisung in SQL zum Wiedergewinnen von Informationen aus der Datenbank verwendet. Die Grundform der SELECT-Anweisung ist wie folgt aus drei Klauseln - SELECT, FROM und WHERE - aufgebaut:
- SELECT < attributes>
- FROM < tables>
- WHERE < predicate> ;
- wobei < attributes> eine Liste von Attributnamen, deren Werte durch die Abfrage wiedergewonnen werden sollen, < tables> eine Liste von Relationsnamen, die die wiederzugewinnenden Daten enthält, und < predicate> ein Boolesches Prädikat, das eine durch die wiederzugewinnenden Tupel zu erfüllende Nebenbedingung spezifiziert, ist.
- Zum Beispiel lautet die zum Wiedergewinnen des Namens und der Adresse aller weniger als 30 Jahre alten Personen erforderliche SQL-Abfrage:
- SELECT Name, Address
- FROM Person
- WHERE Age < 30;
- Leider besitzt SQL, insbesondere bei der Verwendung zum Abfragen objektorientierter Daten, wie andere momentane Abfragesprachen mehrere Nachteile. Diese Nachteile stammen von der Tatsache her, daß sie als eine Schnittstelle für ein relationales Modell konstruiert wurde, die nur einfache Objekte (Tupel) und nicht zusammengesetzte Objekte behandelt. Im Ergebnis behandelt sie keine Vererbung oder Datenabstraktion, ist nicht eng an eine Programmiersprache gekoppelt und unterstützt keine starke Typisierung. Tabelle 1: Ein Beispiel von SQL, eingebettet in C.
- SQL kann in Verbindung mit einer allgemeinen Programmiersprache wie etwa C, FORTRAN oder COBOL verwendet werden. Eine solche Programmiersprache wird die Host-Sprache genannt. Eine SQL- Anweisung kann in eine Host-Sprache eingebettet werden. Eine eingebettete SQL-Anweisung unterscheidet sich von den Host- Sprachenanweisungen dadurch, daß ihr ein spezielles Schlüsselwort vorangestellt ist, so daß ein Vorkompilierer die eingebetteten SQL-Anweisungen von der Host-Sprachenanweisung unterscheiden kann. Zum Beispiel gehen irgendeiner eingebetteten SQL-Anweisung in der Host-Sprache C die Schlüsselwörter EXEC SQL voraus. Das in Tabelle 1 gezeigte Programmstück zeigt die Art, in der SQL in ein C-Programm zum Wiedergewinnen des Namens und der Adresse aller weniger als 30 Jahre alten Personen eingebettet ist.
- Der Unterschied zwischen den Typsystemen der Host-Sprache und der eingebetteten Abfragesprache ist normalerweise für den Anwendungsprogrammierer sehr offensichtlich, was zu ernsthaften Problemen führt. Zunächst geht die starke Typisierung in der Datenbankschnittstelle verloren. Die starke Typisierung stellt in einer Programmiersprache sicher, daß die Argumente der Funktionen den richtigen Typ haben; eine Programmiersprache mit einer starken Typisierung gilt als sicherer und effizienter als eine, die kein Erzwingen von Typen unterstützt. In den momentanen SQL-Einbettungen ist die Darstellungen der Host-Sprache und der Datenbank-Abfragesprache verschieden, wobei der Programmierer zum Kopieren seiner Daten in die Datenbank die starke Typisierung durchbrechen muß. Experimentelle dauerhafte Programmiersprachen korrigieren dieses Problem, weisen aber keine Abfrageerweiterungen auf. Zweitens können Abfragesprachen einschließlich der eingebetteten SQL nur Abfragen zum Wiedergewinnen dauerhafter Datenbankobjekte (d. h. in der relationalen Datenbank gespeicherter Daten) im Speicherraum des Programms formulieren. Das Abfragen von Übergangsdaten, die nur während einer einzelnen Ausführung eines Programms im Hauptspeicher des Computers existieren, oder dauerhafter Objekte nach deren Eintritt in den Speicherraum des Programms ist nicht möglich. Drittens können Host-Sprachen-Anweisungungen (z. B. in der Host- Sprache geschriebene anwenderdefinierte Funktionen) nicht in Abfragen verwendet werden, können Abfragen nicht (z. B. als Parameter für Funktionen) frei mit Host-Sprachen-Anweisungen gemischt werden und müssen spezifischen Protokollen genügen. Viertens stellen Programmiersprachen typischerweise keinen SET- Typ als einen ihrer Grundtypen bereit. Folglich kann die vollständige Gruppe der durch eine Abfrage zurückgegebenen Objekte nicht für ein Programm verfügbar gemacht werden. Es kann nur jeweils ein Tupel für ein Programm verfügbar gemacht werden. Das in allen Einbettungen von SQL verwendete Konzept eines Cur sors (Anweisung 9 aus Tabelle 1) erzwingt diese tupelweise Verarbeitung (Anweisungen 12-16 aus Tabelle 1). Schließlich sind die Syntax und die Semantik der Abfrage- und der Host-Sprache vollständig verschieden, wobei der Programmierer diese Unterschiede erlernen und sich ihrer bewußt sein muß.
- Wie oben erwähnt wurde, stellt das relationale Modell die Daten in Tabellenform dar. Ein Tupel in einer Relation kann nur aus atomaren Werten gebildet werden. Somit können die Informationen über eine Person und über alle ihre Kinder (wie in Tabelle 30 von Fig. 2 zu sehen) nicht in einer einzelnen Relation dargestellt werden. Außerdem kann das relationale Modell keine Vererbung und keine durch die Host-Sprache definierten, anwenderdefinierten abstrakten Datentypen behandeln. Das liegt daran, daß die Typsysteme der Host- und der Abfragesprache verschieden sind.
- Der objektorientierte Zugang zur Modellierung von Daten liefert eine bessere Übereinstimmung zwischen realen Subjekten und der Art, in der sie in einer Datenbank dargestellt werden. Ein zentrales Konzept in diesem Ansatz ist das Konzept eines Objekts, das eine Abstraktion eines für die Anwendung relevanten Dings in der Realität ist. Ein Objekt wird von zwei Hauptkomponenten gebildet: von seinem Zustand und von seinem Verhalten.
- Der Zustand besteht aus einer Sammlung von (auch Instanzvariable, Datenelemente oder Schlitze genannten) Attributen. Die Attribute können genau als die Attribute eines Tupels betrachtet werden, das ein reales Subjekt in dem relationalen Modell darstellt. Das Verhalten besteht aus einer Sammlung von (auch Operationen, Verfahren oder Elementfunktion genannten) Funktionen, die das Verhalten des Objekts kapseln. Die Sammlung der Funktionen, die das Verhalten eines Objekts modellieren, wird auch als die Schnittstelle des Objekts bezeichnet und ist die einzige Möglichkeit, mit einem Objekt zu wechselwirken. Eine wichtige Eigenschaft eines Objekts besteht darin, daß sein Privatzustand nur durch seine eigenen Operationen manipuliert werden kann. Diese Eigenschaft stellt sicher, daß die Realisierung ei nes Objekts nicht von den internen Einzelheiten anderer Objekte, sondern nur von ihren Operationen abhängen kann, was, da sie spezifizieren, welche Operation erwünscht ist, nicht aber, wie die Operation ausgeführt werden sollte, die Modularität und die Datenunabhängigkeit der Anwendungen sicherstellt.
- relationales Konzept objektorientiertes Konzept
- Relationsschema Klasse oder Typ
- Attribut Attribut, Datenelement, Schlitz
- Funktion, Verfahren, Operation, Elementfunktion
- Tupel Objekt
- Relation Gruppe der Objekte
- Eine Klasse (oder ein Typ) beschreibt die Realisierung einer Gruppe von gleichartigen Objekten. Jedes Objekt, gelegentlich Instanz genannt, muß zu einer Klasse gehören. Tabelle 2 zeigt die Korrelation zwischen relationalen und objektorientierten Konzepten.
- Klassenname Employee
- Superklasse Person
- Attribute Hire_date, Job_grade, Salary, Project
- Funktionen Hire employee, Increase_salary, Assign_project, Promote_employee
- Tabelle 3 zeigt die Hauptkomponenten einer Beispielklassendefinition.
- Im Gegensatz zu Relationen sind Klassen in einer Vererbungshierarchie organisiert. Eine Klasse kann in einer Unterklasse verfeinert oder spezialisiert werden, die ihr Verhalten erbt.
- Die Klasse Employee aus Tabelle 3 erklärt, daß die Objekte der Klasse das Verhalten der Klasse Person erben, die in der Hierarchie der Vorgänger von Employee ist. Das relationale Modell besitzt diese Ideen des Verhaltens und der Vererbung nicht.
- In dem objektorientierten Modell kann ein Objekt aus anderen, beliebig komplexen Objekten zusammengesetzt sein. Zum Beispiel besteht ein Objekt Auto aus einem Objekt Fahrgestell und einem Objekt Karosserie. Ein Fahrgestell besteht seinerseits aus den Objekten Rahmen, Räder und Motor.
- Jedes Objekt besitzt eine Objektidentität, die das Objekt eindeutig identifiziert und unabhängig vom Zustand des Objekts ist. Dies ermöglicht die Bezugnahme auf ein Objekt durch andere Objekte, so daß es gemeinsam genutzt werden kann. Im Gegensatz dazu können in dem relationalen Modell Tupel (das Objekt des Modells) nicht gemeinsam genutzt werden. Ein Tupel ist vollständig durch die Werte seiner Attribute identifiziert, wobei in einer Relation keine zwei Tupel existieren können, die in bezug auf alle ihre Attribute die gleichen Werte haben.
- Es wird nun die Programmiersprache C&spplus;&spplus; als ein Beispiel eines objektorientierten Datenmodells betrachtet. Das Datenmodell von C&spplus;&spplus; umfaßt eine Gruppe vordefinierter (eingebauter oder primitiver) Datentypen einschließlich: Zeichen, Ganzzahl, Langzahl, Kurzzahl, Gleitkommazahl und doppelt genaue Zahl. Diese primitiven Typen können zum Definieren komplexerer Typen verwendet werden.
- Eine Klasse ist der Mechanismus zum Definieren eines solchen komplexen Typs, der den Zustand und das Verhalten einer Sammlung von Objekten bestimmt. Die Definition einer Klasse umfaßt das Spezifizieren einer Gruppe von Datenelementen (Attributen oder Instanzvariablen) und einer Gruppe von Elementfunktionen (Operationen oder Verfahren). Ein Klassenelement (eine Elementfunktion oder ein Datenelement) kann als öffentlich, privat oder geschützt erklärt werden. Auf ein öffentliches Element kann von einer beliebigen Stelle in einem Programm aus zuge griffen werden. Auf ein privates Element können nur die Elementfunktionen seiner Klasse zugreifen. Auf ein geschütztes Element können die Elementfunktionen seiner Klasse sowie die Elementfunktionen der von ihr abgeleiteten Klassen zugreifen. Ein abstrakter Datentyp ist eine Klasse, die eine öffentliche Gruppe von Elementfunktionen und keine öffentlichen Datenelemente besitzt (alle ihre Datenelemente sind als privat oder geschützt erklärt).
- Beim Definieren einer Klasse wird der Typ jedes ihrer Datenelemente spezifiziert. Der Typ eines Datenelements kann einer der vordefinierten Datentypen (Ganzzahl, Gleitkommazahl usw.) oder ein anderer, anwenderdefinierter Typ sein. Diese Fähigkeit in C&spplus;&spplus; ermöglicht das Aufbauen von Aggregationshierarchien (gelegentlich als Kompositionshierarchien bezeichnet) oder Graphen zur Darstellung komplexer Objekte, die rekursiv bezüglich anderer Objekte definiert sind. Rekursive Definitionen, in denen ein Datenelement einer Klasse zurück auf die gleiche Klasse zeigt, sind ebenfalls möglich.
- Ein Klasse kann ebenfalls von einer oder von mehreren Basisklassen abgeleitet werden, wobei somit die einzelne und die mehrfache Vererbung unterstützt wird. Eine abgeleitete Klasse kann selbst als die Basisklasse für weitere Ableitungen dienen, wobei dies den Aufbau von Verallgemeinerungshierarchien oder Gittern ermöglicht. Eine abgeleitete Klasse erbt alle öffentlichen und geschützten Elemente ihrer Basisklasse und wird als eine Unterklasse (ein Untertyp) ihrer Basisklasse bezeichnet. Auf private Elemente einer Basisklasse kann nicht von irgendwelchen anderen Klassen einschließlich von irgendwelchen abgeleiteten Klassen aus zugegriffen werden.
- Da die Programmiersprache C&spplus;&spplus; viele der zuvor diskutierten Beschränkungen des relationalen Datenmodells einschließlich der Darstellung beliebig komplexer Elemente, der Vererbung und anwenderdefinierter abstrakter Datentypen überwindet, ist sie eine gute Grundlage für ein Datenmodell. Da C&spplus;&spplus; keine dauerhaften Daten, keine Gleichzeitigkeitssteuerung und keine Wiedergewin nung behandeln kann, unterliegt es als ein Datenbanksystem jedoch noch einigen Beschränkungen; außerdem fehlt C&spplus;&spplus; die Unterstützung für einen SET-Typ und für einen assoziativen Abfragemechanismus. Eine Überwindung dieser letzteren Beschränkungen ist wünschenswert.
- Frühere objektorientierte Abfragesprachen können in zwei Gruppen eingeteilt werden. Dies sind die Erweiterungen zu SQL und jene, die versuchen, zu C&spplus;&spplus; eine Abfragefähigkeit hinzuzufügen. Bis zur vorliegenden Erfindung hat kein früherer Ansatz eine Kombination der beiden geschaffen.
- Beispiele solcher objektorientierten Abfragesprachen sind OSQL, RELOOP und O+&spplus;. OSQL ist die Abfragesprache des bei Hewlett- Packard entwickelten objektorientierten Datenbank-Managementsystem-Prototyps IRIS. RELOOP ist eine der Abfragesprachen des bei Altair entwickelten objektorientierten Datenbank-Managementsystem-Prototyps O&sub2;. Sowohl OSQL als auch RELOOP beruhen auf SQL, wobei sie aber keine Host-Sprachausdrücke in Abfragen ermöglichen und somit nicht eng mit einer Programmiersprache integriert sind.
- O++, eine von C&spplus;&spplus; abgeleitete Datenbankprogrammiersprache, ist die Sprache des bei AT&T entwickelten Datenbanksystem-Prototyps ODE. O&spplus;&spplus; enthält in seiner Syntax Iteratorausdrücke (z. B. for each), die das Manipulieren von Gruppen von Objekten fast so erklärend wie relationale Abfragesprachen ermöglichen. O&spplus;&spplus; beruht auf C&spplus;&spplus;, wobei die Grundstruktur der Abfrageanweisungen aber nicht die SELECT-FROM-WHERE-Form (SFW-Form) von SQL verwendet. O&spplus;&spplus; ist eine Sondersprache, die einen besonderen und teuren Kompilierer erfordert und wie OSQL und RELOOP nur dauerhafte Objekte und keine Übergangsobjekte abfragen kann.
- Außerdem werden in herkömmlichen Datenbanken Daten durch den Anwendungsprogrammcode jedesmal aus dem und in das Datenmodell des Programms in das Datenmodell der Datenbank übersetzt, wenn Daten zwischen den beiden verschoben werden. Das MACH-Projekt von Carnegie-Mellon berichtet, daß 90% der Anwendungen, die Daten gemeinsam nutzen, dies auf dem gleichen Maschinentyp und in der gleichen Programmiersprache tun. Durch Übersetzen des Datenmodells der Sprache in ein anderes (z. B. relationales) Datenmodell zahlt die Datenbank-Programmiersprachen-Gesellschaft 100% der Zeit für eine Abbildung (die Übersetzungskosten von dem Datenmodell der Sprache in das neutrale Datenmodell), wenn sie nur 10% der Zeit benötigt wird. Es ist wünschenswert, daß dies nur geschieht, wenn es zur gemeinsamen Nutzung von Daten unter verschiedenen Programmiersprachen, die verschiedene Datenmodelle nutzen, erforderlich ist. Da die Übersetzung den Programmierern überlassen ist, führt dies ferner eine Wahrscheinlichkeit von Fehlern und Ineffizienzen ein. Sogar 30% der Anwendungen, die auf Datenbanken zugreifen, werden im Programmierercode zum Ausführen solcher Abbildungen verbracht, was die Produktivität der Programmierer wesentlich erschöpft. Außerdem wird dadurch, daß diese Übersetzung den Anwendungsprogrammierern überlassen wird, die typsichere starke Typisierung potentiell genau an der Programm-Datenbank-Schnittstelle gebrochen (nicht durch das System sichergestellt). Da das typsichere Verhalten in den Programmen als ein wesentliches Merkmal betrachtet und die in der Datenbank gespeicherten Daten als ein Hauptbetriebsmittel eines Unternehmens angesehen werden, ist dieser Verlust der starken Typisierung an der Datenbank- Programm-Schnittstelle ein großes Problem. Die heutigen Datenbanksysteme erhalten die Typsicherheit an dieser Schnittstelle nicht; die Datenbanken von morgen werden dies tun müssen.
- Schließlich unterstützt kein OODBMS eine nahtlose Integration zwischen der Abfrage- und der Host-Sprache. Allgemein werden Abfragesprachen in die Host-Sprache in einer Ad hoc-Weise, nicht durch nahtlose Erweiterung der Host-Sprache mit Gruppen und Abfragen, eingebettet.
- Angesichts der obigen mit dem Stand der Technik verknüpften Probleme besteht eine Aufgabe der vorliegenden Erfindung in der Schaffung einer Vorrichtung und eines Verfahrens zum Erzielen einer besseren Integration (auch als Nahtlosigkeit bekannt) zwischen einer Abfragesprache und einer objektorientierten Host-Programmiersprache.
- Eine weitere Aufgabe der vorliegenden Erfindung ist die Schaffung einer Vorrichtung und eines Verfahrens, die die Datenbankprogrammierung für Programmierer unter Verwendung einer spezifischen Host-Sprache zugänglicher machen.
- Gemäß der vorliegenden Erfindung wird ein Verfahren zum Ausführen von Abfragen von Objektengruppen in einem Computer geschaffen, wobei die Abfragen in Abfrageanweisungen eines Programms explizit spezifiziert sind,
- dadurch gekennzeichnet, daß
- das Programm Anweisungen einer objektorientierten Host- Programmiersprache und Erweiterungssprachen-Anweisungen, die wenigstens die Abfrageanweisungen enthalten, umfaßt und daß die Abfrageanweisungen der Abfrage von Mengen von Objekten der Hast-Programmiersprache dienen,
- daß das Verfahren die Vorverarbeitung des Programms enthält und daß die Vorverarbeitung das Umsetzen wenigstens der Erweiterungssprachen-Abfrageanweisungen in Anweisungen der objektorientierten Host-Programmiersprache enthält, und daß das Verfahren ferner enthält:
- Kompilieren des resultierenden Programms in der Host- Sprache in ausführbaren Code und
- Ausführen des resultierenden ausführbaren Codes, wobei der Code ausgeführt wird, um das Ergebnis der Abfrageanweisungen zurückzugeben.
- Gemäß der vorliegenden Erfindung wird außerdem eine Vorrichtung zum Ausführen von Abfragen von Mengen von Objektgruppen ge schaffen, wobei die Abfragen in Abfrageanweisungen eines Programms explizit spezifiziert sind,
- dadurch gekennzeichnet, daß
- das Programm Anweisungen einer objektorientierten Host- Programmiersprache und Anweisungen einer Erweiterungssprache, die wenigstens die Abfrageanweisungen enthalten, umfaßt und daß die Abfrageanweisungen der Abfrage von Mengen von Objekten der Hast-Programmiersprache dienen,
- daß die Vorrichtung ein Mittel zum Vorverarbeiten des Programms enthält und daß die Vorverarbeitung das Umsetzen wenigstens der Erweiterungssprachen-Abfrageanweisungen in Anweisungen der objektorientierten Host-Programmiersprache enthält,
- und daß die Vorrichtung ferner enthält:
- ein Mittel zum Kompilieren des resultierenden Programms in der Host-Sprache in ausführbaren Code und
- ein Mittel zum Ausführen des resultierenden ausführbaren Codes, wobei der Code ausgeführt wird, um das Ergebnis der Abfrageanweisungen zurückzugeben.
- In einer bevorzugten Ausführungsform wird eine starke Typisierung an der Abfrageschnittstelle beibehalten, wobei auf diese Weise die Datenbankprogrammierung wesentlich erleichtert und zuverlässiger als herkömmliche SQL-Einbettungen gemacht wird.
- In einer bevorzugten Ausführungsform können Abfragen nicht nur an dauerhafte, sondern auch an Übergangssammlungen von Objekten formuliert werden, können anwenderdefinierte Funktionen in der Rost-Sprache zur Verwendung bei der Formulierung von Abfragen geschrieben werden, können Abfragen frei mit Host-Sprachen- Anweisungen, die ein Gruppenobjekt erwarten, gemischt werden, wird ein SET-Typ unterstützt, so daß vollständige Sammlungen von durch die Abfragen zurückgegebenen Objekten in der Host- Sprache verfügbar sind, wird eine Datenabstraktion unterstützt, werden die Vererbung und zusammengesetzte Objekte bei der Formulierung von Abfragen unterstützt und werden eine gleichförmigere Syntax und Semantik der Abfrage- und der Host-Sprache geschaffen.
- Diese Aufgaben werden in einer bevorzugten Ausführungsform dadurch erreicht, daß eine Vorrichtung und ein Verfahren geschaffen werden, die als Objektabfragesprache (OQL) bekannt sind. Der Begriff "OQL" bezieht sich auf das spezifische Verfahren zum Erweitern irgendeiner objektorientierten Host-Sprache mit zugeordneten Abfrageanweisungen, während sich "OQL[C&spplus;&spplus;]" auf die besondere Verbindung von OQL mit C&spplus;&spplus; bezieht, die die Verwendung bestimmter C&spplus;&spplus;-Ausdrücke bei der Formulierung von Abfragen ermöglicht. Wo die spezifische Host-Sprache nicht wichtig ist, wird der Begriff "OQL[X]" zum Bezeichnen einer Verbindung von OQL mit einer Host-Sprache X verwendet, wobei X z. B. C&spplus;&spplus;, CLOS, Smalltalk, Objective-C usw. ist.
- Grundsätzlich wendet OQL die SELECT-FROM-WHERE-Struktur (SFW- Struktur) der SQL-SELECT-Anweisung an und ermöglicht, geeignete Anweisungen der Host-Sprache in Abfragen zu verbinden. Die SFW- Struktur von SQL wird angewendet, da sie ein Standardmodell für die Formulierung von Abfragen in objektorientierten Host- Sprachen liefert, das sich in Datenbankanwendungen momentan eines breiten Gebrauchs erfreut.
- Die bevorzugte Ausführungsform OQL[C&spplus;&spplus;] erweitert das Typsystem von C&spplus;&spplus; durch eine Unterstützung eines Typs einer parametrisierten Gruppe, wobei sie auf diese Weise ermöglicht, daß C&spplus;&spplus; Gruppen behandelt. Somit ist die Erfindung dadurch, daß sie eine nahtlose Integration zwischen der Abfrage- und der Host- Sprache dadurch schafft, daß sie die Verwendung der von einer OQL[C&spplus;&spplus;]-Abfrage zurückgegebenen Gruppen an irgendeiner Stelle innerhalb eines C&spplus;&spplus;-Programms ermöglicht, bei der zu erwarten ist, daß eine Gruppe zu behandeln ist (z. B. ein Parameter für eine C&spplus;&spplus;-Funktion), daß sie die Verwendung mengenwertiger C&spplus;&spplus;- Funktionen in der FROM-Klausel einer OQL[C&spplus;&spplus;]-Anweisung ermöglicht und daß sie die freie Kombination von Booleschen C&spplus;&spplus;- Funktionen als Teil eines Prädikats in der WHERE-Klausel einer OQL[C&spplus;&spplus;]-Anweisung ermöglicht, mehr als eine Einbettung einer Abfragesprache in C&spplus;&spplus;. Diese Nahtlosigkeit in bezug auf die Sprache tritt auf, da C&spplus;&spplus; mit Gruppen von Datensätzen und Operationen auf Gruppen erweitert wird.
- Im Gegensatz zu vielen existierenden objektorientierten Abfragesprachen schafft die bevorzugte Ausführungsform der vorliegenden Erfindung eine bessere Integration mit der objektorientierten Programmiersprache C&spplus;&spplus;. Die durch die bevorzugte Ausführungsform der vorliegenden Erfindung gelösten Entwurfsaufgaben sind: minimale Datenmodellabhängigkeit durch Verwendung des Typsystems der Programmiersprache als ein nacktes Datenmodell, Datenabstraktion durch Beschränkung der Abfragen auf die Verwendung der öffentlichen Schnittstelle des Objekts, orthogonale Behandlung von Klassen als Typen und von Klassen als Typerweiterungen durch Unterstützen vom Anwender unterhaltener Klassenerweiterungen, Dauerhaftigkeit orthogonal zur Abfrageverarbeitung durch das Ermöglichen von Abfragen sowohl an Übergangsgruppen als auch an dauerhaften Gruppen und eine verringerte Leistungsfehlanpassung zwischen der Programmiersprache und der Abfragesprache durch Verwendung des gleichen Typsystems für beide Sprachen.
- OQL[C&spplus;&spplus;] ist minimal datenmodellabhängig. Dies wird dadurch erreicht, daß, anstatt ein neues proprietäres Datenmodell ganz von vorn zu definieren, nur die Kenntnis des Typsystems der Host-Sprache (in diesem Fall C&spplus;&spplus;) als ein "nacktes" Datenmodell vorausgesetzt wird. Die C&spplus;&spplus;-Konzepte des Objekts, der Klasse, des Datenelements, der Elementfunktion, der Vererbung und der Definitionen von Klassenzusammensetzungen schafft den Kern der meisten objektorientierten Datenmodelle.
- OQL[C&spplus;&spplus;] unterstützt die Datenabstraktion dadurch, daß es erzwingt, daß alle Abfragen über die öffentliche Schnittstelle (Elementfunktionen) des Objekts formuliert werden, wobei somit die interne Darstellung des Objekts verborgen wird. Dies wird durch das Analysiermodul 102 (siehe Fig. 4) von OQL[C&spplus;&spplus;] erreicht, das in dem Laufzeit-Datenwörterbuch 112, das alle Klasseninformationen enthält und irgendwelche Abfrageanweisungen, die auf irgend etwas anderem als auf der öffentlichen Schnittstelle der Klasse definiert sind, nicht zuläßt, nachschlägt. Eine bezüglich der privaten Datenelemente oder Elementfunktionen des Objekts falsch formulierte Abfrage führt zu einem in Fig. 4 gezeigten Syntaxfehler 122. Dies erzeugt das Prinzip der Datenunabhängigkeit, (d. h. der Immunität der Anwendungen gegenüber Änderungen an den zum Organisieren der Daten verwendeten Datenstrukturen), die eine der durch das relationale Modell eingeführten, in objektorientierten Datenbankabfragen zu bewahrenden Hauptvorteile ist.
- OQL[C&spplus;&spplus;] unterstützt explizite, durch den Anwender unterhaltene Gruppen dadurch, daß es erfordert, daß Programmierer in ihren Programmen Variablen vom Typ OQL_SET definieren. Dies bewirkt, daß die Konzepte der Klassendefinition und der Klassenerweiterung (der Gruppe der Instanzen einer Klasse) orthogonal sind. Wie es in allen Datenbanksystemen, die implizite Gruppen unterstützen, der Fall ist, sind im Ergebnis dessen möglicherweise nicht allen Klassen Gruppen zugeordnet, während einigen Klassen möglicherweise nicht eine, sondern viele Gruppen zugeordnet sind. Dies wird dadurch erreicht, daß ein Programmierer, anstatt implizite Gruppen von der Klassendefinition zugeordneten Objekten vorauszusetzen, explizit Variablen vom Typ OQL_SET definieren und diese Gruppen unter Verwendung der Elementfunktionen vom Typ OQL_SET (siehe Block 44 aus Tabelle 5 unten) bevölkern kann.
- OQL[C&spplus;&spplus;] ermöglicht Abfragen in Übergangsgruppen und dauerhaften Gruppen. In relationalen DBMSs und in allen momentanen OODBMSs werden Abfragen ausschließlich an dauerhaften Daten ausgeführt. In OQL ist es möglich, Übergangsgruppen, d. h. Gruppen, deren Lebensdauer ein einzelner Programmaufruf ist, zu definieren und abzufragen. Nun zurückkehrend zu Fig. 4 wird eine Abfrage von Übergangsgruppen durch Unterhalten eines "Laufzeit"-Datenwörterbuchs 112 erreicht, das alle durch die Anwendung definierten Übergangsklassen und dauerhaften Klassen und mengenwertigen Variablen verfolgt. Diese Datenwörterbuch- Informationen sind für den OQL-Abfrageprozessor 100 verfügbar, so daß ein geeigneter C&spplus;&spplus;- oder dauerhafter C&spplus;&spplus;-Code erzeugt wird. Dies macht den OQL-Zugang zur Abfrage unabhängig davon, ob die Daten dauerhaft in einem DBMS oder vorübergehend im Speicher eines Computers unterhalten werden. Als eine direkte Folge dieser Unabhängigkeit kann OQL als ein Werkzeug zum Unterstützen von Abfrageanweisungen in einer Host-Sprache verwendet werden.
- Dadurch, daß OQL[C&spplus;&spplus;] die Verwendung bestimmter Host-Sprachkonzepte bei der Formulierung von Abfragen ermöglicht, schafft es eine bessere Integration mit der Host-Sprache. Dies wird dadurch erreicht, daß, zusätzlich zu den OQL_SETs in der FROM- Klausel einer Abfrage eingegebene Bereichsvariable und anwenderdefinierte mengenwertige Funktionen, in der WHERE-Klausel anwenderdefinierte Boolesche Funktionen und vererbte Elementfunktionen und in der SELECT-Klausel Typobjekte und Ersetzbarkeit gefordert werden. Da alle Informationen über die Vererbungsklassenhierarchie in dem Datenwörterbuch 112, auf das der Analysierer 102, die Abfrageneuschreibung 104 und die Abfrageübersetzungsmodule 106 zugreifen, verfügbar sind, können der Analysierer und die Abfrageneuschreibmodule gültige Bezugnahmen auf vererbte Elementfunktionen erkennen und kann der Abfrageübersetzer den richtigen, der verarbeiteten Abfrage entsprechenden C&spplus;&spplus;- oder dauerhaften C&spplus;&spplus;-Code erzeugen. Dies ermöglicht eine viel besser Programmierbarkeit der Erfindung als SQL, ohne die speziellen, nochmals weiteren Spracherweiterungen zu SQL zum Erweitern seiner DML-Funktionalität zu benötigen.
- Außerdem schafft OQL[C&spplus;&spplus;] geschickte Schleifen-Konstrukte für C&spplus;&spplus;. Der Programmierer kann die relationale Berechnung von SQL ausnutzen, um zu spezifizieren, welche Daten wiederzugewinnen sind, wobei er die vorliegende Erfindung die höhere Spezifizierung in Schleifen abbilden läßt, die bestimmen, wie die Daten effizient wiederzugewinnen sind. Das "Was" wird durch das in den Abfrageprozessor 100 eingegebene erklärende OQL[C&spplus;&spplus;] 124 dargestellt, während das "Wie" durch den von dem Abfrageprozessor ausgegebenen C&spplus;&spplus;- oder dauerhaften C&spplus;&spplus;-Code 126 dargestellt wird. Dies erhöht die Produktivität des Programmierers, indem es ihm die Last des Bestimmens effizienter Zugriffswege abnimmt und ihm das Schreiben und Lesen des Codes erleichtert.
- In der vorliegenden Erfindung werden die Daten zwischen dem Programm- und dem Datenbank-Datenmodell durch den Anwendungsprogrammcode nur übersetzt, wenn Daten zwischen verschiedenen, auf verschiedenen Datenmodellen beruhenden Programmiersprachen gemeinsam genutzt werden müssen. Da die Datenbank-Programmiersprachen-Gemeinschaft nicht mehr für die Kosten von 100% der Zeit zu zahlen hat, wenn nur 10% der Zeit erforderlich sind, erzeugt dies große Einsparungen. In den relationalen und in anderen existierenden Systemen wird diese Übersetzung zwischen der Host-Sprache und der Datenbank durch Anwendungscode erreicht. In dauerhaften Programmiersprachen wird es durch eine von dem System unterhaltene Abbildung erreicht, die Datenstrukturen im Laufzeit-Host-Sprachen-Speicher in die/aus den externen Speicherdarstellungen übersetzt. OQL soll mit diesen letzteren dauerhaften Programmiersprachen arbeiten. In diesem Fall wird die dauerhafte oder vorübergehende Existenz der Gruppen in einer zur dauerhaften oder vorübergehenden Existenz irgendeiner anderen Host-Sprachen-Datenstruktur genau analogen Weise erreicht.
- Diese und weitere Merkmale und Vorteile der Erfindung werden für den Fachmann auf dem Gebiet aus der folgenden ausführlichen Beschreibung einer bevorzugten Ausführungsform offensichtlich, die zusammen mit der beigefügten Zeichnung zu nehmen ist, in der:
- Fig. 1 ein Blockdiagramm ist, das ein Beispiel einer Tabelle in dem relationalen Modell der Daten im Stand der Technik zeigt;
- Fig. 2 ein Blockdiagramm ist, das ein Beispiel von Daten zeigt, die mit dem Stand der Technik in dem relationalen Modell nicht dargestellt werden können;
- Fig. 3 eine schematische Darstellung einer Beispielklassenhierarchie ist, die ein Krankenhaus-Datenbanksystem beschreibt;
- Fig. 4 ein Blockschaltplan der Abfrageprozessorarchitektur gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung ist;
- Fig. 5 ein Diagramm der zum Kompilieren eines gemäß der vorliegenden Erfindung geschriebenen Programms erforderlichen Vorverarbeitungsphasen ist; und
- Fig. 6 ein Blockschaltplan ist, der die Lage einer Anwendung der vorliegenden Erfindung, von C&spplus;&spplus;-Anweisungen, von dauerhaften C&spplus;&spplus;-Anweisungen, von Übergangsdaten und von dauerhaften Daten im Hauptspeicher eines Computers zeigt.
- Obgleich die bevorzugte Ausführungsform der Objektabfragesprache (OQL) der vorliegenden Erfindung unten bezüglich ihrer besonderen Syntax und Semantik in bezug auf ihre Realisierung mit der Programmiersprache C&spplus;&spplus; weiter beschrieben wird, ist einiger zusätzlicher Hintergrund erforderlich.
- Es sollte erkannt werden, daß OQL, obgleich die unten ausführlich zu beschreibende bevorzugte Ausführungsform OQL[C&spplus;&spplus;] eine spezifische Bindung mit C&spplus;&spplus; als einer Host-Sprache zur Datenmodellierung und für Programmoperationen schafft, auf andere Sprachen wie etwa auf OQL[Cobol], auf OQL[CLOS], auf OQL[Smalltalk] usw. erweitert werden kann, wodurch Abfragefähigkeiten ebenso zu anderen Programmiersprachen hinzugefügt werden. OQL kann auf OQL[X] erweitert werden, wobei X ein Datenmodell einschließlich eines allgemeinen sprachneutralen Datenmodells; und einschließlich domänenspezifischer Datenmodelle für die computerunterstützte Entwicklung (z. B. das erweiterte Datenaustauschformat oder EDIF), für die computerunterstützte Software-Entwicklung (z. B. das Informationsentwicklungsmittel von TI), für die Wissensdarstellung (z. B. für ROCK der Carnegie-Group-Initiative), für Büroinformationssysteme (z. B. für die Bürodatenarchitektur SGML) usw. ist. OQL[X] definiert eine Familie von Bindungen zwischen einer Abfragesprache und entweder einer Host-Sprache oder einer Datenmodellierungsumgebung. Somit sollte die vorliegende Erfindung in keiner Weise nur auf eine C&spplus;&spplus;-Verbindung beschränkt werden.
- Die Syntax von OQL[C&spplus;&spplus;] beruht auf dem SFW-Paradigma von SQL, wird aber mit C&spplus;&spplus;-Ausdrücken erweitert. Da das SFW-Paradigma von SQL zum Abfragen nicht nur von relationalen Daten, sondern, wie aus der großen Anzahl der SQL-Erweiterungen ersichtlich ist, auch von durch andere Modelle dargestellten Daten verwendet werden kann, gilt es als datenmodellunabhängig. Die bevorzugte Ausführungsform der vorliegenden Erfindung verbindet genau das SFW-Paradigma von SQL mit dem Datenmodell von C&spplus;&spplus;.
- OQL[C&spplus;&spplus;] ist keine Einbettung in C&spplus;&spplus;, da die von OQL[C&spplus;&spplus;]- Abfragen herrührenden Gruppen an irgendeiner Stelle in einer C&spplus;&spplus;-Anweisung, die eine Gruppe (z. B. einen Parameter für eine C&spplus;&spplus;-Funktion) erwartet, verwendet werden können, da durch anwenderdefinierte Funktionen zurückgegebene Gruppen weiter abgefragt werden können und da anwenderdefinierte Funktionen als Teil der Prädikate von Abfragen verbunden werden können.
- OQL[C&spplus;&spplus;] ist eine erklärende und nichtprozedurale Sprache, d. h., daß der Programmierer OQL[C&spplus;&spplus;] nutzen kann, um zu spezifizieren, welche Daten wiedergewonnen werden müssen, und daß er OQL die höhere Spezifikation in Schleifen abbilden lassen kann, die bestimmen, wie die Daten effizient auszulesen sind. Dies erhöht die Produktivität des Programmierers dadurch, daß ihm die Last des Bestimmens effizienter Zugriffswege abgenommen und das Schreiben und das Lesen des Codes erleichtert wird.
- OQL[C&spplus;&spplus;] ist minimal datenmodellabhängig. Dies wird dadurch erreicht, daß, anstatt ein neues proprietäres Datenmodell ganz von vorn zu definieren, nur die Kenntnis des Typsystems der gegebenen Host-Sprache (in diesem Fall C&spplus;&spplus;) als ein Datenmodell vorausgesetzt wird. OQL[C&spplus;&spplus;] wendet die objektorientierten Datenmodellierungskonzepte und die Semantik von C&spplus;&spplus; einschließlich der Konzepte des Objekts, der Klasse, des Datenelements, der Elementfunktion, der Vererbung, der Zusammensetzung von Klassendefinitionen und der Nachrichtenabfertigung an, die zusammen einen Kern von in den meisten objektorientierten Datenmodellen zu findenden Konzepten bereitstellen. OQL[C&spplus;&spplus;] erweitert C&spplus;&spplus; durch Abfragen und Gruppen. Die in OQL[C&spplus;&spplus;] erreichte Gleichförmigkeit der Typsysteme der Host- und der Abfragesprache behält die strenge Typisierung an der Abfrageschnittstelle bei, was die Datenbankprogrammierung wesentlich erleichtert und zuverlässiger als herkömmliche Datenbanken macht.
- OQL[C&spplus;&spplus;] ist besonders nützlich für CA*-Werkzeuge und -Anwendungsentwickler (z. B. für CAD-, CAM-, CASE-Werkzeuge und -Anwendungsentwickler). Eine Hauptanforderung dieser Anwendungen ist die Bereitstellung von Datenbankvorzügen (d. h. Dauerhaftigkeit, Wiedergewinnung, Gleichzeitigkeitssteuerung und Abfragen) in einer transparenten (nahtlosen) Weise in den Programmierumgebungen. Die vorliegende Erfindung erreicht diese verringerte Leistungsfehlanpassung zwischen der Abfrage- und der Host-Sprache dadurch, daß sie von der Programmiersprache C&spplus;&spplus; ausgeht. Die Dauerhaftigkeit, Wiedergewinnung und Gleichzeitigkeitssteuerung wurden zu C&spplus;&spplus; hinzugefügt, ohne einen neuen Kompilierer zu erfordern. Hierauf wurde eine Abfragefähigkeit hinzugefügt, die eine Sprache enthält, die Merkmale von SQL und von einigen seiner vorgeschlagenen Abwandlungen mit der Syntax der Host-Sprache (C&spplus;&spplus;) vermischt.
- Die vorliegende Erfindung erzielt eine Datenabstraktion. Eines der wichtigsten Konzepte des objektorientierten Zugangs zur Softwareentwicklung ist die Datenabstraktion, bei der die Da tendarstellung eines Objekts gegenüber der Anwendung verborgen wird und alle Wechselwirkungen mit den Objekten über die öffentliche Schnittstelle des Objekts ausgeführt werden. Die vorliegende Erfindung erzielt auf diese Weise eine Datenabstraktion, wobei sie die Anwendungen datenunabhängig (d. h. invariant gegenüber Änderungen in der Darstellung der Objekte) macht. Somit wird die Datenunabhängigkeit, einer der Hauptvorteile relationaler Datenbanksysteme, in OQL[C&spplus;&spplus;] beibehalten. Die Datenabstraktion wird in der vorliegenden Erfindung dadurch erzwungen, daß gefordert wird, daß alle Abfrageprädikate bezüglich der öffentlichen Schnittstelle des Objekts formuliert werden. Es wird angemerkt, daß das Prinzip der Datenabstraktion streng nur vom Standpunkt des Anwenders oder der Anwendung erzwungen wird, wobei auf diese Weise die Option, daß interne Module von OQL[C&spplus;&spplus;] (z. B. Abfrageoptimierer) Zugriff auf die Darstellung des Objekts haben, offengelassen wird.
- Die Unterstützung von Gruppen in einem OODB-System kann implizit oder explizit sein. Die implizite Unterstützung bedeutet, daß die Gruppen der Objekte implizit als Teil eines Programmiersprachenkonstrukts (z. B. einer Klasse) gesammelt werden. Wenn z. B. in einem relationalen System Tupel (die Objekte des Systems) erzeugt werden, werden sie implizit zu einer entsprechenden Gruppe hinzugefügt (d. h. eine Relation). Andererseits werden explizite Gruppen durch einen Anwender erklärt und unterhalten. Die vorliegende Erfindung unterstützt explizite, durch Anwender unterhaltene Gruppen, ist aber nicht auf die Behandlung allein expliziter Gruppen beschränkt.
- Es soll eine Beispielklasse Patient betrachtet werden, die Informationen über Patienten in einem Krankenhaus definiert. Zusätzlich zur Gruppe aller Patienten in dem Krankenhaus kann es zweckmäßig sein, die Erklärung spezieller Gruppen von Patienten wie etwa der Laborpatienten oder der Kinderpatienten zu ermöglichen. Da nicht erwünscht ist, daß Anwendungen gezwungen werden, den Aufwand zum Unterhalten impliziter Gruppen für Klassen aufzubringen, die möglicherweise nicht abgefragt werden, werden Gruppen von Objekten in OQL[C&spplus;&spplus;] explizit durch den Anwender erklärt und unterhalten.
- In herkömmlichen (z. B. relationalen) Datenbank-Managementsystemen und in allen momentanen objektorientierten Datenbank- Managementsystemen werden Abfragen ausschließlich an dauerhaften Gruppen ausgeführt. In CA*-Umgebungen und -Anwendungen wird eine große Gruppe von Übergangsdaten erzeugt, für die ein gruppenorientierter Abfragezugriff wesentlich ist. OQL[C&spplus;&spplus;] bietet ebenfalls die Vorteile eines assoziativen Zugriffs auf Übergangsgruppen von Objekten. Da die vorliegende Erfindung eine Erweiterung von C&spplus;&spplus; ist, können Übergangsgruppen, d. h. Gruppen, deren Lebensdauer ein einzelner Programmaufruf ist, definiert und abgefragt werden. Tabelle 4: Grammatik der Gruppenerklärungsanweisungen.
- Gruppen werden unter Verwendung der DECLARE- bzw. der IMPLEMENT-Anweisung erklärt und definiert. Gemäß der bevorzugten Ausführungsform sind OQL[C&spplus;&spplus;]-Gruppen unter Verwendung der Anweisung DECLARE OQL_SET < class-name> , wobei DECLARE ein Schlüsselwort ist, das der Vorkompilierer versteht, und wobei class-name der Name einer zuvor erklärten Klasse ist, erklärte parametrisierte Gruppen. Die Syntax der Gruppenerklärung ist in Tabelle 4 gezeigt. In der derzeitigen Ausführung kann eine solche (Übergangs- oder dauerhafte) Gruppe nur auf Klassen, nicht auf Grundtypen (Ganzzahl oder Zeichenstring) erklärt werden.
- Die DECLARE-Anweisung bewirkt, daß der Vorkompilierer den zum Erklären einer OQL[C&spplus;&spplus;]-Gruppenklasse erforderlichen C&spplus;&spplus;-Code erzeugt. Der im Ergebnis der DECLARE-Anweisung erzeugte Code wird durch das Codefragment 40 aus Tabelle 5 erläutert. Die öffentliche Schnittstelle der Gruppenklasse umfaßt Elementfunktionen zum Bevölkern der Gruppe (Block 44), zum Iterieren über die Elemente der Gruppe (Block 46), zum Ausführen von Mengenoperationen (Block 48) sowie Elementfunktionen zum Unterhalten von Indizes in der Gruppe (Block 50). Das Iteratordatenelement der OQL[C&spplus;&spplus;]-Gruppe wird verwendet, um getrennte gleichzeitige Iterationsanforderungen an eine Gruppe zu verfolgen. Ein solcher Iterator wird gewöhnlich durch eine Iterator-Id identifiziert. Tabelle 5
- Die Anweisung IMPLEMENT OQL_SET < class-name> erweitert die Definition der Elementfunktionen einer Gruppe auf geeigneten C&spplus;&spplus;- Code, der die beabsichtigten Funktionen ausführt.
- Während der OQL-Vorverarbeitungsphase 144 (Fig. 5) werden DECLARE- und IMPLEMENT-Anweisungen erkannt und in C&spplus;&spplus;- oder dauerhaften C&spplus;&spplus;-Code, der die Erklärung und Realisierung der OQL-Gruppen beschreibt, umgewandelt. Außerdem werden während dieser Vorverarbeitungsphase OQL-Abfrageanweisungen identifiziert, analysiert, optimiert und in effizienten C&spplus;&spplus;- oder (in Abhängigkeit davon, ob die Gruppe eine dauerhafte Gruppe ist) in dauerhaften C&spplus;&spplus;-Code, der die Abfrage berechnet, übersetzt (Block 100, Fig. 4). Das resultierende Programm wird dann durch den C&spplus;&spplus;-Kompilierer 152 kompiliert (Fig. 5).
- Die folgenden Beispiele beruhen auf dem in Fig. 3 gezeigten Schema, das klinische Beispielinformationen über Patienten in einem Krankenhaus darstellt. Die Namen in dem Graphen stellen Klassen dar. Die durch eine durchgezogene Linie verbundenen Klassen stellen eine Zusammensetzung dar. Die Vererbung zwischen Klassen wird durch Strichlinien dargestellt.
- Die Struktur einer OQL-Abfrage ist:
- SELECT < objects>
- FROM < range variable> IN < set>
- WHERE < predicate> ;
- Die Syntax der vorliegenden Erfindung entleiht das SFW-Paradigma von SQL in einer aufwärtskompatiblen Weise und verbessert es auf mehrfache Weise. Die SELECT-Klausel identifiziert die Objekte, die die Antwortgruppe (d. h. das Ergebnis der Abfrage) bevölkern. Weiteres über die Art der Objekte, die in der SELECT-Klausel spezifiziert werden können, wird unten diskutiert. Die FROM-Klausel spezifiziert mittels einer Bereichsva riablen die Art der Objekte in der Zielgruppe, der Gruppe, die abgefragt wird. Schließlich spezifiziert die WHERE-Klausel das Prädikat, das die durch die Objekte im Ergebnis zu erfüllenden Eigenschaften definiert.
- SELECT p
- FROM Patient *p IN Patient_Set
- WHERE p-> get_insurance()-> company = = "Aetna"
- In diesem Beispiel ist p eine Bereichsvariable eines Typzeigers auf einen Patienten in der Klasse Patient 62, die in der FROM- Klausel erklärt wird. Die Verwendung von p in der SELECT- Klausel zeigt, daß die Antwortgruppe aus einer Gruppe von Zeigern auf Patienten 62 besteht. Die Verwendung eingegebener Bereichsvariablen erleichtert die Typprüfung zur Kompilierungszeit und die Fähigkeit zum Formulieren von Prädikaten in einer C&spplus;&spplus;-ähnlichen Syntax.
- Wie das Krankenhausschema nach Fig. 3 zeigt, ist Patient Set 62 eine OQL-(Ziel-)Gruppe, die Objekte vom Typ Patient 90 enthält. Es ist möglich, irgendeinen mengenwertigen Ausdruck (z. B. eine Variable oder eine Anwenderfunktion) als eine Zielgruppe in der FROM-Klausel zu spezifizieren. Weitere in Fig. 3 (und in Tabelle 6) definierte Klassen sind Name 80, Birthdate 82, Insurance 84, Person 86, Physician 88 und Patient 90. Tabelle 6
- Der String p-> get_insurance()-> company heißt ein Wegausdruck und ermöglicht die Formulierung von Prädikaten auf tief in der Struktur eines Objekts verschachtelten Werten. Falls t eine Bereichsvariable vom Typ T(T *) ist, gilt: (a)t und t.m()(t-> m()) sind Wegausdrücke, wobei m eine Elementfunktion der Klasse T ist; und (b) falls p ein Wegausdruck ist, ist p.m()(p-> m()) ein Wegausdruck. Die Funktion m ist ein Element der Klasse T oder ihrer Vorgänger. Es kann einwertige oder mehrwertige Wegausdrücke geben. Die Wichtigkeit dieser Unterscheidung wird unten beschrieben.
- Die Verwendung von Wegausdrücken und die Erklärung eingegebener Bereichsvariablen sind zwei in SQL nicht verfügbare Merkmale der vorliegenden Erfindung.
- Alle Prädikate in der WHERE-Klausel werden bezüglich der öffentlichen Schnittstelle des Objekts ausgedrückt, d. h., daß in privaten Datenelementen oder Funktionen keine Prädikate zulässig sind. Momentan liegt es in der Verantwortung des Anwenders sicherzustellen, daß die Elementfunktionen in Prädikaten nebenwirkungsfrei sind, d. h., daß ihr Aufruf den Zustand irgendeines Objekts in der Datenbank nicht ändert.
- Alternativ hätte die Bereichsvariable vom Typ Patient 90 erklärt werden können, wobei die Abfrage in diesem Fall als:
- SELECT p
- FROM Patient p IN Patient_Set
- WHERE p.Insurance()-> company = = "Aetna";
- geschrieben würde.
- In beiden Formen dieser Abfrage geben die Ausdrücke p.Insurance() und p-> Insurance() einen Zeiger an eine Versicherungsstruktur 84 zurück. Somit muß in beiden Fällen unter Verwendung der Pfeilschreibweise auf den Namen der Gesellschaft Bezug genommen werden. Es wird angemerkt, daß die Pfeilschreibweise direkt von C&spplus;&spplus; her kommt und nicht Bestandteil von OQL ist; OQL[CLOS] würde zur Bezugnahme auf Instanzvariablen und - verfahren die Lisp-Syntax und die CLOS-Semantik verwenden.
- Der Zweck der SELECT-Klausel besteht im Erklären des Typs der einzelnen Objekte, die die Antwortgruppe bilden. Beispiel 2 zeigt eine andere Verwendung der SELECT-Klausel.
- SELECT Person *x = p
- FROM Patient *p IN Patient_Set
- WHERE p-> Insurance()-> company = = "Aetna";
- Dieses Beispiel zeigt, wie das Prinzip der Ersetzbarkeit (d. h. einer Programmvariablen eines Typs kann irgendein Objekt von einem abgeleiteten Typ zugewiesen werden) gemäß der vorliegenden Erfindung in einer OQL-Abfrage angewendet werden kann. In einer OQL-Abfrage kann die Antwortgruppe Elemente enthalten, deren Typ der gleiche wie der Typ der Elemente in der Zielgruppe sowie der irgendeiner ihrer Vorgänger ist. In diesem Beispiel ist Person 60 (Fig. 3)/86 (Tabelle 7) ein Vorgänger von Patient 62 (Fig. 3)/90 (Tabelle 7). Der Variablen x vom Typ Zeiger auf Person 60/86 wird ein Zeiger auf Patient 62/90 zugewiesen. Es wird angemerkt, daß die Objektidentität der Elemente in der Zielgruppe in der Antwortgruppe bewahrt wird. Jedoch hat das Objekt der Antwortgruppe bei jeder Ausführung der Abfrage eine neue Identität. Tabelle 7
- Eine Abfrage gemäß der vorliegenden Erfindung kann außerdem Objekte eines nicht mit der Klassenhierarchie des Typs der Objekte in der Zielgruppe verwandten Typs zurückgeben. Dies ist in Beispiel 3 gezeigt. Beispiel 3. Gewinne die Namen und das Alter der höchstens 10 Jahre alten Patienten wieder.
- Diese Abfrage zeigt eine Verwendung des C&spplus;&spplus;-Konstrukteurs zum Erzeugen einer Gruppe von Objekten eines neuen Typs unter der Voraussetzung, daß der neue Typ zuvor definiert wurde. Die durch diese Abfrage zurückgegebenen Objekte besitzen eine neue Identität. Die Abfrage zeigt außerdem die Verwendung der Vererbung. Die in dem Konstrukteur und in dem Prädikat der WHERE- Klausel verwendeten Wegausdrücke p-> get_name() und p-> get_age() beziehen sich auf Elementfunktionen, die durch die Objekte der Klasse Patient von der Vorgängerklasse Person vererbt wurden.
- Es wird angemerkt, daß die Vererbung der Elementfunktionen in der OQL[C&spplus;&spplus;] ohne Aufwand angeboten wird, da sie das C&spplus;&spplus;- Typsystem enthält.
- Obgleich sie in C&spplus;&spplus; nicht unterstützt werden, sind in OQL weitere Formen der Vererbung (z. B. die Mengeninklusion) möglich. Vorausgesetzt, daß Patient 62 und Employee 64 von der Klasse Person 60 abgeleitete Klassen sind, wäre z. B. in Fig. 3 zu erwarten, daß in diesen Klassen definierte Gruppen die Semantik Mengeninklusion tragen. Die Semantik Mengeninklusion bedeutet, daß irgendeine Instanz des Typs Patient oder Employee, die ein Element der Gruppe der Patienten 62 bzw. der Gruppe der Angestellten 64 ist, automatisch eine Instanz der Gruppe der Personen 60 wird. Dies ermöglicht das Ausführen von Abfragen auf der Gruppe der Personen 60 nicht nur in den ursprünglich als Personen erzeugten Instanzen, sondern auch auf Instanzen von Patienten und von Angestellten.
- Bisher waren alle in den Abfragen der Beispiele 1-3 verwendeten Wegausdrücke einwertig. Beispiel 4 zeigt einen Fall, in dem ein Wegausdruck mehrwertig ist. Beispiel 4. Gewinne die Patienten von Dr. Smith, bei denen vor dem 10. Oktober 1989 Grippe diagnostiziert wurde, wieder.
- Da der Wegausdruck p-> get_med_record() mehrwertig ist (d. h., da die Funktion get_med_rec() der Patienten eine Gruppe von medizinischen Datensatzobjekten 68 zurückgibt) muß eine Variable r definiert werden, die über die Elemente dieser Gruppe reicht. Dies führt zur Verwendung verschachtelter Unterabfragen in einer OQL-Anweisung. Die Forderung, für Abfragen mit mengenwertigen Wegausdrücken eine explizite Bereichsvariable zu verwenden, anstatt OQL diese implizit definieren zu lassen, liefert eine klarere Semantik und eine einfachere Realisierung der vorliegenden Erfindung.
- Die Berechnung des Prädikats EXISTS < set> ergibt jedesmal wahr, wenn < set> nicht leer ist. Dies ist kompatibel mit dem entspre chenden Prädikat in SQL. Die Prädikate in der WHERE-Klausel können die Vergleichsoperatoren θ {= = , < , < =, > , > = ! =} und die logischen Operatoren && (AND), (OR) und NOT verwenden. Für den Vergleich und für logische Operationen wird die C&spplus;&spplus;- Syntax verwendet. Gültige atomare Ausdrücke sind: t&sub1; θ t&sub2;, t&sub1; θ c, t&sub1; IN s&sub1;, s&sub1; CONTAINS s&sub2;, v θ ALL s&sub1;, v θ ANY s&sub1; und EXISTS s&sub1;; wobei t&sub1; und t&sub2; einwertige Wegausdrücke, s&sub1; und s&sub2; Gruppen, v ein einwertiger Wegausdruck oder eine Konstante, c eine Konstante (Ganzzahl oder String) und θ ein Vergleichsoperator sind. Die atomaren Terme, die ANY und ALL umfassen, werden zur existentiellen bzw. universellen Quantisierung verwendet. Ein Prädikat ist eine Boolesche Kombination atomarer Terme.
- Vom Standpunkt des Anwenders wird in der vorliegenden Erfindung offensichtlich sowohl auf vererbte Elementfunktionen als auch auf zusammengesetzte Objekte einheitlich durch einen einzigen Syntaxmechanismus (d. h. durch den Wegausdruck) Bezug genommen. Beispiel 5. Gewinne alle Kinderärzte und ihre bei Aetna versicherten Patienten wieder.
- Diese Abfrage zeigt das Prinzip der Orthogonalität in OQL selbst. Eine SELECT-Anweisung kann überall, wo eine Gruppe erwartet wird, in diesem Fall in dem Konstrukteur eines Objekts New_Patient, verwendet werden.
- Der Gültigkeitsbereich einer Bereichsvariable ist die gesamte mit der FROM-Klausel, die sie definiert, verknüpfte Auswahlanweisung. Dies ermöglicht, die in der äußeren SELECT-Anweisung erklärte Variable p in der inneren SELECT-Anweisung zu verwenden. Im Gegensatz dazu kann die in der inneren Auswahl erklärte Variable pat in der äußeren Auswahl nicht verwendet werden. Dies ist genau mit den ANSI-SQL-Gültigkeitsbereichs-Vorschriften konsistent. Beispiel 6. Gewinne die Patienten mit einer Röntgenstrahluntersuchung wieder, deren Röntgenbild zu einer Lungentuberkulose paßt.
- Die Abfrage nach Beispiel 6 zeigt die Verwendung von mengenwertigen, anwenderdefinierten Funktionen in einer OQL-Anweisung. Es wird angenommen, daß jeder medizinische Datensatz eines Patienten eine heterogene Liste von Laboruntersuchungen (z. B. Röntgenstrahluntersuchungen 74, Ultraschalluntersuchungen 78, Blutproben 76 nach Fig. 3) enthält. Um eine Abfrage in einer Gruppe von Röntgenstrahluntersuchungen 74 auszuführen, müssen zunächst die Röntgenstrahluntersuchungs-Objekte aus der Liste der Laboruntersuchungsberichte 74 entnommen werden (was oben durch f ausgeführt wird) und muß dann aus der Liste eine Gruppe erzeugt werden (was durch die obige Funktion Make_set ausgeführt wird). Dies ist erforderlich, da OQL nur Gruppen homogener Objekte abfragen kann. Die anwenderdefinierte (Boolesche) Funktion x_ray_match vergleicht das Bitmuster r- > picture() einer Röntgenstrahluntersuchung mit einer Programmvariablen vom Typ Bitmap, die ein typisches Tuberkulose-Röntgenbild hält.
- Die Datenabstraktion ermöglicht das Formulieren von OQL[C&spplus;&spplus;]- Abfragen an zusammengesetzten Objekten unter Verwendung eines einheitlichen Mechanismus (d. h. von Wegausdrücken) ohne Rücksicht auf die realisierte Wegzusammensetzung. Dies ist in Beispiel 7 gezeigt. Beispiel 7. Gewinne die Patienten wieder, die weniger als 19 Jahre alt sind und durch Ärzte behandelt werden, die für in Dallas liegende Krankenhäuser arbeiten.
- In Abhängigkeit von dar Art, in der die zusammengesetzten Beziehungen realisiert sind, erfordern andere Abfragesprachen, die keine Datenabstraktion unterstützen, für die Abfragen an zusammengesetzten Objekten andere Formulierungen. Wie unten gezeigt wird, ist in diesen Sprachen zum Ausdrücken der obigen Abfrage eine explizite Verbindung mit durch eine verschachtelte Abfrage zurückgegebenen Objekten erforderlich.
- Die Anweisungen 2 und 3 aus Tabelle 8 zeigen, wie gemäß der vorliegenden Erfindung eine Gruppe von Patienten zu erklären und zu definieren ist. Die Anweisung 6 erklärt zwei Programmvariable mypatients und result des Typs OQL-Gruppe der Patienten. Die Anweisung 8 zeigt, wie die Gruppen unter Verwendung der add-Elementfunktion bevölkert werden. Die Anweisungen 10-12 zeigen, wie über alle einzelnen Elemente einer Gruppe zu iterieren ist. Die Anweisung 14 zeigt die Abfrage nach Beispiel 6 in der Gruppe mypatients. Es wird die Verwendung der anwenderdefinierten Funktionen als Teil des Programms vermerkt. Die Anweisungen 16-19 stellen Code dar, der die Funktionen f und Make_set definiert. Tabelle 8
- Als Hilfe bei der Realisierung der bevorzugten Ausführungsform der vorliegenden Erfindung folgt die Grammatik von OQL[C&spplus;&spplus;].
- Der in OQL verwendete Ansatz zur Schaffung einer besseren Integration mit den Host-Sprachen kann auch durch die momentanen SQL-Systeme verwendet werden, um eine bessere Integration mit objektorientierten Programmiersprachen zu schaffen.
- Die Erfindung schafft eine geschickte Art der Kombination der am meisten verwendeten industriell wirksamen objektorientierten Programmiersprache der Computerindustrie, C&spplus;&spplus;, mit der Industriestandard-Datenbankabfragesprache SQL. Die Erfindung ergänzt die existierenden Programmierwerkzeuge eines C&spplus;&spplus;- Programmierers durch Hinzufügen einer Abfragefähigkeit. Dies kann zu einem besseren, zuverlässigeren C&spplus;&spplus;-Code führen und die Datenbankprogrammierung für die große Anzahl der C&spplus;&spplus; Programmierer zugänglicher machen.
- Die Abfrageprozessorarchitektur der OQL 100 ist in Fig. 4 gezeigt. Sie besteht aus vier Hauptmodulen: dem Analysierer 102, dem Abfrageneuschreiber 104, dem vorschriftsbasierten Abfrageübersetzer und Optimierer 106 und dem Codeoptimierer 108. Alle diese Module verwenden das Laufzeit-Datenwörterbuch 112, das alle Typinformationen der Anwendung einschließlich der in den Anwendungen verwendeten Klasseninformationen (Klassennamen, Datenelementnamen und -typen und Elementfunktionsnamentypen und -parameter), Klassenhierarchieinformationen und der mengenwertigen und Booleschen Variablen und Funktionen enthält. Der Abfrageprozessor verwendet die SELECT-Anweisungen 124 von OQL[C&spplus;&spplus;] als Eingangsgröße und erzeugt als Ausgangsgröße optimierten C&spplus;&spplus;- oder dauerhaften C&spplus;&spplus;-Code 126. In Fig. 4 stellen die hell schraffierten Kästen Laufzeit-Datenstrukturen, die dunkleren Kästen Vorschriftsgrundlagen, die die Module verbindenden Pfeile die Übertragung der Steuerung und die durchgezogenen Linien den Zugriff auf Datenstrukturen von den entsprechenden Modulen dar. Der Analysierer 102 verwendet die OQL[C&spplus;&spplus;]-SELECT-Anweisung als Eingangsgröße und prüft mit Hilfe des Datenwörterbuchs die Syntax der Anweisung und ob die Bezugnahmen auf Klasseninformationen und anwenderdefinierte Funktionen gültig sind. An syntaktisch falsche Anweisungen werden Syntaxfehler 122 ausgegeben, während syntaktisch richtige Anweisungen auf einen Abfragegraphen 116 abgebildet werden. Nach dem Analysieren wird die Steuerung an das Abfrageneuschreibmodul 104 übergeben, das den Abfragegraphen 116 liest und ihn nach dem Ausführen der semantischen und algebraischen Abfrageopti mierung mit Hilfe des Datenwörterbuchs 112 bzw. der algebraischen Vorschriftsgrundlage 110 an seiner Stelle transformiert. Nach dem Neuschreiben der Abfrage wird die Steuerung an den vorschriftsbasierten Abfrageübersetzer 106 übergeben, der den Abfragegraphen mit Hilfe der Ablageschnittstellen-Vorschriftsgrundlage 118 und des Datenwörterbuchs 112 in eine in C&spplus;&spplus; oder in dauerhaftem C&spplus;&spplus; geschriebene erste Version eines Ausführungsplans 114 übersetzt. Schließlich erzeugt der Codeoptimierer 108 eine verbesserte Folge von der ursprünglichen Abfrage 124 entsprechenden C&spplus;&spplus;- und dauerhaften C&spplus;&spplus;-Code-126- Anweisungen.
- In Fig. 5 ist das vollständige Kompilierungsverfahren 140 eines Programms, das OQL[C&spplus;&spplus;]-Anweisungen (d. h. DECLARE-, IMPLEMENT- und SELECT-Anweisungen) enthält, gezeigt. Die Eingangsgröße zu dem Kompilierungsverfahren ist ein Programm, das die OQL[C&spplus;&spplus;]- Anweisungen 142 enthält. Diese Eingangsgröße wird durch den OQL-Vorkompilierer verarbeitet, der für die SELECT-Anweisungen alle in dem Abfrageprozessor 100 (Fig. 4) beschriebenen Funktionen ausführt. Wegen der Möglichkeit, daß ein Programm Übergangsdaten und dauerhafte Daten abfragen kann, erzeugt der OQL- Vorkompilierer eine Kombination aus C&spplus;&spplus;- und dauerhaftem C&spplus;&spplus;- Code 146. Ein Vorkompilierer 148 für dauerhaftes C&spplus;&spplus; transformiert den dauerhaften C&spplus;&spplus;-Code in reinen C&spplus;&spplus;-Code 150, während der C&spplus;&spplus;-Code diesen Prozeß unverändert durchläuft. Der C&spplus;&spplus;-Code 150 wird dann durch einen Standard-C&spplus;&spplus;-Kompilierer 152 verarbeitet, der den ausführbaren Code 154 erzeugt.
- Fig. 6 zeigt eine mögliche Anordnung eines Anwendungscodes 164 gemäß einer bevorzugten Ausführungsform der Erfindung, der OQL[C&spplus;&spplus;]-Abfrageanweisungen 166 enthält, im Hauptspeicher 162 eines Computers 160. Während der Entwicklung der Anwendung gibt ein Computerprogrammierer ein Programm über ein Computerterminal 180 in den Computer 160 ein. Die Anwendung wird gemäß dem in Fig. 5 beschriebenen Verfahren kompiliert, wobei die OQL[C&spplus;&spplus;]-Anweisungen 142 (Fig. 5)/166 (Fig. 6) in Abhängigkeit davon, ob die Abfragen auf Übergangsdaten 170 oder auf dauerhafte Daten 172 zugreifen, in reinen C&spplus;&spplus;-Code 168 oder in dauerhaften C&spplus;&spplus;-Code 178 übersetzt werden. Die dauerhaften Daten 172 werden in einer dauerhaften Datenbank 176 auf der Platte 174 gespeichert. Abfragen an Übergangsdaten werden unter Verwendung des C&spplus;&spplus;-Codes 168 im Hauptspeicher 170 ausgeführt. Abfragen an dauerhaften Daten werden unter Verwendung des dauerhaften C&spplus;&spplus;-Codes 178 ausgeführt, der die Übertragung der dauerhaften Daten von der Datenbank 176 auf der Platte 174 in einen Spezialbereich 172 des Hauptspeichers 162, wo die Abfrage ausgeführt wird, sicherstellt. Es wird angemerkt, daß, obgleich der Anwendungscode 164, der OQL[C&spplus;&spplus;]-Code 166, der C&spplus;&spplus;-Code 168 und der dauerhafte C&spplus;&spplus;-Code 178 vor der Kompilierung unterscheidbar sind, nach der Kompilierung ein einzelnes, ununterscheidbares Stück Ausführungscode bilden.
- Die Beschreibung des durch einen C&spplus;&spplus;-Vorkompilierer realisierten OQL[C&spplus;&spplus;] ist spezifisch für die realisierte Ausführung. Falls natürliche (nicht durch Vorkompilierer realisierte) C&spplus;&spplus;- Kompilierer für die Verwendung von OQL erweitert würden, würden durch diese Kompilierer ähnliche Operationen realisiert. Falls inkrementelle C&spplus;&spplus;-Kompilierer verfügbar werden, kann OQL[C&spplus;&spplus;] in der Tat ähnlich inkrementell werden, wobei es dennoch die interaktive "ad hoc"-Fähigkeit zum Formulieren von Abfragen erbt. Da CLOS ein inkrementelles Kompilieren ermöglicht, würde dieses Merkmal bei der Anwendung gemäß der vorliegenden Erfindung sofort in OQL[CLOS] geerbt.
- Unten werden verschiedene wichtige Merkmale einer bevorzugten Ausführungsform zusammengefaßt.
- Eine Vorrichtung zum Verarbeiten von Abfragen in einer objektorientierten Datenbank mit Vorkompiliereranalyse-, Optimierungs- und Übersetzungs-Objektabfrage-Sprachen-Anweisungen in effiziente Host-Sprachen-Anweisungen und ein an den Vorkompilierer angeschlossener Kompilierer zum Kompilieren der effizienten Host-Sprachen-Anweisungen zu ausführbarem Code. Für eine solche Vorrichtung kann die Host-Sprache C&spplus;&spplus; oder Gemeinsames- Lisp-Objektsystem (CLOS) sein. Außerdem kann der Kompilierer ein C&spplus;&spplus;-Kompilierer sein.
- Eine Vorrichtung zum Verarbeiten von Abfragen in einer objektorientierten Datenbank mit einem Vorkompilierer zum Analysieren, Optimieren und Übersetzen durch den Anwender erzeugter OQL[C&spplus;&spplus;]-Anweisungen in effiziente C&spplus;&spplus;-Anweisungen und ein an den Vorkompilierer angeschlossener Kompilierer zum Kompilieren der effizienten C&spplus;&spplus;-Anweisungen in ausführbaren Code.
- Ein Verfahren zum Ausführen einer Abfrage in einer Objektabfragesprache, das die folgenden Schritte enthält: Definieren der Objektabfragesprache mit Gruppenerklärungen, Formulieren der Abfrageanweisungen durch Kombinieren des Typsystems der Host-Sprache als ein Datenmodell mit ausgewählten Aspekten einer relationalen Abfragesprache als eine Grundstruktur für die Abfrageanweisungen, Vorverarbeiten der Abfrageanweisungen, Kompilieren der Abfrageanweisungen und Ausführen der Abfrageanweisungen, um eine Antwort an die formulierte Abfrageanweisung zurückzugeben. Die Gruppenerklärungen dieses Verfahrens können wenigstens eine Elementfunktion, wenigstens eine Mengenoperation, wenigstens einen Iterationsoperator und wenigstens eine Indexierungsfunktion enthalten. Der Schritt des Formulierens der Abfrageanweisungen kann ferner das Kombinieren von Booleschen Host-Sprache-Funktionen mit wenigstens einem Prädikat oder das Verwenden mengenwertiger Funktionen der Host- Sprache als Ziele für die Abfragen umfassen. Dieser Schritt kann außerdem den Schritt des Verwendens der Ausdrücke und der Objektzusammensetzung der Host-Sprache bei der Formulierung der Abfrageanweisungen umfassen. Die relationale Abfragesprache ist SQL, während die im voraus gewählten Aspekte der Wahl-von-wo- Stil (Select-From-Where-Stil) von SQL sind. Der Schritt des Vorverarbeitens umfaßt ferner die folgenden Schritte: Analysieren der Abfrageanweisungen, Optimieren der Abfrageanweisungen und Übersetzen der Abfrageanweisungen in Anweisungen, die durch einen Host-Sprache-Kompilierer kompiliert werden können.
- Obwohl oben in der Patentanmeldung eine bestimmte Ausführungsform der Erfindung gezeigt und beschrieben wurde, sind für den Fachmann auf dem Gebiet verschiedene Modifikationen und alternative Ausführungen ersichtlich. Die Erfindung soll dementsprechend nur bezüglich der beigefügten Ansprüche beschränkt sein.
Claims (24)
1. Verfahren zum Ausführen von Abfragen von Objektengruppen
in einem Computer, wobei die Abfragen in Abfrageanweisungen
eines Programms explizit spezifiziert sind,
dadurch gekennzeichnet, daß
das Programm Anweisungen einer objektorientierten Host-
Programmiersprache und Erweiterungssprachen-Anweisungen, die
wenigstens die Abfrageanweisungen enthalten, umfaßt und daß
die Abfrageanweisungen der Abfrage von Mengen von Objekten der
Host-Programmiersprache dienen,
daß das Verfahren die Vorverarbeitung des Programms
enthält und daß die Vorverarbeitung das Umsetzen wenigstens
der Erweiterungssprachen-Abfrageanweisungen in Anweisungen der
objektorientierten Host-Programmiersprache enthält,
und daß das Verfahren ferner enthält:
Kompilieren (152) des resultierenden Programms in der
Host-Sprache in ausführbaren Code (154) und
Ausführen des resultierenden ausführbaren Codes (154),
wobei der Code ausgeführt wird, um das Ergebnis der
Abfrageanweisungen zurückzugeben.
2. Verfahren nach Anspruch 1, bei dem die Abfragen, die in
den Abfrageanweisungen der Erweiterungssprache spezifiziert
sind, Objekte der Host-Programmiersprache zurückgeben.
3. Verfahren nach Anspruch 2, bei dem die
Erweiterungssprache-Abfrageanweisungen wenigstens ein Objekt eines Typs
zurückgeben, das ein Vorgänger des Typs abgefragter Objekte
ist.
4. Verfahren nach irgendeinem der vorangehenden Ansprüche,
bei dem die Objekte, die von der Abfrage abgefragt werden,
dauerhafte Objekte enthalten.
5. Verfahren nach irgendeinem der vorangehenden Ansprüche,
bei dem die Objekte, die von der Abfrage abgefragt werden,
Übergangsobjekte enthalten.
6. Verfahren nach irgendeinem der vorangehenden Ansprüche,
bei dem die Gruppen von Objekten selbst erklärte Objekte sind.
7. Verfahren nach Anspruch 6, bei dem die Erklärung der
erklärten Objekte wenigstens eine Mitgliedsfunktion umfaßt.
8. Verfahren nach Anspruch 6 oder Anspruch 7, bei dem die
Erklärung wenigstens eine Mengenoperation enthält.
9. Verfahren nach irgendeinem der Ansprüche 6 bis 8, bei dem
die Erklärung wenigstens eine Iterationsoperation enthält.
10. Verfahren nach irgendeinem der Ansprüche 6 bis 9, bei dem
die Erklärung wenigstens eine Indexierungsfunktion enthält.
11. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
die Abfrage eine Booleschen Funktion der Host-Sprache als ihr
Prädikat enthält.
12. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
die abgefragten Gruppen jene sind, die durch gruppenwertige
Funktionen der Host-Sprache zurückgegeben werden.
13. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
die Abfrageanweisungen den Stil von SQL (structured query
language) besitzen.
14. Verfahren nach Anspruch 13, bei dem die Abfragen den
Wahlvon-wo-Stil von SQL (structured query language) besitzen.
15. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
die Abfrageanweisungen Ausdrücke der Host-Sprache und die
Objektzusammensetzung verwenden.
16. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
der Schritt der Vorverarbeitung ferner die folgenden Schritte
enthält:
Analysieren der Abfrageanweisungen;
Optimieren der Abfrageanweisungen; und
Übersetzen der Abfrageanweisungen in Anweisungen, die
durch den Kompilierer für die Host-Sprache kompilierbar sind.
17. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
die Host-Sprache C&spplus;&spplus; ist.
18. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
das vorverarbeitete Programm durch ein Hypermedien/Text-System
erzeugt worden ist.
19. Verfahren nach irgendeinem der Ansprüche 1 bis 17, bei dem
das vorverarbeitete Programm durch eine graphische
Abfrageschnittstelle erzeugt worden ist.
20. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
die Abfrage eingegebene Bereichsvariablen zuläßt.
21. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
verschachtelte Abfrageanweisungen zugelassen sind.
22. Verfahren nach irgendeinem vorangehenden Anspruch, bei dem
die Vorverarbeitung über ein Zwischenprogramm (146) erfolgt,
wobei Anweisungen des Zwischenprogramms, die mit dauerhaften
Objekten in Beziehung stehen, in Anweisungen der Host-Sprache
umgesetzt (148) werden.
23. Vorrichtung zum Ausführen von Abfragen von Mengen von
Objekten, wobei die Abfragen in Abfrageanweisungen eines
Programms explizit spezifiziert sind,
dadurch gekennzeichnet, daß
das Programm Anweisungen einer objektorientierten Host-
Programmiersprache und Anweisungen einer Erweiterungssprache,
die wenigstens die Abfrageanweisungen enthalten, umfaßt und
daß die Abfrageanweisungen der Abfrage von Mengen von Objekten
der Host-Programmiersprache dienen,
daß die Vorrichtung ein Mittel (144) zum Vorverarbeiten
des Programms enthält und daß die Vorverarbeitung das Umsetzen
wenigstens der Erweiterungssprachen-Abfrageanweisungen in
Anweisungen der objektorientierten Host-Programmiersprache
enthält,
und daß die Vorrichtung ferner enthält:
ein Mittel (142) zum Kompilieren des resultierenden
Programms in der Host-Sprache in ausführbaren Code (154) und
ein Mittel zum Ausführen des resultierenden ausführbaren
Codes, wobei der Code ausgeführt wird, um das Ergebnis der
Abfrageanweisungen zurückzugeben.
24. Vorrichtung nach Anspruch 23, ferner mit Mitteln zum
Ausführen des Verfahrens, das in einem der Ansprüche 2 bis 22
definiert ist.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/516,369 US5761493A (en) | 1990-04-30 | 1990-04-30 | Apparatus and method for adding an associative query capability to a programming language |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69131336D1 DE69131336D1 (de) | 1999-07-22 |
DE69131336T2 true DE69131336T2 (de) | 1999-12-16 |
Family
ID=24055258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69131336T Expired - Fee Related DE69131336T2 (de) | 1990-04-30 | 1991-04-29 | Verfahren und Gerät um eine inhaltsaddressierbare Abfragemöglichkeit einer Programmiersprache hinzuzufügen |
Country Status (4)
Country | Link |
---|---|
US (2) | US5761493A (de) |
EP (1) | EP0455447B1 (de) |
JP (1) | JPH06110767A (de) |
DE (1) | DE69131336T2 (de) |
Families Citing this family (233)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6578027B2 (en) | 1996-08-20 | 2003-06-10 | Business Objects, Sa | Relational database access system using semantically dynamic objects |
US5555403A (en) * | 1991-11-27 | 1996-09-10 | Business Objects, S.A. | Relational database access system using semantically dynamic objects |
SG43130A1 (en) * | 1994-03-30 | 1997-10-17 | British Telecomm | Data processing |
US5943657A (en) * | 1994-03-30 | 1999-08-24 | British Telecommunications Public Limited Company | Communications pricing and charging maintenance sub-system and process |
US5893104A (en) * | 1996-07-09 | 1999-04-06 | Oracle Corporation | Method and system for processing queries in a database system using index structures that are not native to the database system |
JP3777666B2 (ja) * | 1996-08-28 | 2006-05-24 | 株式会社日立製作所 | データベース処理方法およびシステム |
JPH10171701A (ja) * | 1996-12-10 | 1998-06-26 | Fuji Xerox Co Ltd | 手続実行装置及び方法 |
JP3022378B2 (ja) * | 1997-02-21 | 2000-03-21 | 日本電気株式会社 | 異プログラム言語で構成されたデータベースシステムの検索方法 |
JP3836928B2 (ja) * | 1997-02-26 | 2006-10-25 | 株式会社日立製作所 | データベース処理方法 |
US5905982A (en) * | 1997-04-04 | 1999-05-18 | International Business Machines Corporation | Handling null values in SQL queries over object-oriented data |
CA2230797A1 (en) * | 1997-04-29 | 1998-10-29 | Vladimir Silverman | System and method for secure and scalable database transactions over a network |
US6122627A (en) * | 1997-05-09 | 2000-09-19 | International Business Machines Corporation | System, method, and program for object building in queries over object views |
US6477527B2 (en) * | 1997-05-09 | 2002-11-05 | International Business Machines Corporation | System, method, and program for object building in queries over object views |
US7779020B2 (en) * | 2002-03-01 | 2010-08-17 | International Business Machines Corporation | Small-footprint applicative query interpreter method, system and program product |
US5963934A (en) * | 1997-06-30 | 1999-10-05 | International Business Machines Corporation | Intelligent compilation of scripting language for query processing systems |
US5987455A (en) * | 1997-06-30 | 1999-11-16 | International Business Machines Corporation | Intelligent compilation of procedural functions for query processing systems |
CA2243780A1 (en) * | 1997-07-30 | 1999-01-30 | Knowledge Modeling Institute Inc. | Apparatus for automatically applying and preparing software and recording medium for preparing software |
US5895465A (en) * | 1997-09-09 | 1999-04-20 | Netscape Communications Corp. | Heuristic co-identification of objects across heterogeneous information sources |
US6233584B1 (en) * | 1997-09-09 | 2001-05-15 | International Business Machines Corporation | Technique for providing a universal query for multiple different databases |
US6006220A (en) * | 1997-09-30 | 1999-12-21 | International Business Machines Corporation | Determining the optimal access path for a query at execution time using an actual value for each variable in a query for estimating a filter factor |
US6738678B1 (en) * | 1998-01-15 | 2004-05-18 | Krishna Asur Bharat | Method for ranking hyperlinked pages using content and connectivity analysis |
US6105035A (en) * | 1998-02-17 | 2000-08-15 | Lucent Technologies, Inc. | Method by which notions and constructs of an object oriented programming language can be implemented using a structured query language (SQL) |
FR2776789B1 (fr) * | 1998-03-24 | 2001-04-13 | Bull Sa | Serveur de requetes generalisees |
US6199063B1 (en) * | 1998-03-27 | 2001-03-06 | Red Brick Systems, Inc. | System and method for rewriting relational database queries |
US7162689B2 (en) | 1998-05-28 | 2007-01-09 | Oracle International Corporation | Schema evolution in replication |
US6529904B1 (en) * | 1998-05-28 | 2003-03-04 | Oracle Corp. | Deployment of snapshots with parameterized data description language strings |
US6341288B1 (en) * | 1998-07-29 | 2002-01-22 | Sybase, Inc. | Database system with methodology for accessing a database from portable devices |
US6240406B1 (en) * | 1998-08-31 | 2001-05-29 | The Trustees Of The University Of Pennsylvania | System and method for optimizing queries with aggregates and collection conversions |
US6584459B1 (en) | 1998-10-08 | 2003-06-24 | International Business Machines Corporation | Database extender for storing, querying, and retrieving structured documents |
JP3763982B2 (ja) * | 1998-11-25 | 2006-04-05 | 株式会社日立製作所 | データベース処理方法及びその実施装置並びにその処理プログラムを記録した媒体 |
US7526468B2 (en) * | 1999-01-08 | 2009-04-28 | Computer Associates Think, Inc. | System and method for recursive path analysis of DBMS procedures |
US6609130B1 (en) * | 1999-02-19 | 2003-08-19 | Sun Microsystems, Inc. | Method for serializing, compiling persistent textual form of an object-oriented database into intermediate object-oriented form using plug-in module translating entries according to grammar |
HK1020419A2 (en) * | 1999-03-16 | 2000-03-17 | Shi Piu Joseph Fong | Frame model for universal database in database reengineering and integration |
US6192371B1 (en) * | 1999-04-28 | 2001-02-20 | Lucent Technologies, Inc | Object morphing in an object oriented computing environment using relational database query procedure |
US6202063B1 (en) * | 1999-05-28 | 2001-03-13 | Lucent Technologies Inc. | Methods and apparatus for generating and using safe constraint queries |
US6345272B1 (en) * | 1999-07-27 | 2002-02-05 | Oracle Corporation | Rewriting queries to access materialized views that group along an ordered dimension |
US7099898B1 (en) | 1999-08-12 | 2006-08-29 | International Business Machines Corporation | Data access system |
US7889052B2 (en) | 2001-07-10 | 2011-02-15 | Xatra Fund Mx, Llc | Authorizing payment subsequent to RF transactions |
US7837116B2 (en) | 1999-09-07 | 2010-11-23 | American Express Travel Related Services Company, Inc. | Transaction card |
US7239226B2 (en) | 2001-07-10 | 2007-07-03 | American Express Travel Related Services Company, Inc. | System and method for payment using radio frequency identification in contact and contactless transactions |
US7328206B2 (en) * | 1999-10-15 | 2008-02-05 | Microsoft Corporation | Extensions for adding and removing calculated members in a multidimensional database |
US6516310B2 (en) | 1999-12-07 | 2003-02-04 | Sybase, Inc. | System and methodology for join enumeration in a memory-constrained environment |
US6526403B1 (en) * | 1999-12-17 | 2003-02-25 | International Business Machines Corporation | Method, computer program product, and system for rewriting database queries in a heterogenous environment |
US6938052B2 (en) * | 1999-12-23 | 2005-08-30 | International Business Machines Corporation | Access to server resources from heterogeneous platforms |
US6694328B1 (en) * | 2000-01-13 | 2004-02-17 | International Business Machines Corporation | Method for creating queries on version objects |
US8543423B2 (en) | 2002-07-16 | 2013-09-24 | American Express Travel Related Services Company, Inc. | Method and apparatus for enrolling with multiple transaction environments |
US7172112B2 (en) | 2000-01-21 | 2007-02-06 | American Express Travel Related Services Company, Inc. | Public/private dual card system and method |
US8429041B2 (en) | 2003-05-09 | 2013-04-23 | American Express Travel Related Services Company, Inc. | Systems and methods for managing account information lifecycles |
US20010047372A1 (en) * | 2000-02-11 | 2001-11-29 | Alexander Gorelik | Nested relational data model |
US7627531B2 (en) | 2000-03-07 | 2009-12-01 | American Express Travel Related Services Company, Inc. | System for facilitating a transaction |
US6629313B1 (en) * | 2000-06-29 | 2003-09-30 | Microsoft Corporation | In-line database access statements without a pre-compiler |
US7428301B1 (en) | 2000-10-09 | 2008-09-23 | Clawson Jeffrey J | Method and system for the exit protocol of an emergency medical dispatch system |
US6607481B1 (en) | 2000-10-10 | 2003-08-19 | Jeffrey J. Clawson | Method and system for an improved entry process of an emergency medical dispatch system |
US6804662B1 (en) * | 2000-10-27 | 2004-10-12 | Plumtree Software, Inc. | Method and apparatus for query and analysis |
US7181508B1 (en) * | 2000-11-09 | 2007-02-20 | Oki Data Americas, Inc. | System and method for communicating, monitoring and configuring a device operatively connected to a network |
US7117198B1 (en) * | 2000-11-28 | 2006-10-03 | Ip Capital Group, Inc. | Method of researching and analyzing information contained in a database |
US7890517B2 (en) | 2001-05-15 | 2011-02-15 | Metatomix, Inc. | Appliance for enterprise information integration and enterprise resource interoperability platform and methods |
US6856992B2 (en) | 2001-05-15 | 2005-02-15 | Metatomix, Inc. | Methods and apparatus for real-time business visibility using persistent schema-less data storage |
US6925457B2 (en) | 2001-07-27 | 2005-08-02 | Metatomix, Inc. | Methods and apparatus for querying a relational data store using schema-less queries |
US7058637B2 (en) | 2001-05-15 | 2006-06-06 | Metatomix, Inc. | Methods and apparatus for enterprise application integration |
US8572059B2 (en) | 2001-05-15 | 2013-10-29 | Colin P. Britton | Surveillance, monitoring and real-time events platform |
US7650314B1 (en) | 2001-05-25 | 2010-01-19 | American Express Travel Related Services Company, Inc. | System and method for securing a recurrent billing transaction |
US7725427B2 (en) | 2001-05-25 | 2010-05-25 | Fred Bishop | Recurrent billing maintenance with radio frequency payment devices |
US8635131B1 (en) | 2001-07-10 | 2014-01-21 | American Express Travel Related Services Company, Inc. | System and method for managing a transaction protocol |
US7827106B2 (en) | 2001-07-10 | 2010-11-02 | American Express Travel Related Services Company, Inc. | System and method for manufacturing a punch-out RFID transaction device |
US8538863B1 (en) | 2001-07-10 | 2013-09-17 | American Express Travel Related Services Company, Inc. | System and method for facilitating a transaction using a revolving use account associated with a primary account |
US8294552B2 (en) | 2001-07-10 | 2012-10-23 | Xatra Fund Mx, Llc | Facial scan biometrics on a payment device |
US7360689B2 (en) | 2001-07-10 | 2008-04-22 | American Express Travel Related Services Company, Inc. | Method and system for proffering multiple biometrics for use with a FOB |
US8284025B2 (en) | 2001-07-10 | 2012-10-09 | Xatra Fund Mx, Llc | Method and system for auditory recognition biometrics on a FOB |
US9024719B1 (en) | 2001-07-10 | 2015-05-05 | Xatra Fund Mx, Llc | RF transaction system and method for storing user personal data |
US7805378B2 (en) | 2001-07-10 | 2010-09-28 | American Express Travel Related Servicex Company, Inc. | System and method for encoding information in magnetic stripe format for use in radio frequency identification transactions |
US7249112B2 (en) | 2002-07-09 | 2007-07-24 | American Express Travel Related Services Company, Inc. | System and method for assigning a funding source for a radio frequency identification device |
US8548927B2 (en) | 2001-07-10 | 2013-10-01 | Xatra Fund Mx, Llc | Biometric registration for facilitating an RF transaction |
US7746215B1 (en) | 2001-07-10 | 2010-06-29 | Fred Bishop | RF transactions using a wireless reader grid |
US7119659B2 (en) | 2001-07-10 | 2006-10-10 | American Express Travel Related Services Company, Inc. | Systems and methods for providing a RF transaction device for use in a private label transaction |
US7705732B2 (en) | 2001-07-10 | 2010-04-27 | Fred Bishop | Authenticating an RF transaction using a transaction counter |
US7762457B2 (en) | 2001-07-10 | 2010-07-27 | American Express Travel Related Services Company, Inc. | System and method for dynamic fob synchronization and personalization |
US8960535B2 (en) | 2001-07-10 | 2015-02-24 | Iii Holdings 1, Llc | Method and system for resource management and evaluation |
US20040236699A1 (en) | 2001-07-10 | 2004-11-25 | American Express Travel Related Services Company, Inc. | Method and system for hand geometry recognition biometrics on a fob |
US7493288B2 (en) | 2001-07-10 | 2009-02-17 | Xatra Fund Mx, Llc | RF payment via a mobile device |
US7996324B2 (en) | 2001-07-10 | 2011-08-09 | American Express Travel Related Services Company, Inc. | Systems and methods for managing multiple accounts on a RF transaction device using secondary identification indicia |
US7503480B2 (en) | 2001-07-10 | 2009-03-17 | American Express Travel Related Services Company, Inc. | Method and system for tracking user performance |
US7303120B2 (en) | 2001-07-10 | 2007-12-04 | American Express Travel Related Services Company, Inc. | System for biometric security using a FOB |
US8001054B1 (en) | 2001-07-10 | 2011-08-16 | American Express Travel Related Services Company, Inc. | System and method for generating an unpredictable number using a seeded algorithm |
US7668750B2 (en) | 2001-07-10 | 2010-02-23 | David S Bonalle | Securing RF transactions using a transactions counter |
US9031880B2 (en) | 2001-07-10 | 2015-05-12 | Iii Holdings 1, Llc | Systems and methods for non-traditional payment using biometric data |
US9454752B2 (en) | 2001-07-10 | 2016-09-27 | Chartoleaux Kg Limited Liability Company | Reload protocol at a transaction processing entity |
US7925535B2 (en) | 2001-07-10 | 2011-04-12 | American Express Travel Related Services Company, Inc. | System and method for securing RF transactions using a radio frequency identification device including a random number generator |
US6925472B2 (en) * | 2001-07-11 | 2005-08-02 | Sun Microsystems, Inc. | Tree structure to pass data values to prepared statement object |
US8417533B2 (en) * | 2001-09-25 | 2013-04-09 | Jeffrey J. Clawson | Method and system for the fire response dispatch protocol of an emergency dispatch system |
US7436937B2 (en) * | 2001-09-26 | 2008-10-14 | Clawson Jeffrey J | Method and system for the police response dispatch protocol of an emergency dispatch system |
US7158994B1 (en) | 2001-09-28 | 2007-01-02 | Oracle International Corporation | Object-oriented materialized views |
US7111020B1 (en) * | 2002-03-26 | 2006-09-19 | Oracle International Corporation | Incremental refresh of materialized views containing rank function, and rewrite of queries containing rank or rownumber or min/max aggregate functions using such a materialized view |
US7177862B2 (en) * | 2002-03-28 | 2007-02-13 | International Business Machines Corporation | Method and structure for federated web service discovery search over multiple registries with result aggregation |
US6754652B2 (en) * | 2002-03-29 | 2004-06-22 | International Business Machines Corporation | Database query optimizer framework with dynamic strategy dispatch |
US8494868B2 (en) * | 2002-05-07 | 2013-07-23 | Priority Dispatch Corporation | Method and system for a seamless interface between an emergency medical dispatch system and a nurse triage system |
US6805287B2 (en) | 2002-09-12 | 2004-10-19 | American Express Travel Related Services Company, Inc. | System and method for converting a stored value card to a credit card |
AU2003279845A1 (en) * | 2002-10-07 | 2004-05-04 | Metatomix, Inc. | Methods and apparatus for identifying related nodes in a directed graph having named arcs |
US7171412B2 (en) * | 2002-10-07 | 2007-01-30 | Sun Microsystems, Inc. | Restricted access model for hierarchical data structures |
US7096217B2 (en) | 2002-10-31 | 2006-08-22 | International Business Machines Corporation | Global query correlation attributes |
US8356019B1 (en) | 2002-12-11 | 2013-01-15 | Altera Corporation | Method and apparatus for utilizing patterns in data to reduce file size |
WO2004077218A2 (en) * | 2003-01-30 | 2004-09-10 | Vaman Technologies (R & D) Limited | System and method for unifying data and server functionalities and helping intertalk between these different server functionalities |
US20040172307A1 (en) * | 2003-02-06 | 2004-09-02 | Gruber Martin A. | Electronic medical record method |
US20040193575A1 (en) * | 2003-03-25 | 2004-09-30 | Chia-Hsun Chen | Path expressions and SQL select statement in object oriented language |
US7231396B2 (en) * | 2003-07-24 | 2007-06-12 | International Business Machines Corporation | Data abstraction layer for a database |
US8166101B2 (en) | 2003-08-21 | 2012-04-24 | Microsoft Corporation | Systems and methods for the implementation of a synchronization schemas for units of information manageable by a hardware/software interface system |
US8238696B2 (en) | 2003-08-21 | 2012-08-07 | Microsoft Corporation | Systems and methods for the implementation of a digital images schema for organizing units of information manageable by a hardware/software interface system |
US7426522B2 (en) * | 2003-09-23 | 2008-09-16 | International Business Machines Corporation | Object oriented query path expression to relational outer join translator method, system, article of manufacture, and computer program product |
US6976029B2 (en) * | 2004-02-10 | 2005-12-13 | Microsoft Corporation | System and method for providing user defined types in a database system |
US7437371B2 (en) * | 2004-02-10 | 2008-10-14 | Microsoft Corporation | Systems and methods for the implementation of unordered and ordered collections in a data store |
US7376656B2 (en) * | 2004-02-10 | 2008-05-20 | Microsoft Corporation | System and method for providing user defined aggregates in a database system |
KR101440615B1 (ko) * | 2004-02-10 | 2014-09-16 | 마이크로소프트 코포레이션 | 사용자 정의 타입들에 대한 계승을 지원하기 위한 시스템및 방법 |
US20050182669A1 (en) * | 2004-02-18 | 2005-08-18 | A.M Best Company, Inc. | Supplemental rating and financial review questionnaire |
US7734602B2 (en) | 2004-04-14 | 2010-06-08 | Oracle International Corporation | Choosing whether to use a delayed index maintenance depending on the portion of the materialized view (MV) changed |
US8478742B2 (en) * | 2004-04-14 | 2013-07-02 | Oracle Corporation | Using estimated cost to refresh a set of materialized views (MVS) |
US7890497B2 (en) * | 2004-04-14 | 2011-02-15 | Oracle International Corporation | Using estimated cost to schedule an order for refreshing a set of materialized views (MVS) |
KR101030368B1 (ko) | 2004-04-30 | 2011-04-20 | 마이크로소프트 코포레이션 | 데이터 저장소 내의 비순서화 및 순서화 컬렉션의 구현을 위한 시스템 및 방법 |
US7665063B1 (en) | 2004-05-26 | 2010-02-16 | Pegasystems, Inc. | Integration of declarative rule-based processing with procedural programming |
US7318550B2 (en) | 2004-07-01 | 2008-01-15 | American Express Travel Related Services Company, Inc. | Biometric safeguard method for use with a smartcard |
WO2006023421A2 (en) * | 2004-08-16 | 2006-03-02 | A.M. Best Company, Inc. | Regulatory data uniform submission component |
US20060041494A1 (en) * | 2004-08-17 | 2006-02-23 | Paul Tinnirello | Electronic statement preparation |
US7519962B2 (en) * | 2004-10-07 | 2009-04-14 | Thomson Financial Llc | Command script parsing using local and extended storage for command lookup |
US8049594B1 (en) | 2004-11-30 | 2011-11-01 | Xatra Fund Mx, Llc | Enhanced RFID instrument security |
US7430551B2 (en) * | 2005-01-20 | 2008-09-30 | International Business Machines Corporation | Method to enforce domain strong typing |
US8335704B2 (en) * | 2005-01-28 | 2012-12-18 | Pegasystems Inc. | Methods and apparatus for work management and routing |
US7971194B1 (en) | 2005-06-16 | 2011-06-28 | Sap Portals Israel Ltd. | Programming language techniques for client-side development and execution |
US7685567B2 (en) * | 2005-07-29 | 2010-03-23 | Microsoft Corporation | Architecture that extends types using extension methods |
US20070044083A1 (en) * | 2005-07-29 | 2007-02-22 | Microsoft Corporation | Lambda expressions |
US20070027849A1 (en) * | 2005-07-29 | 2007-02-01 | Microsoft Corporation | Integrating query-related operators in a programming language |
US20070027905A1 (en) * | 2005-07-29 | 2007-02-01 | Microsoft Corporation | Intelligent SQL generation for persistent object retrieval |
US7631011B2 (en) * | 2005-07-29 | 2009-12-08 | Microsoft Corporation | Code generation patterns |
US7702686B2 (en) * | 2005-07-29 | 2010-04-20 | Microsoft Corporation | Retrieving and persisting objects from/to relational databases |
JP2007079954A (ja) * | 2005-09-14 | 2007-03-29 | Sony Corp | 情報処理方法および装置、記録媒体、並びにプログラム |
JP2007128244A (ja) | 2005-11-02 | 2007-05-24 | Sony Corp | 情報処理方法および装置、記録媒体、並びにプログラム |
US7464084B2 (en) * | 2006-01-30 | 2008-12-09 | International Business Machines Corporation | Method for performing an inexact query transformation in a heterogeneous environment |
EP1821209A1 (de) * | 2006-02-16 | 2007-08-22 | Siemens Aktiengesellschaft | Verfahren zum Datenbankzugriff in einem Automatisierungssystem |
US8924335B1 (en) | 2006-03-30 | 2014-12-30 | Pegasystems Inc. | Rule-based user interface conformance methods |
US7860823B2 (en) * | 2006-05-04 | 2010-12-28 | Microsoft Corporation | Generic interface for deep embedding of expression trees in programming languages |
DE502006007802D1 (de) * | 2006-06-01 | 2010-10-14 | Mediareif Moestl & Reif Kommun | Verfahren zum steuern eines relationalen datenbanksystems |
US7774337B2 (en) * | 2006-07-11 | 2010-08-10 | Mediareif Moestl & Reif Kommunikations-Und Informationstechnologien Oeg | Method for controlling a relational database system |
US20080120283A1 (en) * | 2006-11-17 | 2008-05-22 | Oracle International Corporation | Processing XML data stream(s) using continuous queries in a data stream management system |
US8250525B2 (en) | 2007-03-02 | 2012-08-21 | Pegasystems Inc. | Proactive performance management for multi-user enterprise software systems |
US7645234B2 (en) * | 2007-06-13 | 2010-01-12 | Clawson Jeffrey J | Diagnostic and intervention tools for emergency medical dispatch |
US8066638B2 (en) | 2007-06-13 | 2011-11-29 | Clawson Jeffrey J | Diagnostic and intervention tools for emergency medical dispatch |
US8060868B2 (en) * | 2007-06-21 | 2011-11-15 | Microsoft Corporation | Fully capturing outer variables as data objects |
US7996388B2 (en) * | 2007-10-17 | 2011-08-09 | Oracle International Corporation | Adding new continuous queries to a data stream management system operating on existing queries |
US8296316B2 (en) * | 2007-10-17 | 2012-10-23 | Oracle International Corporation | Dynamically sharing a subtree of operators in a data stream management system operating on existing queries |
US8073826B2 (en) * | 2007-10-18 | 2011-12-06 | Oracle International Corporation | Support for user defined functions in a data stream management system |
US8521867B2 (en) * | 2007-10-20 | 2013-08-27 | Oracle International Corporation | Support for incrementally processing user defined aggregations in a data stream management system |
US7991766B2 (en) | 2007-10-20 | 2011-08-02 | Oracle International Corporation | Support for user defined aggregations in a data stream management system |
US8156134B2 (en) * | 2007-11-15 | 2012-04-10 | International Business Machines Corporation | Using different groups of query graph transform modules to generate execution plans for queries for different database types |
JP5044389B2 (ja) * | 2007-12-28 | 2012-10-10 | 株式会社野村総合研究所 | データ処理システム |
US8150866B2 (en) * | 2008-01-07 | 2012-04-03 | Semmle Limited | Creating concise and re-useable queries over complex data |
US20090271765A1 (en) * | 2008-04-29 | 2009-10-29 | Microsoft Corporation | Consumer and producer specific semantics of shared object protocols |
US8819046B2 (en) * | 2008-06-24 | 2014-08-26 | Microsoft Corporation | Data query translating into mixed language data queries |
US8364751B2 (en) | 2008-06-25 | 2013-01-29 | Microsoft Corporation | Automated client/server operation partitioning |
US8589436B2 (en) | 2008-08-29 | 2013-11-19 | Oracle International Corporation | Techniques for performing regular expression-based pattern matching in data streams |
US8032544B2 (en) * | 2008-09-24 | 2011-10-04 | The Boeing Company | Methods and apparatus for generating dynamic program files based on input queries that facilitate use of persistent query services |
US10481878B2 (en) | 2008-10-09 | 2019-11-19 | Objectstore, Inc. | User interface apparatus and methods |
US8881121B2 (en) * | 2009-02-18 | 2014-11-04 | International Business Machines Corporation | Processing an object-oriented query to retrieve data from a data source |
US8145859B2 (en) | 2009-03-02 | 2012-03-27 | Oracle International Corporation | Method and system for spilling from a queue to a persistent store |
US8352517B2 (en) * | 2009-03-02 | 2013-01-08 | Oracle International Corporation | Infrastructure for spilling pages to a persistent store |
US8150882B2 (en) * | 2009-03-03 | 2012-04-03 | Microsoft Corporation | Mapping from objects to data model |
US8843435B1 (en) | 2009-03-12 | 2014-09-23 | Pegasystems Inc. | Techniques for dynamic data processing |
US8468492B1 (en) | 2009-03-30 | 2013-06-18 | Pegasystems, Inc. | System and method for creation and modification of software applications |
US8971501B2 (en) | 2009-04-13 | 2015-03-03 | Priority Dispatch Corporation | Methods and systems to identify code hierarchy bias in medical priority dispatch systems |
US8387076B2 (en) | 2009-07-21 | 2013-02-26 | Oracle International Corporation | Standardized database connectivity support for an event processing server |
US8321450B2 (en) | 2009-07-21 | 2012-11-27 | Oracle International Corporation | Standardized database connectivity support for an event processing server in an embedded context |
US8527458B2 (en) | 2009-08-03 | 2013-09-03 | Oracle International Corporation | Logging framework for a data stream processing server |
US8386466B2 (en) | 2009-08-03 | 2013-02-26 | Oracle International Corporation | Log visualization tool for a data stream processing server |
US8355483B2 (en) * | 2009-09-11 | 2013-01-15 | Clawson Jeffrey J | Stroke diagnostic and intervention tool for emergency dispatch |
US8335298B2 (en) * | 2009-09-14 | 2012-12-18 | Clawson Jeffrey J | Pandemic diagnostic and intervention tool for emergency dispatch |
US9305057B2 (en) | 2009-12-28 | 2016-04-05 | Oracle International Corporation | Extensible indexing framework using data cartridges |
US9430494B2 (en) | 2009-12-28 | 2016-08-30 | Oracle International Corporation | Spatial data cartridge for event processing systems |
US8959106B2 (en) | 2009-12-28 | 2015-02-17 | Oracle International Corporation | Class loading using java data cartridges |
US8294570B2 (en) * | 2010-02-24 | 2012-10-23 | Clawson Jeffrey J | Burn diagnostic and intervention tool for emergency dispatch |
US8739118B2 (en) | 2010-04-08 | 2014-05-27 | Microsoft Corporation | Pragmatic mapping specification, compilation and validation |
US8582866B2 (en) | 2011-02-10 | 2013-11-12 | Edge 3 Technologies, Inc. | Method and apparatus for disparity computation in stereo images |
US8713049B2 (en) | 2010-09-17 | 2014-04-29 | Oracle International Corporation | Support for a parameterized query/view in complex event processing |
US9189280B2 (en) | 2010-11-18 | 2015-11-17 | Oracle International Corporation | Tracking large numbers of moving objects in an event processing system |
SG10201600390TA (en) | 2011-01-19 | 2016-02-26 | Jeffrey J Clawson | Meningitis Diagnostic And Intervention Tool For Emergency Dispatch |
US9229984B2 (en) | 2011-01-25 | 2016-01-05 | Hewlett Packard Enterprise Development Lp | Parameter expressions for modeling user defined function execution in analytical data processing systems |
US8856151B2 (en) | 2011-01-25 | 2014-10-07 | Hewlett-Packard Development Company, L.P. | Output field mapping of user defined functions in databases |
US9355145B2 (en) | 2011-01-25 | 2016-05-31 | Hewlett Packard Enterprise Development Lp | User defined function classification in analytical data processing systems |
US8670526B2 (en) | 2011-02-11 | 2014-03-11 | Jeffrey J. Clawson | Hate crime diagnostic and intervention tool for emergency dispatch |
US8396191B2 (en) | 2011-02-11 | 2013-03-12 | Jeffrey J. Clawson | Anti-social protocol for emergency dispatch |
US8880487B1 (en) | 2011-02-18 | 2014-11-04 | Pegasystems Inc. | Systems and methods for distributed rules processing |
US8990416B2 (en) | 2011-05-06 | 2015-03-24 | Oracle International Corporation | Support for a new insert stream (ISTREAM) operation in complex event processing (CEP) |
US9329975B2 (en) | 2011-07-07 | 2016-05-03 | Oracle International Corporation | Continuous query language (CQL) debugger in complex event processing (CEP) |
US9195936B1 (en) | 2011-12-30 | 2015-11-24 | Pegasystems Inc. | System and method for updating or modifying an application without manual coding |
US8589451B1 (en) * | 2012-05-24 | 2013-11-19 | Sap Ag | Systems and methods for generating a common data model for relational and object oriented databases |
US8712020B2 (en) | 2012-09-06 | 2014-04-29 | Jeffrey J. Clawson | Pandemic protocol for emergency dispatch |
US9563663B2 (en) | 2012-09-28 | 2017-02-07 | Oracle International Corporation | Fast path evaluation of Boolean predicates |
US9262479B2 (en) | 2012-09-28 | 2016-02-16 | Oracle International Corporation | Join operations for continuous queries over archived views |
US10956422B2 (en) | 2012-12-05 | 2021-03-23 | Oracle International Corporation | Integrating event processing with map-reduce |
US10298444B2 (en) | 2013-01-15 | 2019-05-21 | Oracle International Corporation | Variable duration windows on continuous data streams |
US9098587B2 (en) | 2013-01-15 | 2015-08-04 | Oracle International Corporation | Variable duration non-event pattern matching |
US8873719B2 (en) | 2013-01-31 | 2014-10-28 | Jeffrey J. Clawson | Active assailant protocol for emergency dispatch |
CN105144256B (zh) | 2013-01-31 | 2017-09-26 | 杰弗里·J·克劳森 | 用于紧急响应的文本消息传送的系统和方法 |
US9047249B2 (en) | 2013-02-19 | 2015-06-02 | Oracle International Corporation | Handling faults in a continuous event processing (CEP) system |
US9390135B2 (en) | 2013-02-19 | 2016-07-12 | Oracle International Corporation | Executing continuous event processing (CEP) queries in parallel |
US9418113B2 (en) | 2013-05-30 | 2016-08-16 | Oracle International Corporation | Value based windows on relations in continuous data streams |
US9594811B2 (en) | 2013-07-02 | 2017-03-14 | Sap Se | Method and system for limiting database access results |
US9354948B2 (en) | 2013-09-06 | 2016-05-31 | Sap Se | Data models containing host language embedded constraints |
US9176801B2 (en) | 2013-09-06 | 2015-11-03 | Sap Se | Advanced data models containing declarative and programmatic constraints |
US9619552B2 (en) | 2013-09-06 | 2017-04-11 | Sap Se | Core data services extensibility for entity-relationship models |
US9639572B2 (en) | 2013-09-06 | 2017-05-02 | Sap Se | SQL enhancements simplifying database querying |
US9442977B2 (en) | 2013-09-06 | 2016-09-13 | Sap Se | Database language extended to accommodate entity-relationship models |
US9430523B2 (en) | 2013-09-06 | 2016-08-30 | Sap Se | Entity-relationship model extensions using annotations |
US9361407B2 (en) | 2013-09-06 | 2016-06-07 | Sap Se | SQL extended with transient fields for calculation expressions in enhanced data models |
US9934279B2 (en) | 2013-12-05 | 2018-04-03 | Oracle International Corporation | Pattern matching across multiple input data streams |
CN104714974A (zh) * | 2013-12-17 | 2015-06-17 | 航天信息股份有限公司 | 一种查询语句解析与再处理的方法和装置 |
US10049329B2 (en) | 2014-05-30 | 2018-08-14 | Amadeus S.A.S. | Content exchange with a travel management system |
US10042871B2 (en) * | 2014-05-30 | 2018-08-07 | Amadeaus S.A.S. | Content management in a travel management system |
US9244978B2 (en) | 2014-06-11 | 2016-01-26 | Oracle International Corporation | Custom partitioning of a data stream |
US9712645B2 (en) | 2014-06-26 | 2017-07-18 | Oracle International Corporation | Embedded event processing |
US9753971B2 (en) * | 2014-09-15 | 2017-09-05 | Sap Se | Hot deployment of embedded database procedures |
US10120907B2 (en) | 2014-09-24 | 2018-11-06 | Oracle International Corporation | Scaling event processing using distributed flows and map-reduce operations |
US9886486B2 (en) | 2014-09-24 | 2018-02-06 | Oracle International Corporation | Enriching events with dynamically typed big data for event processing |
US10469396B2 (en) | 2014-10-10 | 2019-11-05 | Pegasystems, Inc. | Event processing with enhanced throughput |
US9516166B1 (en) | 2015-05-28 | 2016-12-06 | Jeffrey J. Clawson | Chemical suicide protocol for emergency response |
WO2017018901A1 (en) | 2015-07-24 | 2017-02-02 | Oracle International Corporation | Visually exploring and analyzing event streams |
US10657614B2 (en) | 2015-12-23 | 2020-05-19 | Jeffrey J. Clawson | Locator diagnostic system for emergency dispatch |
US9877171B2 (en) | 2016-04-08 | 2018-01-23 | Jeffrey J. Clawson | Picture/video messaging protocol for emergency response |
US10698599B2 (en) | 2016-06-03 | 2020-06-30 | Pegasystems, Inc. | Connecting graphical shapes using gestures |
US10698647B2 (en) | 2016-07-11 | 2020-06-30 | Pegasystems Inc. | Selective sharing for collaborative application usage |
AU2019256700A1 (en) | 2018-04-19 | 2020-11-26 | Jeffrey Clawson | Expedited dispatch protocol system and method |
US11048488B2 (en) | 2018-08-14 | 2021-06-29 | Pegasystems, Inc. | Software code optimizer and method |
US12067009B2 (en) * | 2018-12-10 | 2024-08-20 | Teradata Us, Inc. | Predictive query parsing time and optimization |
US11531652B2 (en) * | 2019-08-30 | 2022-12-20 | Oracle International Corporation | Database modularization of pluggable guest languages |
US11567945B1 (en) | 2020-08-27 | 2023-01-31 | Pegasystems Inc. | Customized digital content generation systems and methods |
US11937160B2 (en) | 2021-04-23 | 2024-03-19 | Priority Dispatch Corporation | System and method for emergency dispatch |
US11910471B2 (en) | 2021-04-23 | 2024-02-20 | Priority Dispatch Corp. | System and method for emergency dispatch |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5067072A (en) * | 1987-11-06 | 1991-11-19 | Visystems, Inc. | Virtual software machine which preprocesses application program to isolate execution dependencies and uses target computer processes to implement the execution dependencies |
US4961133A (en) * | 1987-11-06 | 1990-10-02 | Visystems, Inc. | Method for providing a virtual execution environment on a target computer using a virtual software machine |
JPH01162979A (ja) * | 1987-12-19 | 1989-06-27 | Ricoh Co Ltd | データベース管理システムの機能拡張装置 |
JP2760794B2 (ja) * | 1988-01-29 | 1998-06-04 | 株式会社日立製作所 | データベース処理方法および装置 |
US4914590A (en) * | 1988-05-18 | 1990-04-03 | Emhart Industries, Inc. | Natural language understanding system |
-
1990
- 1990-04-30 US US07/516,369 patent/US5761493A/en not_active Expired - Lifetime
-
1991
- 1991-04-29 EP EP91303851A patent/EP0455447B1/de not_active Expired - Lifetime
- 1991-04-29 DE DE69131336T patent/DE69131336T2/de not_active Expired - Fee Related
- 1991-04-30 JP JP3099213A patent/JPH06110767A/ja active Pending
-
1997
- 1997-04-17 US US08/837,396 patent/US5826077A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
DE69131336D1 (de) | 1999-07-22 |
US5761493A (en) | 1998-06-02 |
US5826077A (en) | 1998-10-20 |
EP0455447A3 (en) | 1993-06-30 |
EP0455447A2 (de) | 1991-11-06 |
EP0455447B1 (de) | 1999-06-16 |
JPH06110767A (ja) | 1994-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69131336T2 (de) | Verfahren und Gerät um eine inhaltsaddressierbare Abfragemöglichkeit einer Programmiersprache hinzuzufügen | |
DE69033203T2 (de) | Programmierbarer Rechner mit automatischer Übersetzung zwischen Quell - und Zielkode mit Versionüberwachung | |
DE69132908T2 (de) | Verwendung von Anwendungsprogrammen für Daten in einem heterogenen Datenbanksystem | |
DE69429866T2 (de) | Verfahren und gerät zur modellierung und abfrage von datenbankenstrukturen mit natürlichen sprachartigen konstruktionen | |
US6708186B1 (en) | Aggregating and manipulating dictionary metadata in a database system | |
DE69131530T2 (de) | Datenbankverwaltungssystem und -verfahren zur Unterstützung von objektorientierter Programmierung | |
EP1088280B1 (de) | Verfahren und system zur schnellen speicherresidenten verarbeitung von transaktionsdaten | |
Atkinson et al. | The object-oriented database system manifesto | |
US7152073B2 (en) | Method and system for defining sets by querying relational data using a set definition language | |
DE69031078T2 (de) | Rechnerunterstützte softwareentwicklungseinrichtung | |
US7263512B2 (en) | Accessing and updating views and relations in a relational database | |
DE69509118T2 (de) | Implementierungsunabhängige erweiterbare abfragearchitektur für systeme zur informationswiederauffindung | |
US20060294159A1 (en) | Method and process for co-existing versions of standards in an abstract and physical data environment | |
US20030163461A1 (en) | Method and system for defining sets by querying relational data using a set definition language | |
DE102014204840A1 (de) | Verbessertes Datenintegrationswerkzeug | |
US12038939B2 (en) | Configurable ontology to data model transformation | |
Kulkarni et al. | EFDM: Extended functional data model | |
McGee | On user criteria for data model evaluation | |
Płodzień et al. | Object query optimization through detecting independent subqueries | |
DE3853806T2 (de) | Dynamische Umgebungsanpassung von Rechnerprogrammen. | |
DE69808797T2 (de) | Verfahren und einrichtung zum laden von gespeicherten prozeduren in eine datenbank gemäss objekt-orientierten datenabhängigkeiten | |
Cybula et al. | Decomposition of SBQL queries for optimal result caching | |
Muji et al. | Qualitative Metrics For Development Technologies Evaluation In Database-driven Information Systems | |
Vandenberg et al. | An algebra for complex objects with arrays and identity | |
Zicari et al. | Interoperability between a rule-based database language and an object-oriented database language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |