Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sql: parser should only parse (PRAGMA, SET) #4621

Open
Gerold103 opened this issue Nov 11, 2019 · 2 comments
Open

sql: parser should only parse (PRAGMA, SET) #4621

Gerold103 opened this issue Nov 11, 2019 · 2 comments
Labels
bug Something isn't working sql

Comments

@Gerold103
Copy link
Collaborator

PRAGMA and SET work during compile time. The only thing made by VDBE is metadata. It should not be so. Parser should never change DBMS state. PRAGMA and SET should work at runtime.

@Gerold103 Gerold103 added bug Something isn't working sql labels Nov 11, 2019
ImeevMA added a commit that referenced this issue Nov 15, 2019
This patch creates an SQL SET statement. This statement replaces
pragmas that can modify SQL settings. List of pragmas that will
have the corresponding option in SET:
'defer_foreign_keys'
'full_column_names'
'recursive_triggers'
'reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

'parser_trace'
'select_trace'
'sql_trace'
'vdbe_addoptrace'
'vdbe_debug'
'vdbe_eqp'
'vdbe_listing'
'vdbe_trace'
'where_trace'

All these pragmas along with the pragmas 'short_column_names' and
'count_changes' will be removed in the next patch.

Part of #4511
Closes #4621

@TarantoolBot document
Title: SQL SET statement
SQL SET statement is used to change SQL settings. To change the
value of an SQL parameter, use the following syntax:

SET <name of the setting> = <value of the setting>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in the debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

All of these setting with exception of 'sql_compound_select_limit'
are session-local settings. Their value can be viewed in
_vsession_settings sysview.

Example of usage:
SET sql_full_column_names = true;
SET sql_compound_select_limit = 10;
SET sql_default_engine = 'memtx';
ImeevMA added a commit that referenced this issue Nov 21, 2019
This patch creates an SQL SET statement. This statement replaces
pragmas that can modify SQL settings. List of pragmas that will
have the corresponding option in SET:
'defer_foreign_keys'
'full_column_names'
'recursive_triggers'
'reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

'parser_trace'
'select_trace'
'sql_trace'
'vdbe_addoptrace'
'vdbe_debug'
'vdbe_eqp'
'vdbe_listing'
'vdbe_trace'
'where_trace'

All these pragmas along with the pragmas 'short_column_names' and
'count_changes' will be removed in the next patch.

Part of #4511
Closes #4621

@TarantoolBot document
Title: SQL SET statement
SQL SET statement is used to change SQL settings. To change the
value of an SQL parameter, use the following syntax:

SET <name of the setting> = <value of the setting>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in the debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

All of these setting with exception of 'sql_compound_select_limit'
are session-local settings. Their value can be viewed in
_vsession_settings sysview.

Example of usage:
SET sql_full_column_names = true;
SET sql_compound_select_limit = 10;
SET sql_default_engine = 'memtx';
ImeevMA added a commit that referenced this issue Nov 23, 2019
This patch replaces the control pragmas with SET. List of replaced
control pragmas and their SET settings:
	Control pragmas			SET parameters
defer_foreign_keys		sql_defer_foreign_keys
full_column_names		sql_full_column_names
recursive_triggers		sql_recursive_triggers
reverse_unordered_selects	sql_reverse_unordered_selects
sql_compound_select_limit	sql_compound_select_limit
sql_default_engine		sql_default_engine

Also, in debug build, these control pragmas are replaced by SET
settings:
	Control pragmas			SET parameters
parser_trace		sql_parser_trace
select_trace		sql_select_trace
sql_trace			sql_trace
vdbe_addoptrace		sql_vdbe_addoptrace
vdbe_debug			sql_vdbe_debug
vdbe_eqp			sql_vdbe_eqp
vdbe_listing		sql_vdbe_listing
vdbe_trace			sql_vdbe_trace
where_trace			sql_where_trace

Difference between SET and control pragma:
1) SET have more definite syntax:
SET <setting name> = <setting value>
In PRAGMA, we could set the settings using these methods:
PRAGMA <setting name> = <setting value>
PRAGMA <setting name>(<setting value>)

2) SET allows only a specific type of value for each setting. In
PRAGMA, we could use almost everything to set up any setting.
Although the rules by which the settings were set in PRAGMA were
pretty easy to understand.

