4D v17.4dataClass.query( ) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v17.4
dataClass.query( )
|
Comparación | Símbolo(s) | Comentario |
Igual a | =, == | Obtiene datos coincidentes, soporta el comodín (@), no distingue entre mayúsculas y minúsculas ni diacrítico. |
===, IS | Obtiene datos que coinciden, considera el comodín (@) como un carácter estándar, no distingue entre mayúsculas y minúsculas ni es diacrítico | |
No igual a | #, != | Soporta el comodín (@) |
!==, IS NOT | Considera el comodín (@) como un carácter estándar, | |
#, !=, is not | ||
Menor que | < | |
Mayor que | > | |
Menor o igual a | <= | |
Mayor que o igual a | >= | |
Incluido en | IN | Obtiene datos iguales para al menos uno de los valores en una colección o en un conjunto de valores |
Condición No aplicada a una instrucción | NOT | Los paréntesis son obligatorios cuando se usa Not antes de una instrucción que contiene varios operadores |
Contiene palabra clave | % | Las palabras claves se pueden usar en atributos de tipo texto o imagen |
Conjunción | Símbolo(s) |
AND | &, &&, and |
OR | |, ||, or |
Utilizando comillas
Cuando utiliza comillas dentro de búsquedas, debe usar comillas simples ' ' dentro de la búsqueda y comillas dobles " " para abarcar toda la búsqueda, de lo contrario, se devuelve un error. Por ejemplo:
"employee.name = 'smith' AND employee.firstname = 'john'"
Nota: las comillas simples (') no se soportan en los valores buscados, ya que romperían la cadena de consulta. Por ejemplo, "comp.name = 'John's pizza' " generará un error. Si necesita buscar valores con comillas simples, puede considerar el uso de marcadores de posición (ver abajo).
Utilizando paréntesis
Puede utilizar paréntesis en búsquedas para dar prioridad al cálculo. Por ejemplo, puede organizar una búsqueda de la siguiente manera:
"(employee.age >= 30 OR employee.age <= 65) AND (employee.salary <= 10000 OR employee.status = 'Manager')"
Los parámetros valor se deben usar cuando la consulta se genera con marcadores de posición. Los marcadores de posición son etiquetas que se inserta en cadenas de búsqueda y que se reemplazan por otro valor cuando se evalúa la cadena de búsqueda. Puede usar hasta 128 parámetros de valor.
Nota: los valores para los marcadores de posición también se pueden pasar como una colección en la propiedad de parámetros del parámetro opcional confBusq (solo para las consultas entitySelection y dataClass). Para más información, consulte el párrafo Parámetro confBusq.
En cadenaBusq, inserte :paramIndex para cada marcador de posición (lo que significa "use el parámetro paramIndex de la consulta como el valor a comparar") y luego, pase el(los) valor(es) solicitado(s) como parámetro(s) valor. Por ejemplo, para consultar a los empleados que viven en Chicago y ganan menos de 10 000, puede escribir:
"employee.city = :1 & employee.salary < :2"; "Chicago";10000
Se recomienda utilizar marcadores de posición en consultas por dos motivos:
$vquery:="status = 'public' & name = "+myname //user enters their name
$result:=$col.query($vquery)
$result:=$col.query("status='public' & name=:1";$myvar)
$result:=$col.query("address.city = :1 & name =:2";$city;$myVar+"@")
$result2:=$col.query("company.name = :1";"John's Pizzas")
Buscando valores null
Cuando busca valores null, no puede usar la sintaxis de marcador de posición porque el motor de consulta considera null como un valor de comparación inesperado. Por ejemplo, si ejecuta la siguiente consulta:
$vSingles:=ds.Person.query("spouse = null") //sintaxis correcta
Nota: este parámetro solo es soportado por los métodos entitySelection.query( ) y dataClass.query( ).
En el parámetro confBusq, puede pasar un objeto que contenga opciones adicionales. Las siguientes propiedades son soportadas:
Propiedad | Tipo | Descripción |
parámetros | Colección | Valores a comparar cuando se usan marcadores de posición en cadenaBusq (forma alternativa de pasar valores a los marcadores de posición). Si algunos valores también se han pasado directamente en parámetros valor, estos valores se anexan a la secuencia de marcador de posición. |
planBusqueda | Booleano | En la colección de entidades resultante, devuelve o no devuelve la descripción detallada de la consulta justo antes de que se ejecute, es decir, la consulta planificada. La propiedad devuelta es un objeto que incluye cada consulta planeada y subconsulta (en el caso de una consulta compleja). Esta opción es útil durante la fase de desarrollo de una aplicación. Por lo general, se utiliza junto con queryPath. Predeterminado si se omite: false |
rutaBusqueda | Booleano | En la colección de entidades resultante, devuelve o no devuelve la descripción detallada de la consulta tal como se realiza. La propiedad devuelta es un objeto que contiene la ruta real utilizada para la consulta (generalmente idéntica a la de queryPlan, pero puede diferir si el motor logra optimizar la consulta), así como el tiempo de procesamiento y la cantidad de registros encontrados. Esta opción es útil durante la fase de desarrollo de la aplicación. Por defecto si se omite: false |
Acerca de planBusqueda y rutaBusqueda
La información registrada en planBusqueda/rutaBusqueda incluye el tipo de consulta (indexada y secuencial) y cada subconsulta necesaria junto con los operadores de conjunción. Las rutas de búsqueda también contienen la cantidad de entidades encontradas y el tiempo requerido para ejecutar cada criterio de búsqueda. Puede resultarle útil analizar esta información mientras desarrolla sus aplicaciones. En general, la descripción del plan de búsqueda y su ruta son idénticos, pero pueden diferir porque 4D puede implementar optimizaciones dinámicas cuando se ejecuta una búsqueda para mejorar el rendimiento. Por ejemplo, el motor 4D puede convertir dinámicamente una búsqueda indexada en una secuencial si estima que es más rápida. Este caso particular puede ocurrir cuando el número de entidades que se buscan es bajo.
Por ejemplo, si ejecuta la siguiente búsqueda:
$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}]}]}]}]}
Aquí hay varios ejemplos de consultas válidas.
Consulta estándar con marcadores de posición:
$entitySelection:=dataClass.query("(firstName = :1 or firstName = :2) and (lastName = :3 or lastName = :4)";"D@";"R@";"S@";"K@")
Consulta estándar sin marcadores de posición:
$entitySelection :=dataClass.query("firstName = 'S@'")
Consulta con un dataClass relacionado:
$entitySelection:=dataClass.query("lastName = :1 and manager.lastName = :2";"M@";"S@")
Consulta con objetos queryPlan y queryPath:
$entitySelection:=dataClass.query("(firstName = :1 or firstName = :2) and (lastName = :3 or lastName = :4)";"D@";"R@";"S@";"K@";New object("queryPlan";True;"queryPath";True))
//Puede obtener estas propiedades en la selección de entidad resultante
C_OBJECT($queryPlan;$queryPath)
$queryPlan:=$entitySelection.queryPlan
$queryPath:=$entitySelection.queryPath
Consulta con marcadores de posición y valores dados como una colección:
$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)
Consulta con una declaración NOT:
$entitySelection:=dataClass.query("not(firstName=Kim)")
Consulta con una ruta de atributo de tipo Collection:
$entitySelection:=dataClass.query("additionalInfo.hobbies[].name = horsebackriding")
Consulta con una ruta de atributo de tipo Object:
$entitySelection:=ds.Employee.query("extra.eyeColor = :1";"blue")
Consulta con una declaración IN:
$entitySelection:=dataClass.query("firstName in :1";New collection("Kim";"Dixie"))
Consulta con una instrucción NOT (IN):
$entitySelection:=ds.Employee.query("not (firstName in :1)";New collection("John";"Jane"))
Consulta con una fecha:
$entitySelection:=dataClass.query("birthDate > :1";"1970-01-01")
collection.query( )
dataClass.all( )
dataClass.newSelection( )
entitySelection.query( )
entitySelection.queryPath
entitySelection.queryPlan
Producto: 4D
Tema: ORDA - DataClass
Manual de lenguaje 4D ( 4D v17)
Manual de lenguaje 4D ( 4D v17.1)
Manual de lenguaje 4D ( 4D v17.2)
Manual de lenguaje 4D ( 4D v17.3)
Manual de lenguaje 4D ( 4D v17.4)