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
b936b25d
Commit
b936b25d
authored
Jun 29, 2002
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added functions :
* binary XOR * logical XOR * CHECK_LOCK("lock_name")
parent
d7a84c7a
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
165 additions
and
2 deletions
+165
-2
Docs/manual.texi
Docs/manual.texi
+33
-0
mysql-test/r/func_test.result
mysql-test/r/func_test.result
+6
-0
mysql-test/r/rpl_get_lock.result
mysql-test/r/rpl_get_lock.result
+3
-0
mysql-test/t/func_test.test
mysql-test/t/func_test.test
+2
-1
mysql-test/t/rpl_get_lock.test
mysql-test/t/rpl_get_lock.test
+1
-0
sql/item_cmpfunc.cc
sql/item_cmpfunc.cc
+15
-0
sql/item_cmpfunc.h
sql/item_cmpfunc.h
+10
-0
sql/item_create.cc
sql/item_create.cc
+7
-0
sql/item_create.h
sql/item_create.h
+1
-0
sql/item_func.cc
sql/item_func.cc
+55
-0
sql/item_func.h
sql/item_func.h
+21
-1
sql/lex.h
sql/lex.h
+2
-0
sql/sql_yacc.yy
sql/sql_yacc.yy
+9
-0
No files found.
Docs/manual.texi
View file @
b936b25d
...
...
@@ -49578,6 +49578,39 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
@itemize @bullet
@item
Added binary XOR.
The one that with a query like :
select 11 ^ 3;
returns 8.
Based on the code originated by Hartmut Holzgraefe <hartmut@six.de>.
@item
Added logical XOR.
The one that with a query like:
select 1 XOR 1;
returns 0;
Based on the code originated by Hartmut Holzgraefe <hartmut@six.de>.
@item
Add function CHEDK_LOCK("lock_name").
This function checks if the lock of the certain name is available or not.
This function does not attempt to take a look.
It is used like this:
SELECT CHECK_LOCK("some_lock");
it will return 1 if the lock is held by a process (including by
itself), 0 if it is currently not held by anyone and NULL on
errors.
Based on the code originated by Hartmut Holzgraefe <hartmut@six.de>.
@item
Removed @code{mysql_ssl_clear()}, as this was not needed.
@item
@code{DECIMAL} and @code{NUMERIC} types can now read exponential numbers.
mysql-test/r/func_test.result
View file @
b936b25d
...
...
@@ -40,6 +40,12 @@ select 2 in (3,2,5,9,5,1),"monty" in ("david","monty","allan"), 1.2 in (1.4,1.2,
select -1.49 or -1.49,0.6 or 0.6;
-1.49 or -1.49 0.6 or 0.6
1 1
select 3 ^ 11;
3 ^ 11
8
select 1 XOR 0;
1 XOR 0
1
select 5 between 0 and 10 between 0 and 1,(5 between 0 and 10) between 0 and 1;
5 between 0 and 10 between 0 and 1 (5 between 0 and 10) between 0 and 1
0 1
...
...
mysql-test/r/rpl_get_lock.result
View file @
b936b25d
...
...
@@ -17,4 +17,7 @@ get_lock("lock",3)
select * from t1;
n
1
select check_lock("lock");
check_lock("lock")
1
drop table t1;
mysql-test/t/func_test.test
View file @
b936b25d
...
...
@@ -15,7 +15,8 @@ select 2 between 1 and 3, "monty" between "max" and "my",2=2 and "monty" between
select
'b'
between
'a'
and
'c'
,
'B'
between
'a'
and
'c'
;
select
2
in
(
3
,
2
,
5
,
9
,
5
,
1
),
"monty"
in
(
"david"
,
"monty"
,
"allan"
),
1.2
in
(
1.4
,
1.2
,
1.0
);
select
-
1.49
or
-
1.49
,
0.6
or
0.6
;
select
3
^
11
;
select
1
XOR
0
;
#
# Wrong usage of functions
#
...
...
mysql-test/t/rpl_get_lock.test
View file @
b936b25d
...
...
@@ -22,6 +22,7 @@ sync_with_master;
select
get_lock
(
"lock"
,
3
);
select
*
from
t1
;
connection
master1
;
select
check_lock
(
"lock"
);
drop
table
t1
;
save_master_pos
;
connection
slave
;
...
...
sql/item_cmpfunc.cc
View file @
b936b25d
...
...
@@ -1624,3 +1624,18 @@ bool Item_func_like::turboBM_matches(const char* text, int text_len) const
return
false
;
}
}
longlong
Item_cond_xor
::
val_int
()
{
List_iterator
<
Item
>
li
(
list
);
Item
*
item
;
int
result
=
0
;
null_value
=
1
;
while
((
item
=
li
++
))
{
result
^=
(
item
->
val_int
()
!=
0
);
if
(
!
item
->
null_value
)
null_value
=
0
;
}
return
result
;
}
sql/item_cmpfunc.h
View file @
b936b25d
...
...
@@ -596,3 +596,13 @@ inline Item *and_conds(Item *a,Item *b)
cond
->
update_used_tables
();
return
cond
;
}
class
Item_cond_xor
:
public
Item_cond
{
public:
Item_cond_xor
()
:
Item_cond
()
{}
Item_cond_xor
(
Item
*
i1
,
Item
*
i2
)
:
Item_cond
(
i1
,
i2
)
{}
enum
Functype
functype
()
const
{
return
COND_XOR_FUNC
;
}
longlong
val_int
();
const
char
*
func_name
()
const
{
return
"xor"
;
}
};
sql/item_create.cc
View file @
b936b25d
...
...
@@ -428,3 +428,10 @@ Item *create_func_cast(Item *a, Item_cast cast_type)
}
return
res
;
}
Item
*
create_func_check_lock
(
Item
*
a
)
{
current_thd
->
safe_to_cache_query
=
0
;
return
new
Item_func_check_lock
(
a
);
}
sql/item_create.h
View file @
b936b25d
...
...
@@ -91,3 +91,4 @@ Item *create_func_version(void);
Item
*
create_func_weekday
(
Item
*
a
);
Item
*
create_load_file
(
Item
*
a
);
Item
*
create_wait_for_master_pos
(
Item
*
a
,
Item
*
b
);
Item
*
create_func_check_lock
(
Item
*
a
);
sql/item_func.cc
View file @
b936b25d
...
...
@@ -2257,6 +2257,24 @@ double Item_func_match::val()
return
ft_handler
->
please
->
find_relevance
(
ft_handler
,
record
,
0
);
}
longlong
Item_func_bit_xor
::
val_int
()
{
ulonglong
arg1
=
(
ulonglong
)
args
[
0
]
->
val_int
();
if
(
args
[
0
]
->
null_value
)
{
null_value
=
1
;
return
0
;
}
ulonglong
arg2
=
(
ulonglong
)
args
[
1
]
->
val_int
();
if
(
args
[
1
]
->
null_value
)
{
null_value
=
1
;
return
0
;
}
null_value
=
0
;
return
(
longlong
)
(
arg1
^
arg2
);
}
/***************************************************************************
System variables
...
...
@@ -2274,3 +2292,40 @@ Item *get_system_var(LEX_STRING name)
net_printf
(
&
current_thd
->
net
,
ER_UNKNOWN_SYSTEM_VARIABLE
,
name
.
str
);
return
0
;
}
/*
Check a user level lock.
Returns 1: available
Returns 0: already taken
Returns NULL: Error
*/
longlong
Item_func_check_lock
::
val_int
()
{
String
*
res
=
args
[
0
]
->
val_str
(
&
value
);
struct
timespec
abstime
;
THD
*
thd
=
current_thd
;
ULL
*
ull
;
int
error
=
0
;
null_value
=
0
;
if
(
/* check_global_access(thd,SUPER_ACL) ||*/
!
res
||
!
res
->
length
())
{
null_value
=
1
;
return
0
;
}
pthread_mutex_lock
(
&
LOCK_user_locks
);
ull
=
(
ULL
*
)
hash_search
(
&
hash_user_locks
,(
byte
*
)
res
->
ptr
(),
res
->
length
());
pthread_mutex_unlock
(
&
LOCK_user_locks
);
if
(
!
ull
||
!
ull
->
locked
)
return
1
;
return
0
;
}
sql/item_func.h
View file @
b936b25d
...
...
@@ -39,7 +39,7 @@ class Item_func :public Item_result_field
enum
Functype
{
UNKNOWN_FUNC
,
EQ_FUNC
,
EQUAL_FUNC
,
NE_FUNC
,
LT_FUNC
,
LE_FUNC
,
GE_FUNC
,
GT_FUNC
,
FT_FUNC
,
LIKE_FUNC
,
NOTLIKE_FUNC
,
ISNULL_FUNC
,
ISNOTNULL_FUNC
,
COND_AND_FUNC
,
COND_OR_FUNC
,
BETWEEN
,
IN_FUNC
,
INTERVAL_FUNC
};
COND_AND_FUNC
,
COND_OR_FUNC
,
COND_XOR_FUNC
,
BETWEEN
,
IN_FUNC
,
INTERVAL_FUNC
};
enum
optimize_type
{
OPTIMIZE_NONE
,
OPTIMIZE_KEY
,
OPTIMIZE_OP
,
OPTIMIZE_NULL
};
enum
Type
type
()
const
{
return
FUNC_ITEM
;
}
virtual
enum
Functype
functype
()
const
{
return
UNKNOWN_FUNC
;
}
...
...
@@ -989,3 +989,23 @@ enum Item_cast
};
Item
*
create_func_cast
(
Item
*
a
,
Item_cast
cast_type
);
class
Item_func_bit_xor
:
public
Item_int_func
{
public:
Item_func_bit_xor
(
Item
*
a
,
Item
*
b
)
:
Item_int_func
(
a
,
b
)
{}
longlong
val_int
();
const
char
*
func_name
()
const
{
return
"^"
;
}
void
fix_length_xor_dec
()
{
unsigned_flag
=
1
;
}
};
class
Item_func_check_lock
:
public
Item_int_func
{
String
value
;
public:
Item_func_check_lock
(
Item
*
a
)
:
Item_int_func
(
a
)
{}
longlong
val_int
();
const
char
*
func_name
()
const
{
return
"check_lock"
;
}
void
fix_length_and_dec
()
{
decimals
=
0
;
max_length
=
1
;
maybe_null
=
1
;}
};
sql/lex.h
View file @
b936b25d
...
...
@@ -384,6 +384,7 @@ static SYMBOL symbols[] = {
{
"WRITE"
,
SYM
(
WRITE_SYM
),
0
,
0
},
{
"WHEN"
,
SYM
(
WHEN_SYM
),
0
,
0
},
{
"WHERE"
,
SYM
(
WHERE
),
0
,
0
},
{
"XOR"
,
SYM
(
XOR
),
0
,
0
},
{
"X509"
,
SYM
(
X509_SYM
),
0
,
0
},
{
"YEAR"
,
SYM
(
YEAR_SYM
),
0
,
0
},
{
"YEAR_MONTH"
,
SYM
(
YEAR_MONTH_SYM
),
0
,
0
},
...
...
@@ -412,6 +413,7 @@ static SYMBOL sql_functions[] = {
{
"BIT_LENGTH"
,
SYM
(
FUNC_ARG1
),
0
,
CREATE_FUNC
(
create_func_bit_length
)},
{
"CHAR_LENGTH"
,
SYM
(
FUNC_ARG1
),
0
,
CREATE_FUNC
(
create_func_char_length
)},
{
"CHARACTER_LENGTH"
,
SYM
(
FUNC_ARG1
),
0
,
CREATE_FUNC
(
create_func_char_length
)},
{
"CHECK_LOCK"
,
SYM
(
FUNC_ARG1
),
0
,
CREATE_FUNC
(
create_func_check_lock
)},
{
"COALESCE"
,
SYM
(
COALESCE
),
0
,
0
},
{
"CONCAT"
,
SYM
(
CONCAT
),
0
,
0
},
{
"CONCAT_WS"
,
SYM
(
CONCAT_WS
),
0
,
0
},
...
...
sql/sql_yacc.yy
View file @
b936b25d
...
...
@@ -339,6 +339,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token WITH
%token WRITE_SYM
%token X509_SYM
%token XOR
%token COMPRESSED_SYM
%token BIGINT
...
...
@@ -496,6 +497,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%left '-' '+'
%left '*' '/' '%'
%left NEG '~'
%left XOR
%left '^'
%right NOT
%right BINARY
...
...
@@ -1524,6 +1527,7 @@ expr_expr:
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| expr OR_OR_CONCAT expr { $$= or_or_concat($1,$3); }
| expr OR expr { $$= new Item_cond_or($1,$3); }
| expr XOR expr { $$= new Item_cond_xor($1,$3); }
| expr AND expr { $$= new Item_cond_and($1,$3); }
| expr LIKE simple_expr opt_escape { $$= new Item_func_like($1,$3,$4); }
| expr NOT LIKE simple_expr opt_escape { $$= new Item_func_not(new Item_func_like($1,$4,$5));}
...
...
@@ -1545,6 +1549,7 @@ expr_expr:
| expr '*' expr { $$= new Item_func_mul($1,$3); }
| expr '/' expr { $$= new Item_func_div($1,$3); }
| expr '|' expr { $$= new Item_func_bit_or($1,$3); }
| expr '^' expr { $$= new Item_func_bit_xor($1,$3); }
| expr '&' expr { $$= new Item_func_bit_and($1,$3); }
| expr '%' expr { $$= new Item_func_mod($1,$3); }
| expr '+' INTERVAL_SYM expr interval
...
...
@@ -1560,6 +1565,7 @@ no_in_expr:
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| no_in_expr OR_OR_CONCAT expr { $$= or_or_concat($1,$3); }
| no_in_expr OR expr { $$= new Item_cond_or($1,$3); }
| no_in_expr XOR expr { $$= new Item_cond_xor($1,$3); }
| no_in_expr AND expr { $$= new Item_cond_and($1,$3); }
| no_in_expr LIKE simple_expr opt_escape { $$= new Item_func_like($1,$3,$4); }
| no_in_expr NOT LIKE simple_expr opt_escape { $$= new Item_func_not(new Item_func_like($1,$4,$5)); }
...
...
@@ -1581,6 +1587,7 @@ no_in_expr:
| no_in_expr '*' expr { $$= new Item_func_mul($1,$3); }
| no_in_expr '/' expr { $$= new Item_func_div($1,$3); }
| no_in_expr '|' expr { $$= new Item_func_bit_or($1,$3); }
| no_in_expr '^' expr { $$= new Item_func_bit_xor($1,$3); }
| no_in_expr '&' expr { $$= new Item_func_bit_and($1,$3); }
| no_in_expr '%' expr { $$= new Item_func_mod($1,$3); }
| no_in_expr '+' INTERVAL_SYM expr interval
...
...
@@ -1601,6 +1608,7 @@ no_and_expr:
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| no_and_expr OR_OR_CONCAT expr { $$= or_or_concat($1,$3); }
| no_and_expr OR expr { $$= new Item_cond_or($1,$3); }
| no_and_expr XOR expr { $$= new Item_cond_xor($1,$3); }
| no_and_expr LIKE simple_expr opt_escape { $$= new Item_func_like($1,$3,$4); }
| no_and_expr NOT LIKE simple_expr opt_escape { $$= new Item_func_not(new Item_func_like($1,$4,$5)); }
| no_and_expr REGEXP expr { $$= new Item_func_regex($1,$3); }
...
...
@@ -1621,6 +1629,7 @@ no_and_expr:
| no_and_expr '*' expr { $$= new Item_func_mul($1,$3); }
| no_and_expr '/' expr { $$= new Item_func_div($1,$3); }
| no_and_expr '|' expr { $$= new Item_func_bit_or($1,$3); }
| no_and_expr '^' expr { $$= new Item_func_bit_xor($1,$3); }
| no_and_expr '&' expr { $$= new Item_func_bit_and($1,$3); }
| no_and_expr '%' expr { $$= new Item_func_mod($1,$3); }
| no_and_expr '+' INTERVAL_SYM expr interval
...
...
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