4D v17.4dataClass.query() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v17.4
dataClass.query()
|
Vergleich | Symbol(e) | Kommentar |
Ist gleich | =, == | Erhält passende Daten, unterstützt den Joker @, berücksichtigt weder Groß- und Kleinschreibung noch diakritische Zeichen. |
===, IS | Erhält passende Daten, bewertet @ als Standardzeichen und nicht als Joker, berücksichtigt weder Groß- und Kleinschreibung noch diakritische Zeichen. | |
Not equal to | #, != | unterstützt den Joker (@) |
!==, IS NOT | bewertet @ als Standardzeichen und nicht als Joker | |
Kleiner als | < | |
Größer als | > | |
Kleiner als oder gleich | <= | |
Größer als oder gleich | >= | |
Enthalten in | IN | Erhält Daten, die mit mindestens einem Wert in einer Collection bzw. einem Satz Werte übereinstimmt |
Nicht enthalten in einer Anweisung | NOT | Klammern sind zwingend, wenn NOT vor einer Anweisung mit mehreren Operatoren verwendet wird |
Enthält Schlüsselwort | % | Schlüsselwörter lassen sich in Attributen vom Typ String oder Bild verwenden |
Konjunktion | Symbol(e) |
AND | &, &&, and |
OR | |, ||, or |
Anführungszeichen verwenden
Innerhalb der Suche müssen Sie einfache Anführungszeichen ' ' setzen, doppelte Anführungszeichen " " verwenden Sie zum Umrahmen der gesamten Suche. Andernfalls wird ein Fehler generiert. Zum Beispiel:
"employee.name = 'smith' AND employee.firstname = 'john'"
Hinweis: Einzelne Anführungszeichen, z.B. ein Apostroph, werden in gesuchten Werten nicht unterstützt, da sie den Suchstring unterbrechen. So erzeugt die Suche "comp.name = 'John's pizza' " einen Fehler. Für solche Fälle sollten Sie Platzhalter verwenden (siehe unten).
Klammern verwenden
Mit Klammern in einer Suche können Sie Prioritäten beim Berechnen setzen. Zum Beispiel:
"(employee.age >= 30 OR employee.age <= 65) AND (employee.salary <= 10000 OR employee.status = 'Manager')"
Bei Suchen mit Platzhaltern sind Parameter value erforderlich. Platzhalter sind Tags, die Sie in Suchstrings einfügen und die beim Bewerten durch einen anderen Wert ersetzt werden. Sie können bis zu 128 Parameter value verwenden.
Hinweis: Werte für Platzhalter lassen sich auch als Collection in der Eigenschaft parameters des optionalen Parameters querySettings übergeben (nur Suchen für entitySelection und dataClass). Weitere Informationen dazu finden Sie unten im Abschnitt Parameter querySettings.
In queryString fügen Sie für jeden Platzhalter :paramIndex ein (d.h. "verwende den Parameter paramIndex der Suche als Wert zum Vergleichen") und dann übergeben Sie die angeforderten Werte als Parameter value. Beispiel: Für eine Suche nach Angestellten, die in Chicago wohnen und unter 10 000 verdienen, können Sie schreiben:
"employee.city = :1 & employee.salary < :2"; "Chicago";10000
Der Wert wird einmal am Anfang bewertet; er wird nicht für jedes Element bewertet.
Platzhalter in Suchen werden aus zwei Gründen empfohlen:
$vquery:="status = 'public' & name = "+myname //Benutzer gibt Namen ein
$result:=$col.query($vquery)
$result:=$col.query("status='public' & name=:1";$myname)
$result:=$col.query("address.city = :1 & name =:2";$city;$myVar+"@")
$result2:=$col.query("company.name = :1";"John's Pizzas")
Nach Nullwerten suchen
Beim Suchen nach Nullwerten können Sie keine Syntax mit Platzhaltern verwenden, da die Such-Engine Null als einen unerwarteten Vergleichswert betrachtet. Führen Sie beispielsweise folgende Suche aus:
$vSingles:=ds.Person.query("spouse = null") //korrekte Syntax
Hinweis: Dieser Parameter wird nur von den Methoden entitySelection.query() und dataClass.query() unterstützt.
In den Parametern querySettings können Sie ein Objekt mit zusätzlichen Optionen übergeben. Es gibt folgende Eigenschaften:
Eigenschaft | Typ | Beschreibung |
parameters | Collection | Werte zum Vergleichen beim Verwenden von Platzhaltern in queryString (alternativer Weg, um Platzhaltern Werte zu übergeben). Werte, die in Parametern value direkt übergeben wurden, werden an die Platzhalter-Sequenz angehängt. |
queryPlan | Boolean | Gibt in der resultierenden Entity Collection direkt vor der Ausführung die ausführliche Beschreibung der Suche zurück oder nicht, z.B. die geplante Suche. Die zurückgegebene Eigenschaft ist ein Objekt mit jeder geplanten Suche und untergeordneten Suchen bei komplexen Suchläufen. Diese Option ist während der Entwicklungsphase einer Anwendung hilfreich und wird in der Regel zusammen mit queryPath verwendet. Standard wenn weggelassen: false |
queryPath | Boolean | Gibt in der resultierenden Entity Collection die ausführliche Beschreibung der aktuell durchgeführten Suche zurück oder nicht. Die zurückgegebene Eigenschaft ist ein Objekt mit dem aktuellen Pfad für die Suche (in der Regel identisch mit queryPlan, kann unterschiedlich sein, wenn die Engine die Suche optimiert), sowie Bearbeitungszeit und die Anzahl der gefundenen Datensätze. Diese Option ist während der Entwicklungsphase einer Anwendung hilfreich. Standard wenn weggelassen: false |
Über queryPlan und queryPath
Die in queryPlan/queryPath gespeicherten Angaben enthalten den Suchtyp (indiziert und sequentiell) und jede notwendige Untersuche zusammen mit den Verbindungsoperatoren. Suchpfade enthalten auch die Anzahl der gefundenen Entities und die erforderliche Zeit zum Ausführen jedes Suchkriteriums. Das sind nützliche Informationen, die Sie beim Entwickeln Ihrer Anwendung analysieren können. Generally, Die Beschreibung des Suchplans und seines Pfads sind im allgemeinen identisch. Sie können u.U. unterschiedlich sein, da 4D beim Ausführen der Suche dynamische Optimierungen zum Verbessern der Performance einfügen kann. Die 4D Engine kann z.B. dynamisch eine indizierte Suche in eine sequentielle umwandeln, wenn sie diese für schneller hält. Das kann bei geringer Anzahl der gesuchten Entities der Fall sein.
Führen Sie beispielsweise folgende Suche aus:
$sel:=ds.Employee.query("salary < :1 and employer.name = :2 or employer.revenues > :3";50000;"Lima West Kilo";10000000;New object("queryPath";True;"queryPlan";True))
queryPlan:
{Or:[{And:[{item:[index : Employee.salary ] < 50000},{item:Join on Table : Company : Employee.employerID = Company.ID,subquery:[{item:[index : Company.name ] = Lima West Kilo}]}]},{item:Join on Table : Company : Employee.employerID = Company.ID,subquery:[{item:[index : Company.revenues ] > 10000000}]}]}
queryPath:
{steps:[{description:OR,time:63,recordsfounds:1388132,steps:[{description:AND,time:32,recordsfounds:131,steps:[{description:[index : Employee.salary ] < 50000,time:16,recordsfounds:728260},{description:Join on Table : Company : Employee.employerID = Company.ID,time:0,recordsfounds:131,steps:[{steps:[{description:[index : Company.name ] = Lima West Kilo,time:0,recordsfounds:1}]}]}]},{description:Join on Table : Company : Employee.employerID = Company.ID,time:31,recordsfounds:1388132,steps:[{steps:[{description:[index : Company.revenues ] > 10000000,time:0,recordsfounds:933}]}]}]}]}
Verschiedene Beispiele für gültige Suchen.
Standardsuche mit Platzhaltern:
$entitySelection:=dataClass.query("(firstName = :1 or firstName = :2) and (lastName = :3 or lastName = :4)";"D@";"R@";"S@";"K@")
Standardsuche ohne Platzhalter:
$entitySelection :=dataClass.query("firstName = 'S@'")
Suche mit einer verknüpften dataClass:
$entitySelection:=dataClass.query("lastName = :1 and manager.lastName = :2";"M@";"S@")
Suche mit queryPlan und queryPath Objekten:
$entitySelection:=dataClass.query("(firstName = :1 or firstName = :2) and (lastName = :3 or lastName = :4)";"D@";"R@";"S@";"K@";New object("queryPlan";True;"queryPath";True))
//Sie können dann diese Eigenschaften in der resultierenden Entity-Selection erhalten
C_OBJECT($queryPlan;$queryPath)
$queryPlan:=$entitySelection.queryPlan
$queryPath:=$entitySelection.queryPath
Suche mit Platzhaltern und Werten in Form einer Collection:
$params:=New object
$params.parameters:=New collection("D@";"R@";"S@";"K@")
$entitySelection:=dataClass.query("(firstName = :1 or firstName = :2) and (lastName = :3 or lastName = :4)";$params)
Suche in einer Anweisung NOT:
$entitySelection:=dataClass.query("not(firstName=Kim)")
Suche mit einem Attributspfad vom Typ Collection:
$entitySelection:=dataClass.query("additionalInfo.hobbies[].name = horsebackriding")
Suche mit einem Attributspfad vom Typ Object:
$entitySelection:=ds.Employee.query("extra.eyeColor = :1";"blue")
Suche mit einer Anweisung IN:
$entitySelection:=dataClass.query("firstName in :1";New collection("Kim";"Dixie"))
Suche mit einer Anweisung NOT (IN):
$entitySelection:=ds.Employee.query("not (firstName in :1)";New collection("John";"Jane"))
Suche mit einem Datum:
$entitySelection:=dataClass.query("birthDate > :1";"1970-01-01")
collection.query( )
dataClass.all()
dataClass.newSelection()
entitySelection.query()
entitySelection.queryPath
entitySelection.queryPlan
Produkt: 4D
Thema: ORDA - DataClass
4D Programmiersprache ( 4D v17)
4D Programmiersprache ( 4D v17.1)
4D Programmiersprache ( 4D v17.2)
4D Programmiersprache ( 4D v17.3)
4D Programmiersprache ( 4D v17.4)