mirror of
https://github.com/MariaDB/server.git
synced 2025-01-26 08:44:33 +01:00
cleanup: VCOL_NOT_VIRTUAL->VCOL_NEXTVAL
rename to stress that is a specific hack for Item_func_nextval and should not be used for other items. If a vcol uses Item_func_nextval, a corresponding table for the sequence should be added to the prelocking list (in that sense NEXTVAL is not simply a function, but more like a subquery), see add_internal_tables() in DML_prelocking_strategy::handle_table(). At the moment it is only implemented for DEFAULT, not for GENERATED ALWAYS AS, thus the VCOL_NEXTVAL hack.
This commit is contained in:
parent
53e57a8681
commit
a6b327e90a
6 changed files with 15 additions and 8 deletions
|
@ -247,3 +247,7 @@ create table t1 (a int);
|
|||
alter table t1 add column r blob generated always
|
||||
as (match(a) against ('' in boolean mode)) virtual;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 10.3 tests
|
||||
--echo #
|
||||
|
|
|
@ -170,6 +170,9 @@ alter table t1 add column r blob generated always
|
|||
as (match(a) against ('' in boolean mode)) virtual;
|
||||
ERROR HY000: Function or expression 'match ... against()' cannot be used in the GENERATED ALWAYS AS clause of `r`
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
DROP VIEW IF EXISTS v1,v2;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
|
|
|
@ -172,6 +172,9 @@ alter table t1 add column r blob generated always
|
|||
as (match(a) against ('' in boolean mode)) virtual;
|
||||
ERROR HY000: Function or expression 'match ... against()' cannot be used in the GENERATED ALWAYS AS clause of `r`
|
||||
drop table t1;
|
||||
#
|
||||
# End of 10.3 tests
|
||||
#
|
||||
DROP VIEW IF EXISTS v1,v2;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
|
|
|
@ -10525,8 +10525,8 @@ bool check_expression(Virtual_column_info *vcol, LEX_CSTRING *name,
|
|||
uint filter= VCOL_IMPOSSIBLE;
|
||||
if (type != VCOL_GENERATED_VIRTUAL && type != VCOL_DEFAULT)
|
||||
filter|= VCOL_NOT_STRICTLY_DETERMINISTIC;
|
||||
if (type == VCOL_GENERATED_VIRTUAL)
|
||||
filter|= VCOL_NOT_VIRTUAL;
|
||||
if (type != VCOL_DEFAULT)
|
||||
filter|= VCOL_NEXTVAL;
|
||||
|
||||
if (unlikely(ret || (res.errors & filter)))
|
||||
{
|
||||
|
|
|
@ -528,10 +528,10 @@ static inline const char *vcol_type_name(enum_vcol_info_type type)
|
|||
#define VCOL_FIELD_REF 1
|
||||
#define VCOL_NON_DETERMINISTIC 2
|
||||
#define VCOL_SESSION_FUNC 4 /* uses session data, e.g. USER or DAYNAME */
|
||||
#define VCOL_TIME_FUNC 8
|
||||
#define VCOL_TIME_FUNC 8 /* safe for SBR */
|
||||
#define VCOL_AUTO_INC 16
|
||||
#define VCOL_IMPOSSIBLE 32
|
||||
#define VCOL_NOT_VIRTUAL 64 /* Function can't be virtual */
|
||||
#define VCOL_NEXTVAL 64 /* NEXVAL is not implemented for vcols */
|
||||
|
||||
#define VCOL_NOT_STRICTLY_DETERMINISTIC \
|
||||
(VCOL_NON_DETERMINISTIC | VCOL_TIME_FUNC | VCOL_SESSION_FUNC)
|
||||
|
@ -4965,5 +4965,4 @@ ulonglong TABLE::vers_start_id() const
|
|||
return static_cast<ulonglong>(vers_start_field()->val_int());
|
||||
}
|
||||
|
||||
|
||||
#endif /* FIELD_INCLUDED */
|
||||
|
|
|
@ -3159,9 +3159,7 @@ public:
|
|||
void print(String *str, enum_query_type query_type);
|
||||
bool check_vcol_func_processor(void *arg)
|
||||
{
|
||||
return mark_unsupported_function(func_name(), "()", arg,
|
||||
(VCOL_NON_DETERMINISTIC |
|
||||
VCOL_NOT_VIRTUAL));
|
||||
return mark_unsupported_function(func_name(), "()", arg, VCOL_NEXTVAL);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue