[Tarantool-patches] [PATCH v2 5/6] alter: disallow creation of SQL built-in function

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Fri Aug 6 01:18:22 MSK 2021


Thanks for the patch!

> diff --git a/src/box/alter.cc b/src/box/alter.cc
> index 217b882ba..fd9921ae0 100644
> --- a/src/box/alter.cc
> +++ b/src/box/alter.cc
> @@ -3213,6 +3213,36 @@ on_replace_dd_user(struct trigger * /* trigger */, void *event)
>  	return 0;
>  }
>  
> +/**
> + * Check if the version of the data dictionary is lower than 2.9.0 and return
> + * new func def if it is the case. If it is the case, then it is possible to
> + * insert values with the "SQL_BUILTIN" language into _func, otherwise it is
> + * prohibited. This is for upgradeability from 2.1.3 to 2.3.0. Since all we need
> + * is to allow such inserts, we set func def to its default values.
> + */
> +static int
> +func_def_new_sql_built_in(struct func_def *def)

1. 'new' stands for new memory allocation. Here you need to use
'create'.

> +{
> +	if (dd_version_id >= version_id(2, 9, 0)) {
> +		diag_set(ClientError, ER_FUNCTION_LANGUAGE, "SQL_BUILTIN",
> +			 def->name);
> +		return -1;
> +	}
> +	def->body = NULL;
> +	def->comment = NULL;
> +	def->setuid = 1;
> +	def->is_deterministic = false;
> +	def->is_sandboxed = false;
> +	def->param_count = 0;
> +	def->returns = FIELD_TYPE_ANY;
> +	def->aggregate = FUNC_AGGREGATE_NONE;
> +	def->language = FUNC_LANGUAGE_LUA;
> +	def->exports.lua = true;
> +	def->exports.sql = true;
> +	func_opts_create(&def->opts);
> +	return 0;
> +}
> +
>  /**
>   * Get function identifiers from a tuple.
>   *
> @@ -3344,6 +3374,14 @@ func_def_new_from_tuple(struct tuple *tuple)
>  				  language, def->name);
>  			return NULL;
>  		}
> +		if (def->language == FUNC_LANGUAGE_SQL_BUILTIN) {

2. Is it possible to just skip such functions when the schema is old?
Simply not create anything for them assuming that they will be deleted
right afterwards. Not even store them in the func hash. Like they do
not exist. Then you can also drop sql_builtin support from
func_def_check().


More information about the Tarantool-patches mailing list