
이미지 텍스트 확인
[%] MySQL에I Switch문 도배원 2100줄 짜리 함수가 있다
이(121.179)
2024.08.24 13.11
조회수 386
추천 0
대글16
2946
2947
int mysql
execute command(THD
thd ,
boot
first_Level)
2948
printt
sqt_parse
CCI
mysqt
exeCute
COmmanoa
mnong
2949
int res
talse;
2950
LEX *const
Lex
thd-sex;
2951
first Query
bLock
(have special meaning
for
of
non
SELEC
2952
Query_block
const
query_block
Lex->query_block;
2953
first
tabie
first
Query
block
2954
Table
ref
const
first
tabie
auerv block
>aet tabie
Uistl
MySQL 의 sql
parse.cC 라는 소스코드 파일에
mysql_execute_command() 라는 함수가 존재하눈데..
정확히 검증된건 아니지만 대총 뜯어본 결과
mysql interface 상에서 취리하면 대부분 저 함수홀 거친다
그런데 이 함수 장난이 아니다
3374
Switch
(Lex->sqL
command)
3375
case
SOLCOM PREPARE:
3376
mysqt
sql stmt
preparelthd);
3377
break;
3378
3379
case
SOLCOM EXECUTE:
3380
mysqi
sql
Stmt
executeithd;
3381
break;
3382
3383
case
SOLCOI
DEALLOCATE
PREPARE
3384
mvsqt
Sa (
Stmt
cLose(thd);
3385
break;
3386
3387
3388
case
SOLCOM EMPTY
OUERY:
3389
ok(thd)
3390
break;
3391
3392
Case
sQLCOM_HELP:
3393
res
mysqld help(thd,
Lex
>help
arg) ;
3394
break
3395
3396
case
SOLCOM_PURGE:
3397
Security
context
Sctx
thd
sSecuritv
contextu
3398
(!sctx->check
access
SUPER
ACL)
3399
sctx
>ha
qlobal
grant(STRING_WITH_LEN ( “BINLOG
ADMIN”
first)
3400
error(ER
SPECIFIC
ACCESS
DENIED ERROR ,
MYF(O
CIIPFP
RTNVor
AnMTN
3300 줄부터 switch case 문을 전개하는데..
IlIVSuL
dte
VLew
4607
break;
4608
4609
case
SQLCOM
DROP
VIEW:
4610
(check
tabi
access
(thd
DRO
ACL ,
tables
false
UINT MAX ,
false))
4611
goto
error;
4612
Conditionalty
rites
binlog
4613
res
mysql
drop view(thd
first
table);
4614
break;
4675
4616
case
SOLCOM
CREATE
TRIGGER :
4617
case
SOLCOM_DROP
TRIGGER :
4618
Conditiona
Vrites
bintog
4619
assert(ex
sqL_cmd
nutiptr)
4620
static
castsSal
cmd ddt
triaaer
common
+3(Lex-?I sqt
cmd)
4621
~sset
tablelatt
tabies
4622
4623
res
lex->mI
sql
cmd
>executelthd);
4624
break;
4625
4626
case
SOLCOM
BINLOG_BASE64_EVENT
4627
mysqt
cLient
binloq
statement(thd);
4628
break;
4629
4630
case
SOLCOM
ANALYZE:
4631
Case
SOLCOM
CHECK:
4632
Case
SOLCON
OPTIMIZE :
4633
case
SOLCOM
REPAIR:
4634
case
SOLCOM
TRUNCATE:
4635
Case
SOLCON
ALTER
TABLE:
4636
Case
SOLCON
OPEN:
4637
case
SOLCOH_HA_READ:
4638
case
SOLCOM
CLOSE
4639
asser
(first
tabie
al
tabtes
first
tabie
nutiptr);
4640
[[faltthrough]
4641
Case
SOLCOM
CREATE
SERVER :
4642
case
SOLCOM
CREATE_RESOURCE_GROUP:
어어 switch 문이 끝나질 안분다
권드리뷰터가 대충 설계만 하고 구현은 안한 부분도 존재한다
4728
case
SOLCOM
ALTER
USER :
4741
While ((tmp_user
user
1ist++) )
4843
(update
password_only
4848
4849
4850
4857
(unlikely( own
password
expired
NS
!changing
Own password))
4852
error(ER_MUST_CHANGE_PASSWORD ,
MYF
4853
goto error;
4854
4855
Conditionallv
Irites
‘binlod
4856
res
mysal
alter
user(thd
Lex->users
List
Lex-sdrop
exists);
4857
4858
Iterate
oVe
List
MFA methods ,
check
if all auth plugin methods
4859
Which need
reqistration
steps
have
completed ,
then turn OFF
server
4860
sandbox
mode
4861
4862
tmp
user
lex->users_List[0]
4863
(res
&S
self
finish
reg)
4864
if
(turn_Off_sandbox_mode( thd,
tmp_user))
return true;
4865
4866
break;
4867
4868
default:
4869
assert
Impossible
4870
‘mV
ok(thd) =
4871
break;
487)
4873
finish;
4874
4875
error:
4876
res
true;
4877
4878
finish:
4879
Restore
svstem
variables Which were
changed
SET_VAR hint.
(Lex->opt
hints
qobal
lex
opt
hints
global
>Sys
hint
4800줄이 되서야 swtich 문이 끝난다
1500줄 짜리 거대 switch 문
그리고 깨알 같은
문
5046
(!res &8 !thd- is
errorl))
statement
succeeded
5047
binlog_gtid_end
transaction
thd) =
TInalize
GTID
c1re
Cvcte
5048
‘DEBUG SYNC( thd,
persist new
state
after
statement
succeeded” ;
5049
else
(!gtid
consistency violation
state
88
the consistency
state
5050
thd->has
gtid
consistency
violation)
vas set by
the faitinc
5051
Statement
5052
atid
state
end_gti
violating
transaction
thd
jus
rol
back
5053
DEBUG SYNC( thd,
restore previous state after
statement
failed”) ;
5054
5055
5056
thd->skip_gtid_rollback
false;
5057
5058
return res
thd->1s
errorl);
5059
함수는 5000줄이 되서야 끝난다
가끔 길에 if elseif
switch 도배해농은거 욕하는 글 올라오던데
유명 거대 오른소스도 별 다름거 거 없다는거다
굳이 욕할 정도인가 싶다
many
(0)) ;
goto
goto
한 줄 요약하면 제목과 같음
나무꾼이 도끼를 연못에 빠뜨렸을 때 산신령이 도끼 하나씩 들고 나와서 묻는데
연못 안에 있던 도끼가 3천 개 5천 개라는 소리
그 “”이 도끼가 네 도끼냐
다 코드 안에 집어넣음