3) SET cannot display setting values. PRAGMA showed the setting
values using the syntax "PRAGMA <setting name>;". With SET, we
must use other means to get the current setting values. For
session settings, we could use the sysview "_vsession_settings"
to get these values. It is worth noting that all current SQL
settings are session settings, with the exception of
'sql_reverse_unordered_selects'.

After this patch there will be no control pragmas.

Closes #4511
Closes #4621

@TarantoolBot document
Title: SQL SET statement

SQL SET statement is used to change SQL settings. To change the
value of an SQL parameter, use the following syntax:

SET <setting name> = <setting value>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

Example of usage:
SET sql_full_column_names = true;
SET sql_compound_select_limit = 10;
SET sql_default_engine = 'memtx';
ImeevMA added a commit that referenced this issue Nov 23, 2019
This patch replaces the control pragmas with SET. List of replaced
control pragmas and their SET settings:
	Control pragmas			SET parameters
defer_foreign_keys		sql_defer_foreign_keys
full_column_names		sql_full_column_names
recursive_triggers		sql_recursive_triggers
reverse_unordered_selects	sql_reverse_unordered_selects
sql_compound_select_limit	sql_compound_select_limit
sql_default_engine		sql_default_engine

Also, in debug build, these control pragmas are replaced by SET
settings:
	Control pragmas			SET parameters
parser_trace			sql_parser_trace
select_trace			sql_select_trace
sql_trace			sql_trace
vdbe_addoptrace			sql_vdbe_addoptrace
vdbe_debug			sql_vdbe_debug
vdbe_eqp			sql_vdbe_eqp
vdbe_listing			sql_vdbe_listing
vdbe_trace			sql_vdbe_trace
where_trace			sql_where_trace

Difference between SET and control pragma:
1) SET have more definite syntax:
SET <setting name> = <setting value>
In PRAGMA, we could set the settings using these methods:
PRAGMA <setting name> = <setting value>
PRAGMA <setting name>(<setting value>)

2) SET allows only a specific type of value for each setting. In
PRAGMA, we could use almost everything to set up any setting.
Although the rules by which the settings were set in PRAGMA were
pretty easy to understand.

3) SET cannot display setting values. PRAGMA showed the setting
values using the syntax "PRAGMA <setting name>;". With SET, we
must use other means to get the current setting values. For
session settings, we could use the sysview "_vsession_settings"
to get these values. It is worth noting that all current SQL
settings are session settings, with the exception of
'sql_reverse_unordered_selects'.

After this patch there will be no control pragmas.

Closes #4511
Closes #4621

@TarantoolBot document
Title: SQL SET statement

SQL SET statement is used to change SQL settings. To change the
value of an SQL parameter, use the following syntax:

SET <setting name> = <setting value>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

Example of usage:
SET sql_full_column_names = true;
SET sql_compound_select_limit = 10;
SET sql_default_engine = 'memtx';
ImeevMA added a commit that referenced this issue Nov 23, 2019
This patch replaces the control pragmas with SET. List of replaced
control pragmas and their SET settings:
	Control pragmas			SET parameters
defer_foreign_keys		sql_defer_foreign_keys
full_column_names		sql_full_column_names
recursive_triggers		sql_recursive_triggers
reverse_unordered_selects	sql_reverse_unordered_selects
sql_compound_select_limit	sql_compound_select_limit
sql_default_engine		sql_default_engine

Also, in debug build, these control pragmas are replaced by SET
settings:
	Control pragmas			SET parameters
parser_trace			sql_parser_trace
select_trace			sql_select_trace
sql_trace			sql_trace
vdbe_addoptrace			sql_vdbe_addoptrace
vdbe_debug			sql_vdbe_debug
vdbe_eqp			sql_vdbe_eqp
vdbe_listing			sql_vdbe_listing
vdbe_trace			sql_vdbe_trace
where_trace			sql_where_trace

Difference between SET and control pragma:
1) SET have more definite syntax:
SET <setting name> = <setting value>
In PRAGMA, we could set the settings using these methods:
PRAGMA <setting name> = <setting value>
PRAGMA <setting name>(<setting value>)

