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
0ce93194
Commit
0ce93194
authored
Aug 13, 2004
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
skip resolving field in table list if table list is not accessable due to groupping (BUG#4814)
parent
d372284d
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
122 additions
and
56 deletions
+122
-56
mysql-test/r/func_gconcat.result
mysql-test/r/func_gconcat.result
+15
-9
mysql-test/r/subselect.result
mysql-test/r/subselect.result
+22
-0
mysql-test/t/func_gconcat.test
mysql-test/t/func_gconcat.test
+3
-3
mysql-test/t/subselect.test
mysql-test/t/subselect.test
+11
-0
sql/item.cc
sql/item.cc
+46
-24
sql/item_subselect.cc
sql/item_subselect.cc
+3
-1
sql/item_subselect.h
sql/item_subselect.h
+2
-0
sql/mysql_priv.h
sql/mysql_priv.h
+7
-0
sql/sql_lex.cc
sql/sql_lex.cc
+1
-1
sql/sql_lex.h
sql/sql_lex.h
+0
-6
sql/sql_yacc.yy
sql/sql_yacc.yy
+12
-12
No files found.
mysql-test/r/func_gconcat.result
View file @
0ce93194
...
@@ -285,15 +285,21 @@ insert into t2 values (1, 5), (2, 4), (3, 3), (3,3);
...
@@ -285,15 +285,21 @@ insert into t2 values (1, 5), (2, 4), (3, 3), (3,3);
select group_concat(c) from t1;
select group_concat(c) from t1;
group_concat(c)
group_concat(c)
2,3,4,5
2,3,4,5
select group_concat(c order by (select c from t2 where t2.a=t1.a limit 1)) as grp from t1;
select t1.a, group_concat(c order by (select c from t2 where t2.a=t1.a limit 1)) as grp from t1 group by 1;
grp
a grp
5,4,3,2
1 2
select group_concat(c order by (select mid(group_concat(c order by a),1,5) from t2 where t2.a=t1.a)) as grp from t1;
2 4,3
grp
3 5
5,4,3,2
select t1.a, group_concat(c order by (select mid(group_concat(c order by a),1,5) from t2 where t2.a=t1.a)) as grp from t1 group by 1;
select group_concat(c order by (select mid(group_concat(c order by a),1,5) from t2 where t2.a=t1.a) desc) as grp from t1;
a grp
grp
1 2
2,4,3,5
2 4,3
3 5
select t1.a, group_concat(c order by (select mid(group_concat(c order by a),1,5) from t2 where t2.a=t1.a) desc) as grp from t1 group by 1;
a grp
1 2
2 4,3
3 5
select a,c,(select group_concat(c order by a) from t2 where a=t1.a) as grp from t1 order by grp;
select a,c,(select group_concat(c order by a) from t2 where a=t1.a) as grp from t1 order by grp;
a c grp
a c grp
3 5 3,3
3 5 3,3
...
...
mysql-test/r/subselect.result
View file @
0ce93194
...
@@ -1920,3 +1920,25 @@ aid bid
...
@@ -1920,3 +1920,25 @@ aid bid
1 1
1 1
2 1
2 1
drop table t1,t2;
drop table t1,t2;
CREATE TABLE t1 (howmanyvalues bigint, avalue int);
INSERT INTO t1 VALUES (1, 1),(2, 1),(2, 2),(3, 1),(3, 2),(3, 3),(4, 1),(4, 2),(4, 3),(4, 4);
SELECT howmanyvalues, count(*) from t1 group by howmanyvalues;
howmanyvalues count(*)
1 1
2 2
3 3
4 4
SELECT a.howmanyvalues, (SELECT count(*) from t1 b where b.howmanyvalues = a.howmanyvalues) as mycount from t1 a group by a.howmanyvalues;
howmanyvalues mycount
1 1
2 2
3 3
4 4
CREATE INDEX t1_howmanyvalues_idx ON t1 (howmanyvalues);
SELECT a.howmanyvalues, (SELECT count(*) from t1 b where b.howmanyvalues+1 = a.howmanyvalues+1) as mycount from t1 a group by a.howmanyvalues;
howmanyvalues mycount
1 1
2 2
3 3
4 4
drop table t1;
mysql-test/t/func_gconcat.test
View file @
0ce93194
...
@@ -168,10 +168,10 @@ insert into t1 values (1, 2), (2, 3), (2, 4), (3, 5);
...
@@ -168,10 +168,10 @@ insert into t1 values (1, 2), (2, 3), (2, 4), (3, 5);
create
table
t2
(
a
int
,
c
int
);
create
table
t2
(
a
int
,
c
int
);
insert
into
t2
values
(
1
,
5
),
(
2
,
4
),
(
3
,
3
),
(
3
,
3
);
insert
into
t2
values
(
1
,
5
),
(
2
,
4
),
(
3
,
3
),
(
3
,
3
);
select
group_concat
(
c
)
from
t1
;
select
group_concat
(
c
)
from
t1
;
select
group_concat
(
c
order
by
(
select
c
from
t2
where
t2
.
a
=
t1
.
a
limit
1
))
as
grp
from
t
1
;
select
t1
.
a
,
group_concat
(
c
order
by
(
select
c
from
t2
where
t2
.
a
=
t1
.
a
limit
1
))
as
grp
from
t1
group
by
1
;
select
group_concat
(
c
order
by
(
select
mid
(
group_concat
(
c
order
by
a
),
1
,
5
)
from
t2
where
t2
.
a
=
t1
.
a
))
as
grp
from
t
1
;
select
t1
.
a
,
group_concat
(
c
order
by
(
select
mid
(
group_concat
(
c
order
by
a
),
1
,
5
)
from
t2
where
t2
.
a
=
t1
.
a
))
as
grp
from
t1
group
by
1
;
select
group_concat
(
c
order
by
(
select
mid
(
group_concat
(
c
order
by
a
),
1
,
5
)
from
t2
where
t2
.
a
=
t1
.
a
)
desc
)
as
grp
from
t
1
;
select
t1
.
a
,
group_concat
(
c
order
by
(
select
mid
(
group_concat
(
c
order
by
a
),
1
,
5
)
from
t2
where
t2
.
a
=
t1
.
a
)
desc
)
as
grp
from
t1
group
by
1
;
# The following returns random results as we are sorting on blob addresses
# The following returns random results as we are sorting on blob addresses
# select group_concat(c order by (select group_concat(c order by a) from t2 where t2.a=t1.a)) as grp from t1;
# select group_concat(c order by (select group_concat(c order by a) from t2 where t2.a=t1.a)) as grp from t1;
...
...
mysql-test/t/subselect.test
View file @
0ce93194
...
@@ -1238,3 +1238,14 @@ alter table t2 drop key KEY1;
...
@@ -1238,3 +1238,14 @@ alter table t2 drop key KEY1;
alter
table
t2
add
primary
key
(
bid
,
aid
);
alter
table
t2
add
primary
key
(
bid
,
aid
);
select
*
from
t1
where
t1
.
aid
not
in
(
select
aid
from
t2
where
bid
=
t1
.
bid
);
select
*
from
t1
where
t1
.
aid
not
in
(
select
aid
from
t2
where
bid
=
t1
.
bid
);
drop
table
t1
,
t2
;
drop
table
t1
,
t2
;
#
# resolving fields of grouped outer SELECT
#
CREATE
TABLE
t1
(
howmanyvalues
bigint
,
avalue
int
);
INSERT
INTO
t1
VALUES
(
1
,
1
),(
2
,
1
),(
2
,
2
),(
3
,
1
),(
3
,
2
),(
3
,
3
),(
4
,
1
),(
4
,
2
),(
4
,
3
),(
4
,
4
);
SELECT
howmanyvalues
,
count
(
*
)
from
t1
group
by
howmanyvalues
;
SELECT
a
.
howmanyvalues
,
(
SELECT
count
(
*
)
from
t1
b
where
b
.
howmanyvalues
=
a
.
howmanyvalues
)
as
mycount
from
t1
a
group
by
a
.
howmanyvalues
;
CREATE
INDEX
t1_howmanyvalues_idx
ON
t1
(
howmanyvalues
);
SELECT
a
.
howmanyvalues
,
(
SELECT
count
(
*
)
from
t1
b
where
b
.
howmanyvalues
+
1
=
a
.
howmanyvalues
+
1
)
as
mycount
from
t1
a
group
by
a
.
howmanyvalues
;
drop
table
t1
;
sql/item.cc
View file @
0ce93194
...
@@ -60,10 +60,10 @@ Item::Item():
...
@@ -60,10 +60,10 @@ Item::Item():
*/
*/
if
(
thd
->
lex
->
current_select
)
if
(
thd
->
lex
->
current_select
)
{
{
SELECT_LEX_NODE
::
enum_parsing_place
place
=
enum_parsing_place
place
=
thd
->
lex
->
current_select
->
parsing_place
;
thd
->
lex
->
current_select
->
parsing_place
;
if
(
place
==
SELECT_L
EX_NODE
::
SELECT_L
IST
||
if
(
place
==
SELECT_LIST
||
place
==
SELECT_LEX_NODE
::
IN_HAVING
)
place
==
IN_HAVING
)
thd
->
lex
->
current_select
->
select_n_having_items
++
;
thd
->
lex
->
current_select
->
select_n_having_items
++
;
}
}
}
}
...
@@ -1228,12 +1228,25 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
...
@@ -1228,12 +1228,25 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
table_list
=
(
last
=
sl
)
->
get_table_list
();
table_list
=
(
last
=
sl
)
->
get_table_list
();
if
(
sl
->
resolve_mode
==
SELECT_LEX
::
INSERT_MODE
&&
table_list
)
if
(
sl
->
resolve_mode
==
SELECT_LEX
::
INSERT_MODE
&&
table_list
)
{
{
// it is primary INSERT st_select_lex => skip first table resolving
/*
it is primary INSERT st_select_lex => skip first table
resolving
*/
table_list
=
table_list
->
next
;
table_list
=
table_list
->
next
;
}
}
Item_subselect
*
prev_subselect_item
=
prev_unit
->
item
;
Item_subselect
*
prev_subselect_item
=
prev_unit
->
item
;
if
((
tmp
=
find_field_in_tables
(
thd
,
this
,
enum_parsing_place
place
=
prev_subselect_item
->
parsing_place
;
/*
check table fields only if subquery used somewhere out of HAVING
or SELECT list or outer SELECT do not use groupping (i.e. tables
are accessable)
*/
if
(((
place
!=
IN_HAVING
&&
place
!=
SELECT_LIST
)
||
(
sl
->
with_sum_func
==
0
&&
sl
->
group_list
.
elements
==
0
))
&&
(
tmp
=
find_field_in_tables
(
thd
,
this
,
table_list
,
&
where
,
table_list
,
&
where
,
0
))
!=
not_found_field
)
0
))
!=
not_found_field
)
{
{
...
@@ -1901,7 +1914,17 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
...
@@ -1901,7 +1914,17 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
// it is primary INSERT st_select_lex => skip first table resolving
// it is primary INSERT st_select_lex => skip first table resolving
table_list
=
table_list
->
next
;
table_list
=
table_list
->
next
;
}
}
if
((
tmp
=
find_field_in_tables
(
thd
,
this
,
enum_parsing_place
place
=
prev_subselect_item
->
parsing_place
;
/*
check table fields only if subquery used somewhere out of HAVING
or SELECT list or outer SELECT do not use groupping (i.e. tables
are accessable)
*/
if
(((
place
!=
IN_HAVING
&&
place
!=
SELECT_LIST
)
||
(
sl
->
with_sum_func
==
0
&&
sl
->
group_list
.
elements
==
0
))
&&
(
tmp
=
find_field_in_tables
(
thd
,
this
,
table_list
,
&
where
,
table_list
,
&
where
,
0
))
!=
not_found_field
)
0
))
!=
not_found_field
)
{
{
...
@@ -1909,7 +1932,6 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
...
@@ -1909,7 +1932,6 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
prev_subselect_item
->
const_item_cache
=
0
;
prev_subselect_item
->
const_item_cache
=
0
;
break
;
break
;
}
}
// Reference is not found => depend from outer (or just error)
// Reference is not found => depend from outer (or just error)
prev_subselect_item
->
used_tables_cache
|=
OUTER_REF_TABLE_BIT
;
prev_subselect_item
->
used_tables_cache
|=
OUTER_REF_TABLE_BIT
;
prev_subselect_item
->
const_item_cache
=
0
;
prev_subselect_item
->
const_item_cache
=
0
;
...
...
sql/item_subselect.cc
View file @
0ce93194
...
@@ -63,12 +63,14 @@ void Item_subselect::init(st_select_lex *select_lex,
...
@@ -63,12 +63,14 @@ void Item_subselect::init(st_select_lex *select_lex,
=> we do not copy old_engine here
=> we do not copy old_engine here
*/
*/
engine
=
unit
->
item
->
engine
;
engine
=
unit
->
item
->
engine
;
parsing_place
=
unit
->
item
->
parsing_place
;
unit
->
item
->
engine
=
0
;
unit
->
item
->
engine
=
0
;
unit
->
item
=
this
;
unit
->
item
=
this
;
engine
->
change_item
(
this
,
result
);
engine
->
change_item
(
this
,
result
);
}
}
else
else
{
{
parsing_place
=
unit
->
outer_select
()
->
parsing_place
;
if
(
select_lex
->
next_select
())
if
(
select_lex
->
next_select
())
engine
=
new
subselect_union_engine
(
unit
,
result
,
this
);
engine
=
new
subselect_union_engine
(
unit
,
result
,
this
);
else
else
...
@@ -76,7 +78,7 @@ void Item_subselect::init(st_select_lex *select_lex,
...
@@ -76,7 +78,7 @@ void Item_subselect::init(st_select_lex *select_lex,
}
}
{
{
SELECT_LEX
*
upper
=
unit
->
outer_select
();
SELECT_LEX
*
upper
=
unit
->
outer_select
();
if
(
upper
->
parsing_place
==
SELECT_LEX_NODE
::
IN_HAVING
)
if
(
upper
->
parsing_place
==
IN_HAVING
)
upper
->
subquery_in_having
=
1
;
upper
->
subquery_in_having
=
1
;
}
}
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
...
...
sql/item_subselect.h
View file @
0ce93194
...
@@ -50,6 +50,8 @@ class Item_subselect :public Item_result_field
...
@@ -50,6 +50,8 @@ class Item_subselect :public Item_result_field
table_map
used_tables_cache
;
table_map
used_tables_cache
;
/* allowed number of columns (1 for single value subqueries) */
/* allowed number of columns (1 for single value subqueries) */
uint
max_columns
;
uint
max_columns
;
/* where subquery is placed */
enum_parsing_place
parsing_place
;
/* work with 'substitution' */
/* work with 'substitution' */
bool
have_to_be_excluded
;
bool
have_to_be_excluded
;
/* cache of constant state */
/* cache of constant state */
...
...
sql/mysql_priv.h
View file @
0ce93194
...
@@ -293,6 +293,13 @@ void debug_sync_point(const char* lock_name, uint lock_timeout);
...
@@ -293,6 +293,13 @@ void debug_sync_point(const char* lock_name, uint lock_timeout);
*/
*/
#define MAX_DATE_REP_LENGTH 30
#define MAX_DATE_REP_LENGTH 30
enum
enum_parsing_place
{
NO_MATTER
,
IN_HAVING
,
SELECT_LIST
};
struct
st_table
;
struct
st_table
;
class
THD
;
class
THD
;
class
Statement
;
class
Statement
;
...
...
sql/sql_lex.cc
View file @
0ce93194
...
@@ -1017,7 +1017,7 @@ void st_select_lex::init_query()
...
@@ -1017,7 +1017,7 @@ void st_select_lex::init_query()
select_n_having_items
=
0
;
select_n_having_items
=
0
;
prep_where
=
0
;
prep_where
=
0
;
subquery_in_having
=
explicit_limit
=
0
;
subquery_in_having
=
explicit_limit
=
0
;
parsing_place
=
SELECT_LEX_NODE
::
NO_MATTER
;
parsing_place
=
NO_MATTER
;
}
}
void
st_select_lex
::
init_select
()
void
st_select_lex
::
init_select
()
...
...
sql/sql_lex.h
View file @
0ce93194
...
@@ -220,12 +220,6 @@ class st_select_lex_node {
...
@@ -220,12 +220,6 @@ class st_select_lex_node {
*
master
,
*
slave
,
/* vertical links */
*
master
,
*
slave
,
/* vertical links */
*
link_next
,
**
link_prev
;
/* list of whole SELECT_LEX */
*
link_next
,
**
link_prev
;
/* list of whole SELECT_LEX */
public:
public:
enum
enum_parsing_place
{
NO_MATTER
,
IN_HAVING
,
SELECT_LIST
};
ulong
options
;
ulong
options
;
/*
/*
...
...
sql/sql_yacc.yy
View file @
0ce93194
...
@@ -1113,11 +1113,11 @@ create_select:
...
@@ -1113,11 +1113,11 @@ create_select:
lex->sql_command= SQLCOM_REPLACE_SELECT;
lex->sql_command= SQLCOM_REPLACE_SELECT;
lex->current_select->table_list.save_and_clear(&lex->save_list);
lex->current_select->table_list.save_and_clear(&lex->save_list);
mysql_init_select(lex);
mysql_init_select(lex);
lex->current_select->parsing_place= SELECT_L
EX_NODE::SELECT_L
IST;
lex->current_select->parsing_place= SELECT_LIST;
}
}
select_options select_item_list
select_options select_item_list
{
{
Select->parsing_place=
SELECT_LEX_NODE::
NO_MATTER;
Select->parsing_place= NO_MATTER;
}
}
opt_select_from
opt_select_from
{ Lex->current_select->table_list.push_front(&Lex->save_list); }
{ Lex->current_select->table_list.push_front(&Lex->save_list); }
...
@@ -2370,11 +2370,11 @@ select_part2:
...
@@ -2370,11 +2370,11 @@ select_part2:
lex->lock_option= TL_READ;
lex->lock_option= TL_READ;
if (sel->linkage != UNION_TYPE)
if (sel->linkage != UNION_TYPE)
mysql_init_select(lex);
mysql_init_select(lex);
lex->current_select->parsing_place= SELECT_L
EX_NODE::SELECT_L
IST;
lex->current_select->parsing_place= SELECT_LIST;
}
}
select_options select_item_list
select_options select_item_list
{
{
Select->parsing_place=
SELECT_LEX_NODE::
NO_MATTER;
Select->parsing_place= NO_MATTER;
}
}
select_into select_lock_type;
select_into select_lock_type;
...
@@ -3438,11 +3438,11 @@ select_derived:
...
@@ -3438,11 +3438,11 @@ select_derived:
YYABORT;
YYABORT;
mysql_init_select(lex);
mysql_init_select(lex);
lex->current_select->linkage= DERIVED_TABLE_TYPE;
lex->current_select->linkage= DERIVED_TABLE_TYPE;
lex->current_select->parsing_place= SELECT_L
EX_NODE::SELECT_L
IST;
lex->current_select->parsing_place= SELECT_LIST;
}
}
select_options select_item_list
select_options select_item_list
{
{
Select->parsing_place=
SELECT_LEX_NODE::
NO_MATTER;
Select->parsing_place= NO_MATTER;
}
}
opt_select_from union_opt
opt_select_from union_opt
;
;
...
@@ -3572,13 +3572,13 @@ having_clause:
...
@@ -3572,13 +3572,13 @@ having_clause:
/* empty */
/* empty */
| HAVING
| HAVING
{
{
Select->parsing_place=
SELECT_LEX_NODE::
IN_HAVING;
Select->parsing_place= IN_HAVING;
}
}
expr
expr
{
{
SELECT_LEX *sel= Select;
SELECT_LEX *sel= Select;
sel->having= $3;
sel->having= $3;
sel->parsing_place=
SELECT_LEX_NODE::
NO_MATTER;
sel->parsing_place= NO_MATTER;
if ($3)
if ($3)
$3->top_level_item();
$3->top_level_item();
}
}
...
@@ -4813,7 +4813,7 @@ simple_ident:
...
@@ -4813,7 +4813,7 @@ simple_ident:
ident
ident
{
{
SELECT_LEX *sel=Select;
SELECT_LEX *sel=Select;
$$= (sel->parsing_place !=
SELECT_LEX_NODE::
IN_HAVING ||
$$= (sel->parsing_place != IN_HAVING ||
sel->get_in_sum_expr() > 0) ?
sel->get_in_sum_expr() > 0) ?
(Item*) new Item_field(NullS,NullS,$1.str) :
(Item*) new Item_field(NullS,NullS,$1.str) :
(Item*) new Item_ref(0,0, NullS,NullS,$1.str);
(Item*) new Item_ref(0,0, NullS,NullS,$1.str);
...
@@ -4829,7 +4829,7 @@ simple_ident:
...
@@ -4829,7 +4829,7 @@ simple_ident:
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
MYF(0), $1.str, thd->where);
MYF(0), $1.str, thd->where);
}
}
$$= (sel->parsing_place !=
SELECT_LEX_NODE::
IN_HAVING ||
$$= (sel->parsing_place != IN_HAVING ||
sel->get_in_sum_expr() > 0) ?
sel->get_in_sum_expr() > 0) ?
(Item*) new Item_field(NullS,$1.str,$3.str) :
(Item*) new Item_field(NullS,$1.str,$3.str) :
(Item*) new Item_ref(0,0,NullS,$1.str,$3.str);
(Item*) new Item_ref(0,0,NullS,$1.str,$3.str);
...
@@ -4845,7 +4845,7 @@ simple_ident:
...
@@ -4845,7 +4845,7 @@ simple_ident:
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
MYF(0), $2.str, thd->where);
MYF(0), $2.str, thd->where);
}
}
$$= (sel->parsing_place !=
SELECT_LEX_NODE::
IN_HAVING ||
$$= (sel->parsing_place != IN_HAVING ||
sel->get_in_sum_expr() > 0) ?
sel->get_in_sum_expr() > 0) ?
(Item*) new Item_field(NullS,$2.str,$4.str) :
(Item*) new Item_field(NullS,$2.str,$4.str) :
(Item*) new Item_ref(0,0,NullS,$2.str,$4.str);
(Item*) new Item_ref(0,0,NullS,$2.str,$4.str);
...
@@ -4861,7 +4861,7 @@ simple_ident:
...
@@ -4861,7 +4861,7 @@ simple_ident:
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
ER(ER_TABLENAME_NOT_ALLOWED_HERE),
MYF(0), $3.str, thd->where);
MYF(0), $3.str, thd->where);
}
}
$$= (sel->parsing_place !=
SELECT_LEX_NODE::
IN_HAVING ||
$$= (sel->parsing_place != IN_HAVING ||
sel->get_in_sum_expr() > 0) ?
sel->get_in_sum_expr() > 0) ?
(Item*) new Item_field((YYTHD->client_capabilities &
(Item*) new Item_field((YYTHD->client_capabilities &
CLIENT_NO_SCHEMA ? NullS : $1.str),
CLIENT_NO_SCHEMA ? NullS : $1.str),
...
...
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