[PATCH v2 3/4] sql: use space_by_name in SQL

Vladimir Davydov vdavydov.dev at gmail.com
Sat Oct 27 00:00:59 MSK 2018


On Thu, Oct 25, 2018 at 11:17:11AM +0300, Kirill Yukhin wrote:
> diff --git a/src/box/sql/alter.c b/src/box/sql/alter.c
> index 3d72e31..7c28437 100644
> --- a/src/box/sql/alter.c
> +++ b/src/box/sql/alter.c
> @@ -47,18 +47,17 @@ sql_alter_table_rename(struct Parse *parse, struct SrcList *src_tab,
>  	if (new_name == NULL)
>  		goto exit_rename_table;
>  	/* Check that new name isn't occupied by another table. */
> -	uint32_t space_id = box_space_id_by_name(new_name, strlen(new_name));
> -	if (space_id != BOX_ID_NIL) {
> +	struct space *space = space_by_name(new_name);
> +	if (space != NULL) {
>  		diag_set(ClientError, ER_SPACE_EXISTS, new_name);
>  		goto tnt_error;
>  	}
>  	const char *tbl_name = src_tab->a[0].zName;
> -	space_id = box_space_id_by_name(tbl_name, strlen(tbl_name));
> -	if (space_id == BOX_ID_NIL) {
> +	space = space_by_name(tbl_name);
> +	if (space == NULL) {
>  		diag_set(ClientError, ER_NO_SUCH_SPACE, tbl_name);
>  		goto tnt_error;
>  	}
> -	struct space *space = space_by_id(space_id);
>  	assert(space != NULL);

Pointless assertion.

>  	if (space->def->opts.is_view) {
>  		diag_set(ClientError, ER_ALTER_SPACE, tbl_name,
> diff --git a/src/box/sql/analyze.c b/src/box/sql/analyze.c
> index 674d53d..ad068a54 100644
> --- a/src/box/sql/analyze.c
> +++ b/src/box/sql/analyze.c
> @@ -1114,16 +1114,15 @@ sqlite3Analyze(Parse * pParse, Token * pName)
>  		/* Form 2:  Analyze table named */
>  		char *z = sqlite3NameFromToken(db, pName);
>  		if (z != NULL) {
> -			uint32_t space_id = box_space_id_by_name(z, strlen(z));
> -			if (space_id != BOX_ID_NIL) {
> -				struct space *sp = space_by_id(space_id);
> -				assert(sp != NULL);
> -				if (sp->def->opts.is_view) {
> +			struct space *space = space_by_name(z);
> +			if (space != NULL) {
> +				assert(space != NULL);

Another one.

> +				if (space->def->opts.is_view) {
>  					sqlite3ErrorMsg(pParse, "VIEW isn't "\
>  							"allowed to be "\
>  							"analyzed");
>  				} else {
> -					vdbe_emit_analyze_table(pParse, sp);
> +					vdbe_emit_analyze_table(pParse, space);
>  				}
>  			} else {
>  				diag_set(ClientError, ER_NO_SUCH_SPACE, z);
> diff --git a/src/box/sql/delete.c b/src/box/sql/delete.c
> index 8f6c76f..72e0575 100644
> --- a/src/box/sql/delete.c
> +++ b/src/box/sql/delete.c
> @@ -36,15 +36,14 @@
>  #include "tarantoolInt.h"
>  
>  struct Table *
> -sql_lookup_table(struct Parse *parse, struct SrcList_item *tbl_name)
> +sql_lookup_table(struct Parse *parse, struct SrcList_item *src_name)
>  {
> -	assert(tbl_name != NULL);
> -	assert(tbl_name->pTab == NULL);
> -	uint32_t space_id = box_space_id_by_name(tbl_name->zName,
> -						 strlen(tbl_name->zName));
> -	struct space *space = space_by_id(space_id);
> -	if (space_id == BOX_ID_NIL || space == NULL) {
> -		sqlite3ErrorMsg(parse, "no such table: %s", tbl_name->zName);
> +	assert(src_name != NULL);
> +	assert(src_name->pTab == NULL);
> +	const char *name = src_name->zName;
> +	struct space *space = space_by_name(name);
> +	if (space == NULL) {
> +		sqlite3ErrorMsg(parse, "no such table: %s", name);

I hate it when one tries to squeeze some unrelated "cleanup", like
this variable renaming, in a patch that doesn't really need it.
This complicates review and clutters the history. I reverted this
part, removed useless assertions, and pushed the patch to 2.1.

>  		return NULL;
>  	}
>  	assert(space != NULL);



More information about the Tarantool-patches mailing list