2) SET allows only a specific type of value for each setting. In
PRAGMA, we could use almost everything to set up any setting.
Although the rules by which the settings were set in PRAGMA were
pretty easy to understand.

3) SET cannot display setting values. PRAGMA showed the setting
values using the syntax "PRAGMA <setting name>;". With SET, we
must use other means to get the current setting values. For
session settings, we could use the sysview "_vsession_settings"
to get these values. It is worth noting that all current SQL
settings are session settings, with the exception of
'sql_reverse_unordered_selects'.

After this patch there will be no control pragmas.

Closes #4511
Closes #4621

@TarantoolBot document
Title: SQL SET statement

SQL SET statement is used to change SQL settings. To change the
value of an SQL parameter, use the following syntax:

SET <setting name> = <setting value>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

Example of usage:
SET sql_full_column_names = true;
SET sql_compound_select_limit = 10;
SET sql_default_engine = 'memtx';
ImeevMA added a commit that referenced this issue Nov 27, 2019
This patch replaces the control pragmas with SET. List of replaced
control pragmas and their SET settings:
	Control pragmas			SET parameters
defer_foreign_keys		sql_defer_foreign_keys
full_column_names		sql_full_column_names
recursive_triggers		sql_recursive_triggers
reverse_unordered_selects	sql_reverse_unordered_selects
sql_compound_select_limit	sql_compound_select_limit
sql_default_engine		sql_default_engine

Also, in debug build, these control pragmas are replaced by SET
settings:
	Control pragmas			SET parameters
parser_trace			sql_parser_trace
select_trace			sql_select_trace
sql_trace			sql_trace
vdbe_addoptrace			sql_vdbe_addoptrace
vdbe_debug			sql_vdbe_debug
vdbe_eqp			sql_vdbe_eqp
vdbe_listing			sql_vdbe_listing
vdbe_trace			sql_vdbe_trace
where_trace			sql_where_trace

Difference between SET and control pragma:
1) SET have more definite syntax:
SET <setting name> = <setting value>;
In PRAGMA, we could set the settings using these methods:
PRAGMA <setting name> = <setting value>;
PRAGMA <setting name>(<setting value>);

2) SET allows only a specific type of value for each setting. In
PRAGMA, we could use almost everything to set up any setting.
Although the rules by which the settings were set in PRAGMA were
pretty easy to understand.

3) SET cannot display setting values. PRAGMA showed the setting
values using the syntax "PRAGMA <setting name>;". With SET, we
must use other means to get the current setting values. For
session settings, we could use the sysview "_vsession_settings"
to get these values. It is worth noting that all current SQL
settings are session settings, with the exception of
'sql_reverse_unordered_selects'.

After this patch there will be no control pragmas.

Closes #4511
Closes #4621

@TarantoolBot document
Title: SQL SET statement

SQL SET statement is used to change SQL settings. To change the
value of an SQL setting, use the following syntax:

SET <setting name> = <setting value>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

Example of usage:
SET sql_full_column_names = true;
SET sql_compound_select_limit = 10;
SET sql_default_engine = 'memtx';
ImeevMA added a commit that referenced this issue Nov 27, 2019
This patch replaces the control pragmas with SET. List of replaced
control pragmas and their SET settings:
	Control pragmas			SET parameters
defer_foreign_keys		sql_defer_foreign_keys
full_column_names		sql_full_column_names
recursive_triggers		sql_recursive_triggers
reverse_unordered_selects	sql_reverse_unordered_selects
sql_compound_select_limit	sql_compound_select_limit
sql_default_engine		sql_default_engine

Also, in debug build, these control pragmas are replaced by SET
settings:
	Control pragmas			SET parameters
parser_trace			sql_parser_trace
select_trace			sql_select_trace
sql_trace			sql_trace
vdbe_addoptrace			sql_vdbe_addoptrace
vdbe_debug			sql_vdbe_debug
vdbe_eqp			sql_vdbe_eqp
vdbe_listing			sql_vdbe_listing
vdbe_trace			sql_vdbe_trace
where_trace			sql_where_trace

Difference between SET and control pragma:
1) SET have more definite syntax:
SET <setting name> = <setting value>;
In PRAGMA, we could set the settings using these methods:
PRAGMA <setting name> = <setting value>;
PRAGMA <setting name>(<setting value>);

