Couchbase Server 7.0 ahora soporta transacciones N1QL.

Intentemos escribir un programa en C que realice un conjunto de transacciones en un único nodo.

Primer paso: Primero decidimos cómo llamar al programa. Las entradas serán la URL del bucket de Couchbase contra el que deseamos ejecutar consultas, y las credenciales (nombre de usuario seguido de la contraseña). 

Uso:

Con las transacciones N1QL, se devuelve un valor txid desde el comando START TRANSACTION. Este es usado con todas las subsecuentes consultas N1QL dentro de la transacción hasta el final COMMIT o ROLLBACK. Así que debemos declarar un ID de transacción en la función principal que podamos pasar a las solicitudes de consulta restantes que forman parte de la transacción. 

Segundo paso: Inicializa un puntero que se utilizará para guardar el ID de transacción de la consulta BEGIN TRANSACTION. Este ID se utilizará en toda la transacción.


Paso 3: Inicializar el clúster 

Una conexión a un cluster de Couchbase Server está representada por un lcb_INSTANCE objeto.

lcb_INSTANCE *instance;

El conjunto de operaciones permitidas depende del tipo de este objeto y de si el cubo está asociado a él. Aquí utilizamos el tipo Cluster. La forma más sencilla de crear un objeto cluster es llamar a lcb_create para crear un manejador Couchbase pasando LCB_TIPO_CLUSTER con una cadena de conexión, un nombre de usuario y una contraseña. A continuación, programamos una conexión utilizando lcb_connect(), y luego comprobamos si el bucket existe. 


Paso 4: Ejecuta las consultas en query.h

Tenemos las consultas correspondientes a nuestra transacción definidas en queries.h. 


Necesitamos utilizar una librería de análisis JSON en C para manejar los resultados de la consulta y extraer el ID de la transacción. Aquí podemos usar la librería json-c. Para obtener el ID de transacción de la sentencia BEGIN WORK (la primera sentencia), utilizamos la función callback txid. Para procesar y ejecutar las otras consultas, llamamos a la función row callback. Esto devolverá las filas de resultados. 


Antes de ejecutar las consultas, establecemos tres parámetros de consulta: pretty, txtimeout (tiempo de espera de la transacción) y el txid que obtuvimos de la primera sentencia. Estos son parámetros a nivel de petición. 

Ahora vamos a profundizar en las funciones callback 

Txid_Callback - 

Aquí tenemos que analizar la respuesta JSON de la ejecución de la sentencia BEGIN WORK para extraer el txid y pasarlo a las sentencias posteriores como parámetro de consulta utilizando la librería JSONC. Para ello utilizamos el puntero creado anteriormente y lo establecemos en el método lcb_respquery_cookie. Esto establece la cookie de la operación - lo que significa que cuando ejecutamos lcb_query, hay un argumento cookie para ello y lcb_respquery_cookie obtiene este puntero en nuestra función callback. (Creamos un puntero en la función principal y lo establecemos en la función callback)


Row callback - Se utiliza para analizar y recuperar las filas de resultados de la ejecución de la consulta. 


Aquí obtenemos la respuesta de la consulta, obtenemos las filas y la imprimimos. 

Usando el ejemplo anterior, ahora podemos usar transacciones N1QL en el SDK de C. Para el código completo ver e instrucciones sobre cómo ejecutarlo ver -. https://github.com/ikandaswamy/CBSDK_N1QLExamples

 

Autor

Publicado por Isha Kandaswamy

Isha Kandaswamy es Ingeniero de Software Senior en Couchbase. Isha es responsable del desarrollo del diseño de las diferentes características y herramientas para el lenguaje de consulta N1QL -SQL para Json. Además, diseña e implementa características y herramientas para el lenguaje de consulta N1QL.

Dejar una respuesta