Quiero obtener una declaración SQL usando el complemento jQuery QueryBuilder. Todo funciona exactamente como quiero cuando uso las condiciones predeterminadas 'Y' y 'O'. Sin embargo, cuando trato de usar la condición 'XOR', aparece un error (ver más abajo).
Este es mi código para QueryBuilder:
$(document).ready(function () { var options = { allow_empty: true, filters: [ { id: "name", label: "Name", type: "string", default_value: "Noah", size: 30, unique: true, }, ], /* XOR does not work with SQL */ conditions: ["AND", "OR", "XOR"], }; $("#builder").queryBuilder(options); $(".parse-json").on("click", function () { var res = $("#builder").queryBuilder("getSQL", $(this).data("stmt"), false); console.log( res.sql + (res.params ? "\n\n" + JSON.stringify(res.params, undefined, 2) : "") ); }); });Aquí hay una imagen de ejemplo de QueryBuilder en mi sitio web: haga clic aquí
Como se dijo antes, cuando elijo la condición 'O', obtengo la instrucción SQL deseada.
name = ? OR name = ? [ "Noah", "James" ]Pero cuando elijo la condición "XOR", aparece un mensaje de error que dice:
Uncaught Error: Unable to build SQL query with condition "XOR" at Function.error (jquery-2.x-git.min.js:2)Aquí puede encontrar el archivo que da el error: jquery-2.x-git.min.js:2
He buscado en Internet durante más de 2 horas, pero no pude encontrar nada que apuntara remotamente en esa dirección. Cualquier ayuda es muy apreciada.
**Una cosa que vale la pena señalar es que al extraer las reglas como un objeto en lugar de una declaración SQL, la condición "XOR" funciona. Aquí puede ver el código utilizado para obtener la declaración como un objeto:
$(".parse-json").on("click", function () { console.log( JSON.stringify($("#builder").queryBuilder("getRules"), undefined, 2) ); });No, no es posible, la propiedad de conditions solo permite 'AND' u 'OR' como valores, como se indica en la documentación :
| Nombre | escribe | defecto | descripción |
|---|---|---|---|
| […] | |||
| condiciones | cuerda[] | ['Y', 'O'] | Matriz de condiciones de grupo disponibles. Utilice la opción lang para cambiar la etiqueta. |
| […] |
Parece que se informó un problema en 2018, pero se cerró sin una resolución evidente: https://github.com/mistic100/jQuery-QueryBuilder/issues/645
Investigué un poco más y no es tan claro. Aparentemente, incluso hay pruebas en el repositorio que usan 'XOR' y 'NAND' como condiciones: https://github.com/mistic100/jQuery-QueryBuilder/blob/dev/tests/core.module.js . Esto es lo contrario de lo que dice la documentación.