2) SET allows only a specific type of value for each setting. In
PRAGMA, we could use almost everything to set up any setting.
Although the rules by which the settings were set in PRAGMA were
pretty easy to understand.

3) SET cannot display setting values. PRAGMA showed the setting
values using the syntax "PRAGMA <setting name>;". With SET, we
must use other means to get the current setting values. For
session settings, we could use the sysview "_vsession_settings"
to get these values. It is worth noting that all current SQL
settings are session settings, with the exception of
'sql_reverse_unordered_selects'.

After this patch there will be no control pragmas.

Closes #4511
Closes #4621

@TarantoolBot document
Title: SQL SET statement

SQL SET statement is used to change SQL settings. To change the
value of an SQL setting, use the following syntax:

SET <setting name> = <setting value>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

Example of usage:
SET sql_full_column_names = true;
SET sql_compound_select_limit = 10;
SET sql_default_engine = 'memtx';
ImeevMA added a commit that referenced this issue Nov 27, 2019
This patch replaces the control pragmas with SET. List of replaced
control pragmas and their SET settings:
	Control pragmas			SET parameters
defer_foreign_keys		sql_defer_foreign_keys
full_column_names		sql_full_column_names
recursive_triggers		sql_recursive_triggers
reverse_unordered_selects	sql_reverse_unordered_selects
sql_compound_select_limit	sql_compound_select_limit
sql_default_engine		sql_default_engine

Also, in debug build, these control pragmas are replaced by SET
settings:
	Control pragmas			SET parameters
parser_trace			sql_parser_trace
select_trace			sql_select_trace
sql_trace			sql_trace
vdbe_addoptrace			sql_vdbe_addoptrace
vdbe_debug			sql_vdbe_debug
vdbe_eqp			sql_vdbe_eqp
vdbe_listing			sql_vdbe_listing
vdbe_trace			sql_vdbe_trace
where_trace			sql_where_trace

Difference between SET and control pragma:
1) SET have more definite syntax:
SET <setting name> = <setting value>;
In PRAGMA, we could set the settings using these methods:
PRAGMA <setting name> = <setting value>;
PRAGMA <setting name>(<setting value>);

2) SET allows only a specific type of value for each setting. In
PRAGMA, we could use almost everything to set up any setting.
Although the rules by which the settings were set in PRAGMA were
pretty easy to understand.

3) SET cannot display setting values. PRAGMA showed the setting
values using the syntax "PRAGMA <setting name>;". With SET, we
must use other means to get the current setting values. For
session settings, we could use the sysview "_vsession_settings"
to get these values. It is worth noting that all current SQL
settings are session settings, with the exception of
'sql_reverse_unordered_selects'.

After this patch there will be no control pragmas.

Closes #4511
Closes #4621

@TarantoolBot document
Title: SQL SET statement

SQL SET statement is used to change SQL settings. To change the
value of an SQL setting, use the following syntax:

SET <setting name> = <setting value>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

Example of usage:
SET sql_full_column_names = true;
SET sql_compound_select_limit = 10;
SET sql_default_engine = 'memtx';
ImeevMA added a commit that referenced this issue Nov 28, 2019
This patch replaces the control pragmas with SET. After this patch
there will be no control pragmas.

Closes #4511
Part of #4621

@TarantoolBot document
Title: SQL SET statement

The SQL SET statement is used to change SQL settings. It should be
used as a substitute for PRAGMA. Pragmas replaced by SET are
deleted.

To change the value of an SQL setting, use the following syntax:
SET <setting name> = <setting value>;

Currently available SQL settings:
'sql_defer_foreign_keys'
'sql_full_column_names'
'sql_recursive_triggers'
'sql_reverse_unordered_selects'
'sql_compound_select_limit'
'sql_default_engine'

In addition, SQL debugging settings can also be changed using this
statement in debug build:
'sql_parser_trace'
'sql_select_trace'
'sql_trace'
'sql_vdbe_addoptrace'
'sql_vdbe_debug'
'sql_vdbe_eqp'
'sql_vdbe_listing'
'sql_vdbe_trace'
'sql_where_trace'

List of replaced control pragmas and their SET analogues:
	Control pragmas			SET parameters
