Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
70390771
Commit
70390771
authored
Jun 29, 2016
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
change vcol->non_deterministic to vcol->flags
parent
0a056c9b
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
22 additions
and
27 deletions
+22
-27
sql/field.cc
sql/field.cc
+1
-1
sql/field.h
sql/field.h
+9
-3
sql/item.h
sql/item.h
+0
-7
sql/table.cc
sql/table.cc
+11
-15
sql/unireg.cc
sql/unireg.cc
+1
-1
No files found.
sql/field.cc
View file @
70390771
...
@@ -9766,7 +9766,7 @@ bool check_expression(Virtual_column_info *vcol, const char *type,
...
@@ -9766,7 +9766,7 @@ bool check_expression(Virtual_column_info *vcol, const char *type,
res
.
errors
=
0
;
res
.
errors
=
0
;
ret
=
vcol
->
expr_item
->
walk
(
&
Item
::
check_vcol_func_processor
,
0
,
&
res
);
ret
=
vcol
->
expr_item
->
walk
(
&
Item
::
check_vcol_func_processor
,
0
,
&
res
);
vcol
->
non_deterministic
=
res
.
errors
&
VCOL_NON_DETERMINISTIC
;
vcol
->
flags
=
res
.
errors
;
if
(
ret
||
if
(
ret
||
(
res
.
errors
&
(
res
.
errors
&
...
...
sql/field.h
View file @
70390771
...
@@ -546,6 +546,12 @@ inline bool is_temporal_type_with_time(enum_field_types type)
...
@@ -546,6 +546,12 @@ inline bool is_temporal_type_with_time(enum_field_types type)
}
}
}
}
/* Bits for type of vcol expression */
#define VCOL_DETERMINISTIC 0
/* Normal (no bit set) */
#define VCOL_UNKNOWN 1
/* UDF used; Need fix_fields() to know */
#define VCOL_NON_DETERMINISTIC 2
#define VCOL_TIME_FUNC 4
#define VCOL_IMPOSSIBLE 8
/*
/*
Virtual_column_info is the class to contain additional
Virtual_column_info is the class to contain additional
...
@@ -571,18 +577,18 @@ class Virtual_column_info: public Sql_alloc
...
@@ -571,18 +577,18 @@ class Virtual_column_info: public Sql_alloc
public:
public:
/* Flag indicating that the field is physically stored in the database */
/* Flag indicating that the field is physically stored in the database */
bool
stored_in_db
;
bool
stored_in_db
;
bool
non_deterministic
;
bool
utf8
;
/* Already in utf8 */
bool
utf8
;
/* Already in utf8 */
/* The expression to compute the value of the virtual column */
/* The expression to compute the value of the virtual column */
Item
*
expr_item
;
Item
*
expr_item
;
/* Text representation of the defining expression */
/* Text representation of the defining expression */
LEX_STRING
expr_str
;
LEX_STRING
expr_str
;
LEX_STRING
name
;
/* Name of constraint */
LEX_STRING
name
;
/* Name of constraint */
uint
flags
;
Virtual_column_info
()
Virtual_column_info
()
:
field_type
((
enum
enum_field_types
)
MYSQL_TYPE_VIRTUAL
),
:
field_type
((
enum
enum_field_types
)
MYSQL_TYPE_VIRTUAL
),
in_partitioning_expr
(
FALSE
),
stored_in_db
(
FALSE
),
non_deterministic
(
FALSE
),
in_partitioning_expr
(
FALSE
),
stored_in_db
(
FALSE
),
utf8
(
TRUE
),
expr_item
(
NULL
)
utf8
(
TRUE
),
expr_item
(
NULL
)
,
flags
(
0
)
{
{
expr_str
.
str
=
name
.
str
=
NULL
;
expr_str
.
str
=
name
.
str
=
NULL
;
name
.
length
=
0
;
name
.
length
=
0
;
...
...
sql/item.h
View file @
70390771
...
@@ -32,13 +32,6 @@ C_MODE_START
...
@@ -32,13 +32,6 @@ C_MODE_START
#include <ma_dyncol.h>
#include <ma_dyncol.h>
C_MODE_END
C_MODE_END
/* Bits for type of vcol expression */
#define VCOL_DETERMINISTIC 0
/* Normal (no bit set) */
#define VCOL_UNKNOWN 1
/* UDF used; Need fix_fields() to know */
#define VCOL_NON_DETERMINISTIC 2
#define VCOL_TIME_FUNC 4
#define VCOL_IMPOSSIBLE 8
class
Protocol
;
class
Protocol
;
struct
TABLE_LIST
;
struct
TABLE_LIST
;
void
item_init
(
void
);
/* Init item functions */
void
item_init
(
void
);
/* Init item functions */
...
...
sql/table.cc
View file @
70390771
...
@@ -2208,7 +2208,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
...
@@ -2208,7 +2208,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
vcol_info
->
expr_str
.
str
=
expr
;
vcol_info
->
expr_str
.
str
=
expr
;
vcol_info
->
expr_str
.
length
=
expr_length
;
vcol_info
->
expr_str
.
length
=
expr_length
;
vcol_screen_pos
+=
expr_length
;
vcol_screen_pos
+=
expr_length
;
vcol_info
->
non_deterministic
=
flags
&
1
;
vcol_info
->
flags
=
flags
;
vcol_info
->
stored_in_db
=
0
;
vcol_info
->
stored_in_db
=
0
;
switch
(
type
)
{
switch
(
type
)
{
...
@@ -2578,15 +2578,6 @@ static bool fix_vcol_expr(THD *thd,
...
@@ -2578,15 +2578,6 @@ static bool fix_vcol_expr(THD *thd,
/* fix_fields could change the expression */
/* fix_fields could change the expression */
func_expr
=
vcol
->
expr_item
;
func_expr
=
vcol
->
expr_item
;
/*
Mark what kind of default / virtual fields the table has
Here we assume that things has not changed since table was created.
If we decide to not trust functions, we could instead call
expr_item->walk(&Item::check_vcol_func_processor)
*/
if
(
vcol
->
stored_in_db
&&
vcol
->
non_deterministic
)
table
->
s
->
non_determinstic_insert
=
1
;
/* Number of columns will be checked later */
/* Number of columns will be checked later */
thd
->
where
=
save_where
;
thd
->
where
=
save_where
;
if
(
unlikely
(
func_expr
->
result_type
()
==
ROW_RESULT
))
if
(
unlikely
(
func_expr
->
result_type
()
==
ROW_RESULT
))
...
@@ -2602,7 +2593,6 @@ static bool fix_vcol_expr(THD *thd,
...
@@ -2602,7 +2593,6 @@ static bool fix_vcol_expr(THD *thd,
goto
end
;
goto
end
;
}
}
#ifdef PARANOID
/*
/*
Walk through the Item tree checking if all items are valid
Walk through the Item tree checking if all items are valid
to be part of the virtual column
to be part of the virtual column
...
@@ -2614,10 +2604,17 @@ static bool fix_vcol_expr(THD *thd,
...
@@ -2614,10 +2604,17 @@ static bool fix_vcol_expr(THD *thd,
if
(
error
||
(
res
.
errors
&
VCOL_IMPOSSIBLE
))
if
(
error
||
(
res
.
errors
&
VCOL_IMPOSSIBLE
))
{
{
my_error
(
ER_VIRTUAL_COLUMN_FUNCTION_IS_NOT_ALLOWED
,
MYF
(
0
),
res
.
name
,
my_error
(
ER_VIRTUAL_COLUMN_FUNCTION_IS_NOT_ALLOWED
,
MYF
(
0
),
res
.
name
,
"???"
,
field_name
);
"???"
,
field
->
field
_name
);
goto
end
;
goto
end
;
}
}
#endif
vcol
->
flags
=
res
.
errors
;
/*
Mark what kind of default / virtual fields the table has
*/
if
(
vcol
->
stored_in_db
&&
vcol
->
flags
&
VCOL_NON_DETERMINISTIC
)
table
->
s
->
non_determinstic_insert
=
1
;
result
=
FALSE
;
result
=
FALSE
;
end:
end:
...
@@ -2759,7 +2756,6 @@ Virtual_column_info *unpack_vcol_info_from_frm(THD *thd,
...
@@ -2759,7 +2756,6 @@ Virtual_column_info *unpack_vcol_info_from_frm(THD *thd,
fix_vcol_expr() to mark if we are using non deterministic functions.
fix_vcol_expr() to mark if we are using non deterministic functions.
*/
*/
vcol_storage
.
vcol_info
->
stored_in_db
=
vcol
->
stored_in_db
;
vcol_storage
.
vcol_info
->
stored_in_db
=
vcol
->
stored_in_db
;
vcol_storage
.
vcol_info
->
non_deterministic
=
vcol
->
non_deterministic
;
vcol_storage
.
vcol_info
->
name
=
vcol
->
name
;
vcol_storage
.
vcol_info
->
name
=
vcol
->
name
;
vcol_storage
.
vcol_info
->
utf8
=
vcol
->
utf8
;
vcol_storage
.
vcol_info
->
utf8
=
vcol
->
utf8
;
/* Validate the Item tree. */
/* Validate the Item tree. */
...
...
sql/unireg.cc
View file @
70390771
...
@@ -576,7 +576,7 @@ static void pack_expression(uchar **buff, Virtual_column_info *vcol,
...
@@ -576,7 +576,7 @@ static void pack_expression(uchar **buff, Virtual_column_info *vcol,
int2store
((
*
buff
)
+
2
,
vcol
->
expr_str
.
length
);
int2store
((
*
buff
)
+
2
,
vcol
->
expr_str
.
length
);
(
*
buff
)[
4
]
=
(
uchar
)
type
;
(
*
buff
)[
4
]
=
(
uchar
)
type
;
(
*
buff
)[
5
]
=
vcol
->
name
.
length
;
(
*
buff
)[
5
]
=
vcol
->
name
.
length
;
(
*
buff
)[
6
]
=
vcol
->
non_deterministic
;
// 1 bit used for now
(
*
buff
)[
6
]
=
vcol
->
flags
;
(
*
buff
)
+=
FRM_VCOL_NEW_HEADER_SIZE
;
(
*
buff
)
+=
FRM_VCOL_NEW_HEADER_SIZE
;
memcpy
((
*
buff
),
vcol
->
name
.
str
,
vcol
->
name
.
length
);
memcpy
((
*
buff
),
vcol
->
name
.
str
,
vcol
->
name
.
length
);
(
*
buff
)
+=
vcol
->
name
.
length
;
(
*
buff
)
+=
vcol
->
name
.
length
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment