Skip to content

Commit

Permalink
MDEV-10411 Providing compatibility for basic PL/SQL constructs
Browse files Browse the repository at this point in the history
Part6: assignment operator

  var:= 10;
  • Loading branch information
Alexander Barkov committed Apr 5, 2017
1 parent 7e10e38 commit 892af78
Show file tree
Hide file tree
Showing 8 changed files with 609 additions and 192 deletions.
172 changes: 172 additions & 0 deletions mysql-test/suite/compat/oracle/r/sp.result
Expand Up @@ -80,3 +80,175 @@ SELECT @p1, @p2;
@p1 @p2
p1 p2new
DROP PROCEDURE p1;
# Testing Oracle-style assigment
CREATE PROCEDURE p1 (p1 OUT VARCHAR2(10))
BEGIN
p1:= 'p1new';
END;
/
SET @p1='p1';
CALL p1(@p1);
SELECT @p1;
@p1
p1new
DROP PROCEDURE p1;
# Testing that (some) keyword_sp are allowed in Oracle-style assignments
CREATE PROCEDURE p1 (action OUT INT) action:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (clob OUT INT) clob:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (enum OUT INT) enum:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (via OUT INT) via:=10;
DROP PROCEDURE p1;
# Testing keyword_directly_assignable
CREATE PROCEDURE p1 (ascii OUT INT) ascii:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (backup OUT INT) backup:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (binlog OUT INT) binlog:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (byte OUT INT) byte:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (cache OUT INT) cache:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (checksum OUT INT) checksum:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (checkpoint OUT INT) checkpoint:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_add OUT INT) column_add:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_check OUT INT) column_check:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_create OUT INT) column_create:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_delete OUT INT) column_delete:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_get OUT INT) column_get:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (commit OUT INT) commit:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (deallocate OUT INT) deallocate:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (examined OUT INT) examined:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (execute OUT INT) execute:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (flush OUT INT) flush:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (format OUT INT) format:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (get OUT INT) get:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (help OUT INT) help:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (host OUT INT) host:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (install OUT INT) install:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (option OUT INT) option:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (options OUT INT) options:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (owner OUT INT) owner:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (parser OUT INT) parser:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (port OUT INT) port:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (prepare OUT INT) prepare:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (remove OUT INT) remove:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (reset OUT INT) reset:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (restore OUT INT) restore:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (rollback OUT INT) rollback:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (security OUT INT) security:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (server OUT INT) server:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (shutdown OUT INT) shutdown:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (signed OUT INT) signed:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (socket OUT INT) socket:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (slave OUT INT) slave:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (slaves OUT INT) slaves:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (soname OUT INT) soname:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (start OUT INT) start:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (stop OUT INT) stop:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (stored OUT INT) stored:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (unicode OUT INT) unicode:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (uninstall OUT INT) uninstall:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (upgrade OUT INT) upgrade:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (wrapper OUT INT) wrapper:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (xa OUT INT) xa:=10;
DROP PROCEDURE p1;
# Testing that keyword_directly_not_assignable works in SET statements.
CREATE PROCEDURE p1 (contains OUT INT) SET contains=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (language OUT INT) SET language=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (no OUT INT) SET no=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (charset OUT INT) SET charset=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (do OUT INT) SET do=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (repair OUT INT) SET repair=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (handler OUT INT) SET handler=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (open OUT INT) SET open=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (close OUT INT) SET close=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (savepoint OUT INT) SET savepoint=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (truncate OUT INT) SET truncate=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (begin OUT INT) SET begin=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (end OUT INT) SET end=10;
DROP PROCEDURE p1;
# Testing that keyword_directly_not_assignable works in table/column names
CREATE TABLE contains (contains INT);
DROP TABLE contains;
CREATE TABLE language (language INT);
DROP TABLE language;
CREATE TABLE no (no INT);
DROP TABLE no;
CREATE TABLE charset (charset INT);
DROP TABLE charset;
CREATE TABLE do (do INT);
DROP TABLE do;
CREATE TABLE repair (repair INT);
DROP TABLE repair;
CREATE TABLE handler (handler INT);
DROP TABLE handler;
CREATE TABLE open (open INT);
DROP TABLE open;
CREATE TABLE close (close INT);
DROP TABLE close;
CREATE TABLE savepoint (savepoint INT);
DROP TABLE savepoint;
CREATE TABLE truncate (truncate INT);
DROP TABLE truncate;
CREATE TABLE begin (begin INT);
DROP TABLE begin;
CREATE TABLE end (end INT);
DROP TABLE end;
178 changes: 178 additions & 0 deletions mysql-test/suite/compat/oracle/t/sp.test
Expand Up @@ -88,3 +88,181 @@ SET @p1='p1', @p2='p2';
CALL p1(@p1, @p2);
SELECT @p1, @p2;
DROP PROCEDURE p1;

--echo # Testing Oracle-style assigment
DELIMITER /;
CREATE PROCEDURE p1 (p1 OUT VARCHAR2(10))
BEGIN
p1:= 'p1new';
END;
/
DELIMITER ;/
SET @p1='p1';
CALL p1(@p1);
SELECT @p1;
DROP PROCEDURE p1;