defer_foreign_keys		sql_defer_foreign_keys
full_column_names		sql_full_column_names
recursive_triggers		sql_recursive_triggers
reverse_unordered_selects	sql_reverse_unordered_selects
sql_compound_select_limit	sql_compound_select_limit
sql_default_engine		sql_default_engine

Also, in debug build, these control pragmas are replaced by SET
analogues:
	Control pragmas			SET parameters
parser_trace			sql_parser_trace
select_trace			sql_select_trace
sql_trace			sql_trace
vdbe_addoptrace			sql_vdbe_addoptrace
vdbe_debug			sql_vdbe_debug
vdbe_eqp			sql_vdbe_eqp
vdbe_listing			sql_vdbe_listing
vdbe_trace			sql_vdbe_trace
where_trace			sql_where_trace

Difference between SET and control pragma:
1) SET have more definite syntax:
SET <setting name> = <setting value>;
In PRAGMA, we could set the settings using these methods:
PRAGMA <setting name> = <setting value>;
PRAGMA <setting name>(<setting value>);

2) SET allows only a specific type of value for each setting. In
PRAGMA, we could use almost everything to set up any setting.
Although the rules by which the settings were set in PRAGMA were
pretty easy to understand.

3) SET cannot display setting values. PRAGMA showed the setting
values using the syntax "PRAGMA <setting name>;". With SET, we
must use other means to get the current setting values. For
session settings, we could use the sysview "_vsession_settings"
to get these values. It is worth noting that all current SQL
settings are session settings, with the exception of
'sql_reverse_unordered_selects'.

Example of usage:
SET sql_default_engine = 'memtx';
SET sql_reverse_unordered_selects = false;
@ImeevMA
Copy link
Collaborator

ImeevMA commented Nov 28, 2019

The main idea of ​​the issue is to make SET work the way it works in an UPDATE statement. In this case, we will be able to use SET with bindings, arithmetic operations, and so on.

@kyukhin kyukhin added this to the 2.3.2 milestone Jan 16, 2020
@ImeevMA
Copy link
Collaborator

ImeevMA commented Feb 22, 2020

@Gerold103 Is this issue still relevant?

@kyukhin kyukhin modified the milestones: 2.3.2, 2.3.3, 2.4.2, 2.4.3 Apr 21, 2020
@kyukhin kyukhin modified the milestones: 2.4.3, wishlist Oct 23, 2020
@kyukhin kyukhin removed this from the wishlist milestone Sep 20, 2022
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Mar 2, 2023
This patch reworks the parsing of statements associated with
transactions. There are six of them:
START TRANSACTION;
COMMIT;
ROLLBACK;
SAVEPOINT savepoint_name;
RELEASE [SAVEPOINT] savepoint_name;
ROLLBACK TO savepoint_name;

Prior to this patch, VDBE for these statements were generated while the
statement was in the process of being parsed. After this patch, all
these statements will be executed only after the parsing has
successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes are made
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Mar 2, 2023
This patch reworks FOREIGN KEY constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT FOREIGN KEY
statements.

Prior to this patch, VDBE for creation of FOREIGN KEY constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, FOREIGN KEY constraints will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause,
COLLATION clause, PRIMARY KEY constraint, UNIQUE constraints,
and CHECK CONSTRAINTS constraints.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Mar 2, 2023
This patch reworks the parsing of statements associated with
transactions. There are six of them:
START TRANSACTION;
COMMIT;
ROLLBACK;
SAVEPOINT savepoint_name;
RELEASE [SAVEPOINT] savepoint_name;
ROLLBACK TO savepoint_name;

Prior to this patch, VDBE for these statements were generated while the
statement was in the process of being parsed. After this patch, all
these statements will be executed only after the parsing has
successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes are made
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Mar 2, 2023
This patch reworks FOREIGN KEY constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT FOREIGN KEY
statements.

Prior to this patch, VDBE for creation of FOREIGN KEY constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, FOREIGN KEY constraints will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause,
COLLATION clause, PRIMARY KEY constraint, UNIQUE constraints,
and CHECK CONSTRAINTS constraints.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100
Part of tarantool#8392

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Mar 2, 2023
This patch reworks CHECK constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT CHECK statements.

Prior to this patch, VDBE for creation of CHECK constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, CHECK constraints will be created after creating
columns, NULL and NOT NULL constraints, DEFAULT clause, COLLATION
clause, PRIMARY KEY constraint and UNIQUE constraints.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100
Closes tarantool#8392

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Mar 2, 2023
This patch reworks UNIQUE constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT UNIQUE statements.

Prior to this patch, VDBE for creation of UNIQUE constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, UNIQUE constraints will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause,
COLLATION clause and PRIMARY KEY constraint.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Mar 2, 2023
This patch reworks FOREIGN KEY constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT FOREIGN KEY
statements.

Prior to this patch, VDBE for creation of FOREIGN KEY constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, FOREIGN KEY constraints will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause,
COLLATION clause, PRIMARY KEY constraint, UNIQUE constraints,
and CHECK CONSTRAINTS constraints.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100
Part of tarantool#8392

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks ALTER TABLE ADD COLUMN statement parsing. Prior to
this patch, VDBE for ALTER TABLE ADD COLUMN statement was generated
while the statement was in the process of being parsed. After this
patch, it will be generated only after the parsing has successfully
completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks CREATE TABLE statement parsing. Prior to this patch,
VDBE for CREATE TABLE statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks CREATE VIEW statement parsing. Prior to this patch,
VDBE for CREATE VIEW statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks CREATE TRIGGER statement parsing. Prior to this
patch, VDBE for CREATE TRIGGER statement was generated while the
statement was in the process of being parsed. After this patch, it will
be generated only after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks ALTER TABLE RENAME statement parsing. Prior to this
patch, VDBE for ALTER TABLE RENAME statement was generated while the
statement was in the process of being parsed. After this patch, it will
be generated only after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks ALTER TABLE DROP CONSTRAINT statement parsing. Prior
to this patch, VDBE for ALTER TABLE DROP CONSTRAINT statement was
generated while the statement was in the process of being parsed. After
this patch, it will be generated only after the parsing has successfully
completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks DROP INDEX statement parsing. Prior to this patch,
VDBE for DROP INDEX statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks DROP VIEW statement parsing. Prior to this patch,
VDBE for DROP VIEW statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks DROP TABLE statement parsing. Prior to this patch,
VDBE for DROP TABLE statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks DROP TRIGGER statement parsing. Prior to this patch,
VDBE for DROP TRIGGER statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 12, 2023
This patch reworks the parsing of statements associated with
transactions. There are six of them:
START TRANSACTION;
COMMIT;
ROLLBACK;
SAVEPOINT savepoint_name;
RELEASE [SAVEPOINT] savepoint_name;
ROLLBACK TO savepoint_name;

Prior to this patch, VDBE for these statements were generated while the
statement was in the process of being parsed. After this patch, VDBE for
all these statements will be generated only after the parsing has
successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes are made
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks FOREIGN KEY constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT FOREIGN KEY
statements.

Prior to this patch, VDBE opcodes for creation of FOREIGN KEY
constraints were generated while the statement was in the process of
being parsed. After this patch, they will be generated only after the
parsing has successfully completed.

Also, after this patch, FOREIGN KEY constraints will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause,
COLLATION clause, PRIMARY KEY constraint, UNIQUE constraints,
and CHECK CONSTRAINTS constraints.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100
Part of tarantool#8392

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks CHECK constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT CHECK statements.

Prior to this patch, VDBE for creation of CHECK constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, CHECK constraints will be created after creating
columns, NULL and NOT NULL constraints, DEFAULT clause, COLLATION
clause, PRIMARY KEY constraint and UNIQUE constraints.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100
Closes tarantool#8392

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks UNIQUE constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT UNIQUE statements.

Prior to this patch, VDBE for creation of UNIQUE constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, UNIQUE constraints will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause,
COLLATION clause and PRIMARY KEY constraint.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks PRIMARY KEY constraint parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT PRIMARY KEY
statements.

Prior to this patch, VDBE for creation of PRIMARY KEY constraint was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, PRIMARY KEY constraint will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause and
COLLATION clause.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks CREATE INDEX statement parsing. Prior to this patch,
VDBE for CREATE INDEX statement was generated while the statement was in
the process of being parsed. After this patch, the statement will be
executed only after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks AUTOINCREMENT clause parsing in CREATE TABLE and
ALTER TABLE ADD COLUMN statements.

