Skip to content
Snippets Groups Projects
  1. Dec 11, 2024
    • Georgy Moshkin's avatar
      box: fully temporary spaces · 910d2bb0
      Georgy Moshkin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Introduce fully temporary spaces: same as data-temporary space but with
      temporary metadata. Basically temporary spaces now do not exist on
      restart and do not exist on replicas. They can also be created, altered
      and deleted when box.cfg.read_only = true.
      
      To avoid conflicts with spaces created on replicas, the temporary
      space ids by default start in a special range starting at
      BOX_SPACE_ID_TEMPORARY_MIN.
      
      Temporary spaces currently do not support several features e.g.
      foreign key references (to and from), functional indexes, sql sequences,
      sql triggers, etc. This may change in the future.
      
      Implementing temporary spaces requires temporary tuples to be
      inserted into system spaces: tuples which are neither replicated or
      persisted. This mostly done in on_replace_dd_* triggers by dropping the
      txn->stmt->row.
      
      Closes #8323
      
      @TarantoolBot document
      Title: Introduce fully temporary spaces with temporary metadata
      
      Temporary spaces are now data-temporary spaces with temporary metadata.
      Created by specifying { type = "temporary" } in the options.
      Temporary spaces will not exist upon server restart and will not
      exist on replicas. They can also be created in read-only mode.
      910d2bb0
    • Georgy Moshkin's avatar
      box: factor out new_tuple def construction · d0ca64a2
      Georgy Moshkin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      A tiny preparatory commit for meta-temporary spaces
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      d0ca64a2
    • Georgy Moshkin's avatar
      box: extract txn_update_row_counts function · bd96ecee
      Georgy Moshkin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Move code that handles txn row counters into a separate function in
      preparation of meta-temporary spaces introduction.
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      bd96ecee
    • Georgy Moshkin's avatar
      core: rename temporary spaces to data-temporary · c11e7a10
      Georgy Moshkin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Everywhere where we refer to temporary spaces we now say data-temporary.
      This is because temporary spaces were never truly temporary because
      their definitions would still be persisted and replicated and they
      couldn't be created on read-only replicas. In a following commit we will
      introduce a new fully temporary type of spaces, which will be just
      called 'temporary', so this commit signifies this terminology change.
      
      NO_DOC=renaming
      NO_CHANGELOG=renaming
      NO_TEST=renaming
      c11e7a10
    • Georgy Moshkin's avatar
      box: introduce space type · bbd533ef
      Georgy Moshkin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Introduces a new field `type` to the space definition. Currently it can
      only be "normal" or "data-temporary". It is backwards compatible with
      temporary=true.
      
      @TarantoolBot document
      Title: Introduce space field type
      
      A new space definition field "type" can now be used to specify the type
      of the space. Usage: box.schema.create_space("s", { type = "normal" }).
      Currently only 2 types are supported: "normal" & "data-temporary", which
      is equivalent to { temporary = true }. Old-style { temporary = true } is
      still supported, but only one option either 'temporary' or 'type' may be
      specified at the same time.
      
      Space type "temporary" will be introduced in a later commit.
      In the future options "local", "synchronous", etc. may also be
      supported.
      
      NO_TEST=will be tested in the following commit
      bbd533ef
    • Aleksandr Lyapunov's avatar
      sql: refactor update_view_references a bit · f6c88e6b
      Aleksandr Lyapunov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      The function update_view_references is called when an SQL view
      is created or dropped. The goal of this function is to modify
      (increment or decrement) view_ref_count member of spaces that
      the view references.
      
      There were a several issues that deserves to be refactored:
      * By design in case of error it left the job partially done, so
        some space references were modified while some other - not.
        Although there was no bug since special steps were made in case
        of error, this pattern is inconvenient and should be avoided.
      * In case of error the failing space name was returned via special
        argument which is not flexible and even requires allocation.
      * Another argument - suppress_error - has actually never
        suppressed any error because the only case when an error could
        occur is creation of a view, which used suppress_error = false.
      * Fail of that function was not actually covered with tests.
      
      So this commit:
      * Makes the function to do all or nothing.
      * Forces the function to set diag by itself in case of error.
      * Removes suppress_error argument while adding several asserts.\
      * Adds a small test that fulfills coverage.
      
      NO_DOC=refactoring
      NO_CHANGELOG=reafactoring
      f6c88e6b
    • Aleksandr Lyapunov's avatar
      sql: don't store the first NULL element in list · e173f491
      Aleksandr Lyapunov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      By design a newly created SrcList object contains one element
      with NULL name. That was confusing and led to strange NULL checks
      in a list that could not contain NULL names.
      
      Fix it by clearing the list before usage.
      
      NO_DOC=refactoring
      NO_CHANGELOG=reafactoring
      NO_TEST=refactoring
      e173f491
    • Aleksandr Lyapunov's avatar
      sql: don't catch OOM in sql_select_expand_from_tables · 65ab1d1b
      Aleksandr Lyapunov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Since we panic on OOM now, no OOM error handling is needed now.
      Fix both internals of the function and how it is used in alter.
      
      NO_DOC=refactoring
      NO_CHANGELOG=reafactoring
      NO_TEST=refactoring
      65ab1d1b
    • Ilya Verbin's avatar
      box: support default field values in the space format · b2f58221
      Ilya Verbin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Now a field can be assigned a default value in the space format. When a new
      tuple is inserted into a space, and some of the fields contain null values,
      those fields will be filled with their respective default values.
      
      Closes #8157
      
      @TarantoolBot document
      Title: Document default field values
      Product: Tarantool
      Since: 3.0
      Root document: https://www.tarantool.io/en/doc/latest/reference/reference_lua/box_space/format/
      
      The format clause contains, for each field, a definition within braces:
      `{name='...',type='...'[,is_nullable=...][,default=...]}`, where:
      
      * the optional `default` value contains a default value for the field.
        Its type must be compatible with the field type. If default value is set,
        it is applied regardless of whether `is_nullable` is true or false.
      
      Example:
      
      ```lua
      tarantool> box.space.tester:format{
               > {name = 'id', type = 'unsigned'},
               > {name = 'name', type = 'string', default = 'Noname'},
               > {name = 'pass', type = 'string'},
               > {name = 'shell', type = 'string', default = '/bin/sh'}}
      ---
      ...
      
      tarantool> box.space.tester:insert{1000, nil, 'qwerty'}
      ---
      - [1000, 'Noname', 'qwerty', '/bin/sh']
      ...
      ```
      b2f58221
    • Ilya Verbin's avatar
      box: introduce tuple_builder class · a9a20579
      Ilya Verbin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      It encapsulates the logic that helps to build a new MsgPack array by
      concatenating tuple fields from various locations. The idea is to
      postpone memory allocation and copying until the finalization.
      
      Needed for #8157
      
      NO_DOC=internal
      NO_CHANGELOG=internal
      a9a20579
    • Ilya Verbin's avatar
      sql: rename field_def::default_value to field_def::sql_default_value · 2cf79575
      Ilya Verbin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      In order to avoid collision with the upcoming core default_value.
      
      Also rename tuple_field::default_value_expr to
      tuple_field::sql_default_value_expr.
      
      Part of #8157
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      2cf79575
    • Maksim Kaitmazian's avatar
      build: add exports for simple query flow · 3c989fc4
      Maksim Kaitmazian authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      PG protocol run queries by calling dispatch_query, which stores the
      response in port_c contained in box_function_ctx structure.
      
      NO_DOC=exports
      NO_CHANGELOG=exports
      NO_TEST=exports
      3c989fc4
    • Dmitry Ivanov's avatar
      fix: buffer overflow in auth_md5's bytes_to_hex() · 81959875
      Dmitry Ivanov authored
      NO_DOC=internal
      NO_CHANGELOG=internal
      NO_TEST=internal
      81959875
    • Denis Smirnov's avatar
      fix: wrong argument type in box_auth_data_prepare() · e89b633d
      Denis Smirnov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      box_auth_data_prepare() method declared to return a tuple while in
      reality it returned a region allocated message pack string. Fixed.
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      e89b633d
    • Denis Smirnov's avatar
      feat: extend C box API with a new auth method · 70dc777d
      Denis Smirnov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      1. Current commit introduces 'box_auth_data_prepare()' to prepare
         a data string for any supported authentication methods.
      2. The user name argument is refactored in the auth methods: the
         null-terminated string is replaced with an address range approach.
         Now Rust users don't need to re-allocate username with CString.
      3. Password length type was set to uint32_t (previously it was size_t,
         int, uint32_t for different functions). Tarantool uses murmur3a,
         so all the hashed strings should be up to 32 bit long.
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      70dc777d
    • Denis Smirnov's avatar
      feat: extend C box API with new user methods · b201f939
      Denis Smirnov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Introduce new methods:
      
      1. box_user_id_by_name - get the user identifier by name;
      2. box_effective_user_id - get current effective user
         identifier;
      3. box_session_user_id - get current session user identifier;
      4. box_session_su - change current session user;
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      b201f939
    • Maksim Kaitmazian's avatar
      feat: implement user_auth_method_name · 11fdb31a
      Maksim Kaitmazian authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      This function is used to determine the authentication method when
      authenticating a postgres client.
      
      part of picodata/picodata/sbroad!292
      
      NO_DOC=exports
      NO_CHANGELOG=exports
      NO_TEST=exports
      11fdb31a
    • Maksim Kaitmazian's avatar
      build: add exports for PG authentication · d1756ff5
      Maksim Kaitmazian authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      These exports allow us to perform user authentication and
      network communication.
      
      part of picodata/picodata/sbroad!292
      
      NO_DOC=exports
      NO_CHANGELOG=exports
      NO_TEST=exports
      d1756ff5
    • Dmitry Ivanov's avatar
      fix: Take `auth_type` into account in `console.connect` · 71817166
      Dmitry Ivanov authored
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      71817166
    • Dmitry Ivanov's avatar
      feat: Add `auth_type` to box.schema.user.create() · cefa7109
      Dmitry Ivanov authored
      Now it's possible to specify the desired authentication method during
      user creation via `auth_type`, e.g.
      
      ```lua
      box.schema.user.create('mickey', { auth_type = 'chap-sha1',
                                         password = 'foobar' })
      ```
      
      Furthermore, authentication methods may now specify that they don't
      require password to create stored authentication info. This is used
      in LDAP authentication (`auth_type = 'ldap'`):
      
      ```lua
      box.schema.user.create('mickey', { auth_type = 'ldap' })
      ```
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      cefa7109
    • Dmitry Ivanov's avatar
      fix: Establish LDAP connections implicitly · 2d270bcf
      Dmitry Ivanov authored
      Unfortunately, Centos 7 provides only openssl 1.0.2 (at lest if we
      disregard epel), so we can't build the bundled libldap & libsasl2.
      "Okay", one might think, "we can link against the distro's libs".
      Well, turns out libldap 2.4, which is what we have to deal with in
      that case, doesn't have ldap_connect!
      
      Luckily, we don't have to connect explicitly. According to man pages:
      
      ```
      ldap_init() acts just like ldap_open(), but does not open a connection
      to the LDAP server.  The actual connection open will occur when the
      first operation is attempted.
      
      ldap_initialize()  acts  like ldap_init()...
      ```
      
      This is still true for libldap up to and including version 2.6.
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      2d270bcf
    • Dmitry Ivanov's avatar
      feat: Implement LDAP authentication · 1fcdd15f
      Dmitry Ivanov authored
      This authentication method doesn't store any secrets; instead,
      we delegate the whole auth to a pre-configured LDAP server. In
      the method's implementation, we connect to the LDAP server and
      perform a BIND operation which checks user's credentials.
      
      Usage example:
      
      ```lua
      -- Set the default auth method to LDAP and create a new user.
      -- NOTE that we still have to provide a dummy password; otherwise
      -- box.schema.user.create will setup an empty auth data.
      box.cfg({auth_type = 'ldap'})
      box.schema.user.create('demo', { password = '' })
      
      -- Configure LDAP server connection URL and DN format string.
      os = require('os')
      os.setenv('TT_LDAP_URL', 'ldap://localhost:1389')
      os.setenv('TT_LDAP_DN_FMT', 'cn=$USER,ou=users,dc=example,dc=org')
      
      -- Authenticate using the LDAP authentication method via net.box.
      conn = require('net.box').connect(uri, {
          user = 'demo',
          password = 'password',
          auth_type = 'ldap',
      })
      ```
      
      NO_DOC=internal
      NO_TEST=internal
      NO_CHANGELOG=internal
      1fcdd15f
    • Dmitry Ivanov's avatar
      feat: Pass user to auth_method::authenticator_check_request · 9f871c65
      Dmitry Ivanov authored
      This is required for LDAP authentication, because we need
      username to format the corresponding DN.
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      9f871c65
    • Maksim Kaitmazian's avatar
      fix: box.schema.user.passwd doesn't change the password · bfd298d8
      Maksim Kaitmazian authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      box.schema.user.passwd doesn't change the password for the current
      user because new password is passed instead of the user name.
      
      NO_CHANGELOG=fix an unreleased bug
      NO_DOC=fix an unreleased bug
      bfd298d8
    • Maksim Kaitmazian's avatar
      fix: allow empty password and username in md5 · 21f065b2
      Maksim Kaitmazian authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      It fixes the following assertion
      ```bash
      tarantool: ./src/lib/core/crypt.c:84: md5_encrypt:
      Assertion `password_len + salt_len > 0' failed.
      ```
      caused by the following code
      ```lua
      box.cfg{auth_type='md5'}
      box.schema.user.password("")
      ```
      
      NO_CHANGELOG=fix an unreleased feature
      NO_DOC=fix an unreleased feature
      21f065b2
    • Maksim Kaitmazian's avatar
      feat: make user name argument optional · 160dee2d
      Maksim Kaitmazian authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      part of picodata/tarantool#21
      
      NO_CHANGELOG=refactoring
      NO_DOC=refactoring
      160dee2d
    • Maksim Kaitmazian's avatar
      feat: implement md5 authentication · 2e10bef3
      Maksim Kaitmazian authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      It prevents password sniffing and avoids storing passwords on the
      server in plain text but provides no protection if an attacker
      manages to steal the password hash from the server.
      
      Usage example:
      ```lua
      -- Enable the md5 authentication method for all new users.
      box.cfg({auth_type = 'md5'})
      
      -- Reset existing user passwords to use the md5 authentication method.
      box.schema.user.passwd('alice', 'topsecret')
      
      -- Authenticate using the md5 authentication method via net.box.
      conn = require('net.box').connect(uri, {
          user = 'alice',
          password = 'topsecret',
          -- Specifying the authentication method isn't strictly necessary:
          -- by default the client will use the method set in the remote
      	-- server config (box.cfg.auth_type)
          auth_type = 'md5',
      })
      ```
      
      part of picodata/picodata/sbroad!377
      
      @TarantoolBot document
      Title: md5 authentication method
      
      See the commit message.
      2e10bef3
    • Maksim Kaitmazian's avatar
      feat: add user name argument to `auth_method` api · ef4f31ef
      Maksim Kaitmazian authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      User name is usually used as a salt for user password in order to
      avoid password repeating.
      For instance, postgres md5 authentication stores passwords as
      md5("password", "user"), so that the same passwords are represented by
      different hashes.
      
      part of picodata/picodata/sbroad!377
      
      @TarantoolBot document
      Title: Document updated `box.schema.user.password` declaration.
      
      Since auth methods can use user name for hashing, user name is
      added to argument list of `box.schema.user.password`.
      
      NO_TEST=there are no methods that use user name
      ef4f31ef
    • Georgy Moshkin's avatar
      fiber: introduce fiber_set_name_n function · 0ba5b9cb
      Georgy Moshkin authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      0ba5b9cb
    • Arseniy Volynets's avatar
      fix: compile errors for centos/altlinux · 047ec4f1
      Arseniy Volynets authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Previous commit caused CI `pack` job
      to fail on some linux distros. This
      commit fixes the warnings from compiler.
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      047ec4f1
    • Arseniy Volynets's avatar
      feat: add limit for max executed vdbe opcodes · a51dd994
      Arseniy Volynets authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      - Add a configurable non-negative
      session parameter "sql_vdbe_max_steps"
      -- max number of opcodes that Vdbe
      is allowed to execute for sql query.
      
      - Default value can be specified in box.cfg.
      If not set via box.cfg, default value
      is 45000. Value 0 means that no
      checks for number of executed Vdbe
      opcodes will be made.
      
      - Add the third argument to box.execute
      function, that allows to specify options
      for query execution. The only option
      supported: sql_vdbe_max_steps. Usage
      example:
      
      ```
      box.execute([[select * from t]], {}, {{sql_vdbe_max_steps = 1000}})
      ```
      
      part of picodata/picodata/sbroad!461
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      a51dd994
    • Denis Smirnov's avatar
      feat: expose tuple hash calculation method · aeb4e83d
      Denis Smirnov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Picodata supports cluster-wide SQL and needs some predictable
      method to calculate tuple hashes for the bucket ids. Method
      should be available for Lua, C and Rust users. It was decided
      to expose a murmur3 hash calculation method of the key_def module.
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      
      fix: tuple hash calculation tests
      
      Tuple hash calculation tests for the C API were incorrect. Thanks
      to the full pipeline with DEBUG build we detected the problem and
      fixed it.
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      aeb4e83d
    • godzie44's avatar
      cbus: introduce lcpipe - light cpipe · fb00c8ca
      godzie44 authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Introduced a new type of cbus pipe - lcpipe. The current pipe in the
      cbus - cpipe, has a number of limitations, first of all - the cpipe
      cannot be used from the 3rd party threads, cpipe only works as a channel
      between two cords. That why lcpipe is needed. Its main responsibility -
      create channel between any thread and tarantool cord.
      
      Internally lcpipe is a cpipe, but:
      - on flush triggers removed, cause triggers use thread-local mem-pool,
      this is not possible on a third party thread
      - producer event loop removed, cause there is no libev event loop in
      third party thread
      
      Also, lcpipe interface is exported to the outside world.
      
      fix: use-after-free in `cbus_endpoint_delete`
      
      Calling a `TRASH` macro after calling the `free`
      function dereferences the pointer to the already
      freed memory.
      
      NO_DOC=picodata internal patch
      NO_CHANGELOG=picodata internal patch
      NO_TEST=picodata internal patch
      fb00c8ca
    • Дмитрий Кольцов's avatar
      fix(schema version): fix some types that were not updated to 64 bit · cab9848f
      Дмитрий Кольцов authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      NO_DOC=core feature
      NO_TEST=no Lua API
      NO_CHANGELOG=bugfix
      cab9848f
    • Дмитрий Кольцов's avatar
      feat(json): add option to encode decimals as string · c39f1fee
      Дмитрий Кольцов authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Due to inconsistency of Tarantool type casting while using strict
      data types as "double" or "unsigned" it is needed
      to use "number" data type in a whole bunch of cases.
      However "number" may contain "decimal" that will be serialized into
      string by JSON builtin module.
      
      This commit adds "encode_decimal_as_number" parameter to json.cfg{}.
      That forces to encode `decimal` as JSON number to force type
      consistency in JSON output.
      Use with catious - most of JSON parsers assume that number is restricted
      to float64.
      
      NO_DOC=we do not host doc
      c39f1fee
    • Denis Smirnov's avatar
      sql: recompile expired prepared statements · 5f6a5c3c
      Denis Smirnov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Actually there is no reason to throw an error and make a user
      manually recreate prepared statement when it expires. A much more
      user friendly way is to recreate it under hood when statement's
      schema version differs from the box one.
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      5f6a5c3c
    • Denis Smirnov's avatar
      fix: default result parameter type · 170e7d91
      Denis Smirnov authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      Problem description.
      
      When we prepare a statement with parameters in the result columns
      (for example box.prepare('select ?')) Tarantool has no information
      about the type of the output column and set it to default boolean.
      Then, on the execution phase, the type would be recalculated during
      the parameter binding.
      
      Tarantool expects that there is no way for parameter to appear in the
      result tuple other than exactly be mentioned in the final projection.
      But it is incorrect - we can easily propagate parameter from the inner
      part of the join. For example
      
      box.prepare([[select COLUMN_1 from t1 join (values (?)) as t2 on true]])
      
      In this case column COLUMN_1 in the final projection is not a
      parameter, but a "reference" to it and its type depends on the
      parameter from the inner part of the join. But as Tarantool
      recalculates only binded parameters in the result projection,
      it doesn't change the default boolean metadata type of the COLUMN_1
      and the query fails on comparison with the actual type of the tuple.
      
      Solution.
      As we don't want to patch Vdbe to make COLUMN_1 refer inner parameter,
      it was decided to make a simple workaround: change the default
      column type from BOOLEAN to ANY for parameters. It fixes the
      comparison with the actual tuple type (we do not fail), but in some
      cases get ANY column in the results where we would like to have
      explicitly defined type. Also NULL parameters would also have ANY
      type, though Tarantool prefers to have BOOLEAN in this case.
      
      Closes https://github.com/tarantool/tarantool/issues/7283
      
      NO_DOC=bug fix
      170e7d91
    • godzie44's avatar
      sql: add sql_execute_prepared_ext function · d406e749
      godzie44 authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      It's similar to sql_execute_prepared, but doesn't have the `region` parameter.
      
      NO_DOC=minor
      NO_TEST=minor
      d406e749
    • Дмитрий Кольцов's avatar
      cmake: disable feedback daemon by default · 32fa3a59
      Дмитрий Кольцов authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      NO_DOC=disable feedback
      NO_TEST=disable feedback
      32fa3a59
    • godzie44's avatar
      feat: compatibility with tarantool-module · 5f9a3200
      godzie44 authored and Dmitry Ivanov's avatar Dmitry Ivanov committed
      - add box_tuple_data_offset function
        (return offset of the msgpack encoded data from the beginning of the tuple)
      - add more export functions
      
      NO_DOC=build
      NO_TEST=build
      5f9a3200
Loading