--echo # Testing that (some) keyword_sp are allowed in Oracle-style assignments
CREATE PROCEDURE p1 (action OUT INT) action:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (clob OUT INT) clob:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (enum OUT INT) enum:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (via OUT INT) via:=10;
DROP PROCEDURE p1;

--echo # Testing keyword_directly_assignable
CREATE PROCEDURE p1 (ascii OUT INT) ascii:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (backup OUT INT) backup:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (binlog OUT INT) binlog:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (byte OUT INT) byte:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (cache OUT INT) cache:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (checksum OUT INT) checksum:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (checkpoint OUT INT) checkpoint:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_add OUT INT) column_add:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_check OUT INT) column_check:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_create OUT INT) column_create:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_delete OUT INT) column_delete:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (column_get OUT INT) column_get:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (commit OUT INT) commit:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (deallocate OUT INT) deallocate:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (examined OUT INT) examined:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (execute OUT INT) execute:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (flush OUT INT) flush:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (format OUT INT) format:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (get OUT INT) get:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (help OUT INT) help:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (host OUT INT) host:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (install OUT INT) install:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (option OUT INT) option:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (options OUT INT) options:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (owner OUT INT) owner:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (parser OUT INT) parser:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (port OUT INT) port:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (prepare OUT INT) prepare:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (remove OUT INT) remove:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (reset OUT INT) reset:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (restore OUT INT) restore:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (rollback OUT INT) rollback:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (security OUT INT) security:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (server OUT INT) server:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (shutdown OUT INT) shutdown:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (signed OUT INT) signed:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (socket OUT INT) socket:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (slave OUT INT) slave:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (slaves OUT INT) slaves:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (soname OUT INT) soname:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (start OUT INT) start:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (stop OUT INT) stop:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (stored OUT INT) stored:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (unicode OUT INT) unicode:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (uninstall OUT INT) uninstall:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (upgrade OUT INT) upgrade:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (wrapper OUT INT) wrapper:=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (xa OUT INT) xa:=10;
DROP PROCEDURE p1;


--echo # Testing that keyword_directly_not_assignable works in SET statements.
CREATE PROCEDURE p1 (contains OUT INT) SET contains=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (language OUT INT) SET language=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (no OUT INT) SET no=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (charset OUT INT) SET charset=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (do OUT INT) SET do=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (repair OUT INT) SET repair=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (handler OUT INT) SET handler=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (open OUT INT) SET open=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (close OUT INT) SET close=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (savepoint OUT INT) SET savepoint=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (truncate OUT INT) SET truncate=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (begin OUT INT) SET begin=10;
DROP PROCEDURE p1;
CREATE PROCEDURE p1 (end OUT INT) SET end=10;
DROP PROCEDURE p1;

--echo # Testing that keyword_directly_not_assignable works in table/column names
CREATE TABLE contains (contains INT);
DROP TABLE contains;
CREATE TABLE language (language INT);
DROP TABLE language;
CREATE TABLE no (no INT);
DROP TABLE no;
CREATE TABLE charset (charset INT);
DROP TABLE charset;
CREATE TABLE do (do INT);
DROP TABLE do;
CREATE TABLE repair (repair INT);
DROP TABLE repair;
CREATE TABLE handler (handler INT);
DROP TABLE handler;
CREATE TABLE open (open INT);
DROP TABLE open;
CREATE TABLE close (close INT);
DROP TABLE close;
CREATE TABLE savepoint (savepoint INT);
DROP TABLE savepoint;
CREATE TABLE truncate (truncate INT);
DROP TABLE truncate;
CREATE TABLE begin (begin INT);
DROP TABLE begin;
CREATE TABLE end (end INT);
DROP TABLE end;
11 changes: 11 additions & 0 deletions sql/set_var.cc
Expand Up @@ -686,6 +686,17 @@ sys_var *intern_find_sys_var(const char *str, uint length)
}


bool find_sys_var_null_base(THD *thd, struct sys_var_with_base *tmp)
{
tmp->var= find_sys_var(thd, tmp->base_name.str, tmp->base_name.length);

if (tmp->var != NULL)
tmp->base_name= null_lex_str;

return thd->is_error();
}


/**
Execute update of all variables.
Expand Down
1 change: 1 addition & 0 deletions sql/set_var.h
Expand Up @@ -391,6 +391,7 @@ SHOW_VAR* enumerate_sys_vars(THD *thd, bool sorted, enum enum_var_type type);
int fill_sysvars(THD *thd, TABLE_LIST *tables, COND *cond);

sys_var *find_sys_var(THD *thd, const char *str, size_t length=0);
bool find_sys_var_null_base(THD *thd, struct sys_var_with_base *tmp);
int sql_set_variables(THD *thd, List<set_var_base> *var_list, bool free);

#define SYSVAR_AUTOSIZE(VAR,VAL) \
Expand Down

0 comments on commit 892af78

Please sign in to comment.