[Tarantool-patches] [PATCH v2 2/4] sql: allow to bind uuid values
Timur Safin
tsafin at tarantool.org
Mon Jul 19 12:16:41 MSK 2021
LGTM, and one minor comment we need to address eventually.
: From: imeevma at tarantool.org <imeevma at tarantool.org>
: Subject: [PATCH v2 2/4] sql: allow to bind uuid values
:
: After this patch, uuid values can be bound like any other supported by
: SQL values.
:
: Part of #6164
: ---
: diff --git a/src/box/sql/sqlInt.h b/src/box/sql/sqlInt.h
: index ef8dcd693..115c52f96 100644
: --- a/src/box/sql/sqlInt.h
: +++ b/src/box/sql/sqlInt.h
: @@ -326,6 +326,8 @@ struct sql_vfs {
: #define SQL_LIMIT_LIKE_PATTERN_LENGTH 8
: #define SQL_LIMIT_TRIGGER_DEPTH 9
:
: +struct tt_uuid;
: +
: enum sql_ret_code {
: /** sql_step() has another row ready. */
: SQL_ROW = 1,
: @@ -634,6 +636,9 @@ int
: sql_bind_zeroblob64(sql_stmt *, int,
: sql_uint64);
:
: +int
: +sql_bind_uuid(struct sql_stmt *stmt, int i, const struct tt_uuid *uuid);
: +
As interface header I'd expect that every function put to sqlInt.h would be
properly documented, and wanted to complain that `sql_bind_uuid()` is not
accompanied with doxygen block ... but then discovered that majority of
`sql_bind_*` functions (with exception of `sql_bind_boolean()`) were not
documented at all, and actually this terse introduction looks more consistent
than if it would be documented :(
So, it looks like it's ok for today, but eventually we should return here and
make sure it's reasonably documented/commented out.
: /**
: * Return the number of wildcards that should be bound to.
: */
: diff --git a/src/box/sql/vdbeapi.c b/src/box/sql/vdbeapi.c
: index aaae12e41..8031ee0dc 100644
: --- a/src/box/sql/vdbeapi.c
: +++ b/src/box/sql/vdbeapi.c
: @@ -840,6 +840,16 @@ sql_bind_zeroblob64(sql_stmt * pStmt, int i, sql_uint64
: n)
: return sql_bind_zeroblob(pStmt, i, n);
: }
:
: +int
: +sql_bind_uuid(struct sql_stmt *stmt, int i, const struct tt_uuid *uuid)
: +{
: + struct Vdbe *p = (struct Vdbe *)stmt;
: + if (vdbeUnbind(p, i) != 0 || sql_bind_type(p, i, "uuid") != 0)
: + return -1;
: + mem_set_uuid(&p->aVar[i - 1], uuid);
: + return 0;
: +}
: +
: int
: sql_bind_parameter_count(const struct sql_stmt *stmt)
: {
: diff --git a/test/sql-tap/gh-6164-uuid-follow-ups.test.lua b/test/sql-
: tap/gh-6164-uuid-follow-ups.test.lua
: index a8f662f77..4fc5052d8 100755
: --- a/test/sql-tap/gh-6164-uuid-follow-ups.test.lua
: +++ b/test/sql-tap/gh-6164-uuid-follow-ups.test.lua
: @@ -1,6 +1,6 @@
: #!/usr/bin/env tarantool
: local test = require("sqltester")
: -test:plan(1)
: +test:plan(4)
:
: -- Make sure that function quote() can work with uuid.
: test:do_execsql_test(
: @@ -11,4 +11,28 @@ test:do_execsql_test(
: '11111111-1111-1111-1111-111111111111'
: })
:
: +-- Make sure that uuid value can be binded.
: +local uuid1 = require('uuid').fromstr('11111111-1111-1111-1111-
: 111111111111')
: +local uuid2 = require('uuid').fromstr('11111111-2222-1111-1111-
: 111111111111')
: +local uuid3 = require('uuid').fromstr('11111111-1111-3333-1111-
: 111111111111')
: +test:do_test(
: + "gh-6164-2",
: + function()
: + return box.execute([[SELECT ?;]], {uuid1}).rows[1][1]
: + end,
: + uuid1)
: +test:do_test(
: + "gh-6164-3",
: + function()
: + return box.execute([[SELECT $2;]], {123, uuid2}).rows[1][1]
: + end,
: + uuid2)
: +
: +test:do_test(
: + "gh-6164-4",
: + function()
: + return box.execute([[SELECT :two;]], {{[":two"] =
: uuid3}}).rows[1][1]
: + end,
: + uuid3)
: +
: test:finish_test()
: --
: 2.25.1
Regards,Timur
More information about the Tarantool-patches
mailing list