Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit011702f

Browse files
zmstonesstrigler
andauthored
Allow binary as the name of prepared statement (#206)
This is to avoid creating atoms when making use of prepared statements.---------Co-authored-by: Stefan Strigler <stefan@strigler.de>
1 parentb97ef3d commit011702f

File tree

3 files changed

+27
-3
lines changed

3 files changed

+27
-3
lines changed

‎src/mysql.erl‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
| {true,term()}.
6464

6565
-typestatement_id()::integer().
66-
-typestatement_name()::atom().
66+
-typestatement_name()::atom() |binary().
6767
-typestatement_ref()::statement_id() |statement_name().
6868

6969
-typedecode_decimal()::auto |binary |float |number.

‎src/mysql_conn.erl‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,11 +385,13 @@ handle_call({prepare, Query}, _From, State) ->
385385
State2=State#state{stmts=Stmts1},
386386
{reply, {ok,Id},State2}
387387
end;
388-
handle_call({prepare,Name,Query},_From,State)whenis_atom(Name)->
388+
handle_call({prepare,Name,Query},_From,State)whenis_atom(Name);
389+
is_binary(Name)->
389390
{Reply,State1}=named_prepare(Name,Query,State),
390391
{reply,Reply,State1};
391392
handle_call({unprepare,Stmt},_From,State)whenis_atom(Stmt);
392-
is_integer(Stmt)->
393+
is_integer(Stmt);
394+
is_binary(Stmt)->
393395
casedict:find(Stmt,State#state.stmts)of
394396
{ok,StmtRec} ->
395397
#state{socket=Socket,sockmod=SockMod}=State,

‎test/mysql_tests.erl‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,28 @@ common_basic_check(ExtraOpts) ->
128128
mysql:execute(Pid,foo, [])),
129129
Pid.
130130

131+
successful_connect_binary_ref_test()->
132+
%% A connection with a registered name and execute initial queries and
133+
%% create prepared statements.
134+
Pid=common_basic_check_binary_ref([{user,?user}, {password,?password}]),
135+
136+
%% Test some gen_server callbacks not tested elsewhere
137+
State=get_state(Pid),
138+
?assertMatch({ok,State},mysql_conn:code_change("0.1.0",State, [])),
139+
?assertMatch({error,_},mysql_conn:code_change("2.0.0",unknown_state, [])),
140+
common_conn_close().
141+
142+
common_basic_check_binary_ref(ExtraOpts)->
143+
Options= [{name, {local,tardis}},
144+
{queries, ["SET @foo = 'bar'","SELECT 1",
145+
"SELECT 1; SELECT 2"]},
146+
{prepare, [{<<"foo">>,"SELECT @foo"}]} |ExtraOpts],
147+
{ok,Pid}=mysql:start_link(Options),
148+
%% Check that queries and prepare has been done.
149+
?assertEqual({ok, [<<"@foo">>], [[<<"bar">>]]},
150+
mysql:execute(Pid, <<"foo">>, [])),
151+
Pid.
152+
131153
common_conn_close()->
132154
Pid=whereis(tardis),
133155
process_flag(trap_exit,true),

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp