1
0
mirror of https://github.com/MariaDB/server.git synced 2026-10-23 18:49:29 +03:00
Commit Graph

13 Commits

Author SHA1 Message Date
Sergei Golubchik
be67aff19b Don't implicitly search in CURRENT_SCHEMA
the intention was not to, but some code paths weren't fixed yet
2026-02-06 17:46:52 +01:00
Sergei Golubchik
13c5cab5cf change Sql_path::from_text() to take a String, not LEX_CSTRING
* use str->c_ptr() for the error message
* pass correct charset
* remove redundant parsing Table_triggers_list::check_n_load
2026-02-06 17:46:52 +01:00
Sergei Golubchik
8b1ccf6e82 fix name resolution of name1.name2()
only search in thd->db if the path includes CURRENT_SCHEMA

Also, fix a bug with recursive function calls.
2026-02-06 17:46:52 +01:00
Sergei Golubchik
22591551fb fix --path to work
complex object sysvars (plugins, time zone, path) cannot be
set by my_getopt, they have to use NO_CMD_LINE and special
code in mysqld.cc
2026-02-06 17:46:51 +01:00
Sergei Golubchik
3b14490e58 bug: current_schema is not current_schema
quoted `current_schema` is literally a schema name and must
but treated as such. because Sql_path stores all names unquoted
let's store the current_schema as an empty name, length=0.
No valid schema name can be empty.
2026-02-06 17:46:51 +01:00
Sergei Golubchik
69f401bdb6 allocate Sql_path in one memory chunk, not one per schema
because it's always allocated and freed as a whole, there is
no operation "replace one name in the middle of the path"

this needed a reworked parser to create the whole list
of names, not append one name at a time.

Fixed a bug where Sql_path::from_text() pretended it can take
a string in any charset, but was always implicitly
assuming it's in my_charset_utf8mb3_general_ci.
2026-02-06 17:46:51 +01:00
Sergei Golubchik
5b0818ee63 cleanup
* rename to follow the standard vprintf name convention
* remove `(LEX_CSTRING*) &lex_string` casts
* remove some redundant casts too
* LEX_CSTRING -> Lex_ident_db in path
* Hash_set<Sroutine_hash_entry>
* move assert out of the loop
* some comments and whitespace changes
2026-02-06 17:46:51 +01:00
Sergei Golubchik
1fa182723d do NOT prefer itself in seemingly recursive calls, follow the path 2026-02-06 17:46:51 +01:00
Sergei Golubchik
6e086ce2a3 remove Sql_path_stack and Sql_path_push
don't create a permanent stack of paths on the heap and in THD.

Do it on the stack like for sql_mode, sctx, abort_on_warning, and
other THD properties that often need to be changed temporarily.

Fix Sql_path constructor.
2026-02-06 17:46:51 +01:00
Sergei Golubchik
11210a2c05 PATH is not a chistic, it's like sql_mode, remembered implicitly per routine 2026-02-06 17:46:50 +01:00
Sergei Golubchik
d1fd168d9c remove unused arguments 2026-02-06 17:46:50 +01:00
Sergei Golubchik
8260be6408 don't backtick-quote CURRENT_SCHEMA 2026-02-06 17:46:50 +01:00
sts-kokseng.wong
19fd3c79b0 MDEV-34391 SET PATH statement
Definition
==========
Implement the SET PATH statement.
```
SET PATH 'schema1, schema2, schema3';
```

Function
--------
In MariaDB, the SQL-path will also be used to lookup packages in
package routine invocations, so the following script:

  SET PATH 'sys';
  SELECT UTL_ENCODE.BASE64_DECODE('data');

invokes SYS.UTL_ENCODE.BASE64_DECODE('data'), i.e. the function
BASE64_DECODE() in the packge UTL_ENCODE in the database SYS
(if such package and package routine exist).

MariaDB implementation details
------------------------------
The ticket's requirement stated the grammar should support delimited
identifiers with backticks or double quotes within the string quote,
ie: the single tick. A simple parser was implemented to handle this
requirement in Sql_path::from_text.

Only 16 schemas are supported per session - we do not want too many
schemas in the path anyway since it will impact performance. This also
means that the path cache is a simple static array for easier memory
management.
2026-02-06 17:46:50 +01:00