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ügen

Info

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
Application number
DE69131336T
Other languages
English (en)
Other versions
DE69131336D1 (de
Inventor
Jose A Blakely
Craig W Thompson
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Texas Instruments Inc filed Critical Texas Instruments Inc
Publication of DE69131336D1 publication Critical patent/DE69131336D1/de
Application granted granted Critical
Publication of DE69131336T2 publication Critical patent/DE69131336T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • G06F16/2438Embedded query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/289Object oriented databases
    • YGENERAL 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
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • Y10S707/99934Query 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

    Hintergrund der Erfindung Gebiet der Erfindung
  • 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.
  • Beschreibung des Standes der Technik
  • 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.
  • Tabelle 2: Einige Beziehungen zwischen relationalen und objektorientierten Konzepten.
  • 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.
  • Tabelle 3: Komponenten einer Klassendefinition.
  • 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.
  • Zusammenfassung der Erfindung
  • 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:
  • Beschreibung der Zeichnung
  • 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.
  • Ausführliche Beschreibung einer bevorzugten Ausführungsform
  • 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.
  • Beispiel 1. Gewinne die bei Aetna versicherten Patienten wieder.
  • 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.
  • Beispiel 2. Wiedergewinnen der bei Aetna versicherten Patienten als eine Gruppe von Personen.
  • 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 &theta; {= = , < , < =, > , > = ! =} 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; &theta; t&sub2;, t&sub1; &theta; c, t&sub1; IN s&sub1;, s&sub1; CONTAINS s&sub2;, v &theta; ALL s&sub1;, v &theta; 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 &theta; 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.
  • Merkmale der bevorzugten Ausführungsform
  • 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.
DE69131336T 1990-04-30 1991-04-29 Verfahren und Gerät um eine inhaltsaddressierbare Abfragemöglichkeit einer Programmiersprache hinzuzufügen Expired - Fee Related DE69131336T2 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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