Prior to this patch, the AUTOINCREMENT clause was processed while the
statement was in the process of being parsed. After this patch, the
clause will be processed only after the parsing has successfully
completed.

Also, after this patch, AUTOINCREMENT clause will be processed after
creating columns, NULL and NOT NULL constraints, DEFAULT clause and
COLLATION clause.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks ALTER TABLE ADD COLUMN statement parsing. Prior to
this patch, VDBE for ALTER TABLE ADD COLUMN statement was generated
while the statement was in the process of being parsed. After this
patch, it will be generated only after the parsing has successfully
completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks CREATE TABLE statement parsing. Prior to this patch,
VDBE for CREATE TABLE statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Apr 22, 2023
This patch reworks CREATE VIEW statement parsing. Prior to this patch,
VDBE for CREATE VIEW statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks FOREIGN KEY constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT FOREIGN KEY
statements.

Prior to this patch, VDBE opcodes for creation of FOREIGN KEY
constraints were generated while the statement was in the process of
being parsed. After this patch, they will be generated only after the
parsing has successfully completed.

Also, after this patch, FOREIGN KEY constraints will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause,
COLLATION clause, PRIMARY KEY constraint, UNIQUE constraints,
and CHECK CONSTRAINTS constraints.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100
Part of tarantool#8392

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks CHECK constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT CHECK statements.

Prior to this patch, VDBE for creation of CHECK constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, CHECK constraints will be created after creating
columns, NULL and NOT NULL constraints, DEFAULT clause, COLLATION
clause, PRIMARY KEY constraint and UNIQUE constraints.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100
Closes tarantool#8392

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks UNIQUE constraints parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT UNIQUE statements.

Prior to this patch, VDBE for creation of UNIQUE constraints was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, UNIQUE constraints will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause,
COLLATION clause and PRIMARY KEY constraint.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks PRIMARY KEY constraint parsing in CREATE TABLE,
ALTER TABLE ADD COLUMN and ALTER TABLE ADD CONSTRAINT PRIMARY KEY
statements.

Prior to this patch, VDBE for creation of PRIMARY KEY constraint was
generated while the statement was in the process of being parsed. After
this patch, all these statements will be executed only after the parsing
has successfully completed.

Also, after this patch, PRIMARY KEY constraint will be created after
creating columns, NULL and NOT NULL constraints, DEFAULT clause and
COLLATION clause.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks CREATE INDEX statement parsing. Prior to this patch,
VDBE for CREATE INDEX statement was generated while the statement was in
the process of being parsed. After this patch, the statement will be
executed only after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks AUTOINCREMENT clause parsing in CREATE TABLE and
ALTER TABLE ADD COLUMN statements.

Prior to this patch, the AUTOINCREMENT clause was processed while the
statement was in the process of being parsed. After this patch, the
clause will be processed only after the parsing has successfully
completed.

Also, after this patch, AUTOINCREMENT clause will be processed after
creating columns, NULL and NOT NULL constraints, DEFAULT clause and
COLLATION clause.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks ALTER TABLE ADD COLUMN statement parsing. Prior to
this patch, VDBE for ALTER TABLE ADD COLUMN statement was generated
while the statement was in the process of being parsed. After this
patch, it will be generated only after the parsing has successfully
completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks CREATE TABLE statement parsing. Prior to this patch,
VDBE for CREATE TABLE statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_CHANGELOG=Will be added later
ImeevMA added a commit to ImeevMA/tarantool that referenced this issue Sep 26, 2023
This patch reworks CREATE VIEW statement parsing. Prior to this patch,
VDBE for CREATE VIEW statement was generated while the statement was in
the process of being parsed. After this patch, it will be generated only
after the parsing has successfully completed.

Part of tarantool#3319
Part of tarantool#4621
Part of tarantool#5485
Part of tarantool#8100

NO_DOC=Will be added later
NO_TEST=No user-visible changes
NO_CHANGELOG=Will be added later
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working sql
Projects
None yet
Development

No branches or pull requests

3 participants