El blog anterior le ha presentado nuevas características de las funciones definidas por el usuario de JavaScript.

Ahora vamos a explorarlos con más detalle.

Comenzamos con un mecanismo básico para ejecutar sentencias N1QL dentro de código JavaScript.

N1QL en JavaScript

Hay dos formas de ejecutar sentencias N1QL dentro de una función JavaScript: llamando directamente a una función llamada N1QL(), o dejando que el compilador JavaScript detecte las sentencias N1QL incrustadas y produzca las correspondientes llamadas a N1QL().

A continuación se examina cada método.

Ejemplo de requisitos previos

En las secciones siguientes se presentan algunos ejemplos.

Estos son totalmente funcionales pero para ejecutarlos necesitarás:

    • un clúster Couchbase, versión 7.1 o posterior
    • un cubo llamado b1
    • un índice primario en b1
    • para crear cada función en una biblioteca llamada udfblogy
    • para crear la correspondiente UDF N1QL

Puede utilizar la pestaña UDF de la consola web para crear la función y la UDF.

Función N1QL()

En N1QL() toma una declaración en forma de cadena y un segundo parámetro opcional que contiene valores de marcador de posición.

Todo lo que se necesita para ejecutar una sentencia N1QL que no toma parámetros y no devuelve valores es lo siguiente: 

y la correspondiente UDF:

(Olvida por un segundo que la función en sí no devuelve ningún valor. También, disculpas por los fragmentos de código que se muestran como imágenes, WordPress no le gustaba renderizar estos como texto).

Cuando el N1QL() la sentencia pasada en el primer parámetro se analiza, planifica y ejecuta.

Si la sentencia no devuelve ningún valor, en el momento en que la función N1QL regresa, la sentencia ha completado su ejecución: en este caso concreto, suponiendo que el cubo b1 existe y una clave k1 no existe ya, se insertará un nuevo documento.

Si está familiarizado con ESQL/C's o PL/SQL's EJECUTAR INMEDIATAMENTE declaración, el N1QL() es el equivalente de la UDF de JavaScript. 

Cuando se devuelven valores, el valor de retorno de N1QL() es un iterador de JavaScript, que se puede utilizar para recoger valores de uno en uno, como veremos más adelante. 

N1QL dinámico

Por supuesto, el otro uso del N1QL() es construir una sentencia dinámicamente concatenando cadenas, por ejemplo:

Aunque esto es perfectamente legal, probablemente sea mejor no emplear dicha técnica dado el riesgo de inyección N1QL (o más generalmente SQL) que conlleva.

Utilice marcadores de posición en su lugar.

Transpilador JavaScript

La segunda forma de ejecutar N1QL es incrustar la sentencia N1QL en el cuerpo de la función, y dejar que el transpilador (un componente del compilador JavaScript) lo detecte y construya las llamadas N1QL correctas entre bastidores:

Esto es muy conveniente para ejecutar sentencias estáticas inmediatamente, y la función de repente se vuelve mucho más legible.

Marcadores de posición y valores de los marcadores de posición de las sentencias N1QL

La mejor manera de evitar los riesgos asociados con la generación dinámica de N1QL es tener sentencias estáticas usando marcadores de posición con nombre o posicionales, y pasando valores de marcadores de posición en tiempo de ejecución.

Función N1QL()

Al utilizar el N1QL() esto puede hacerse pasando los valores en el segundo argumento opcional como se indica a continuación.

Parámetros de posición

Este caso se cubre pasando un array de valores:

Parámetros con nombre

En este caso, basta con pasar un objeto cuyo nombre de campo coincida con los nombres de los parámetros:

No es posible mezclar parámetros posicionales y con nombre, el N1QL() sólo acepta un array o un objeto.

Tenga en cuenta que los valores pasados a N1QL() no tienen que ser literales, puedes construir arrays y objetos a partir de variables, o puedes pasar una variable array u objeto:

o

Transpiler

Con el transpilador, sólo son posibles los parámetros con nombre - sin embargo, utilizarlos es tan sencillo como utilizar variables ya declaradas:

Por supuesto, es posible utilizar directamente los parámetros de las funciones:

Y la correspondiente UDF N1QL:

Conclusión

Hemos cubierto ejemplos básicos sobre cómo utilizar N1QL dentro de funciones javascript, tanto utilizando la función N1QL() e incrustar la sentencia N1QL directamente en JavaScript, y mostrar cómo utilizar parámetros con nombre y posicionales.

La próxima entrada del blog cubrirá las sentencias iteradoras y de manipulación de datos.

 

Autor

Publicado por Marco Greco, Arquitecto de software, Couchbase

En su vida anterior, Marco fue director de tecnología, radiofísico, arquitecto de software, administrador de sistemas, administrador de bases de datos, formador y manitas en general en la mayor clínica de radioterapia de Italia. Tras cambiar de carrera y de país, pasó más de dos décadas en varios puestos de soporte y desarrollo en Informix primero e IBM después, antes de finalmente dar el paso y unirse a Couchbase, para ayudarles a convertir N1QL en oro. Es titular de varias patentes y autor de sus propios proyectos de código abierto.

Dejar una respuesta