@@ -77,8 +77,6 @@ defmodule MyXQL.Connection do
77
77
if cached_query = queries_get ( state , query ) do
78
78
{ :ok , cached_query , % { state | last_query: cached_query } }
79
79
else
80
- state = maybe_close ( query , state )
81
-
82
80
case prepare ( query , state ) do
83
81
{ :ok , query , state } ->
84
82
{ :ok , query , state }
@@ -99,8 +97,6 @@ defmodule MyXQL.Connection do
99
97
100
98
@ impl true
101
99
def handle_execute ( % Query { } = query , params , _opts , state ) do
102
- state = maybe_close ( query , state )
103
-
104
100
with { :ok , query , state } <- maybe_reprepare ( query , state ) ,
105
101
result =
106
102
Client . com_stmt_execute (
@@ -464,8 +460,8 @@ defmodule MyXQL.Connection do
464
460
defp cache_key ( % MyXQL.Query { cache: :reference , ref: ref } ) , do: ref
465
461
defp cache_key ( % MyXQL.Query { cache: :statement , statement: statement } ) , do: statement
466
462
467
- defp prepare ( % Query { ref: ref , statement: statement } = query , state ) when is_reference ( ref ) do
468
- case Client . com_stmt_prepare ( state . client , statement ) do
463
+ defp prepare ( % Query { ref: ref } = query , state ) when is_reference ( ref ) do
464
+ case prepare_maybe_close ( query , state ) do
469
465
{ :ok , com_stmt_prepare_ok ( statement_id: statement_id , num_params: num_params ) } ->
470
466
query = % { query | num_params: num_params , statement_id: statement_id }
471
467
queries_put ( state , query )
@@ -476,6 +472,19 @@ defmodule MyXQL.Connection do
476
472
end
477
473
end
478
474
475
+ def prepare_maybe_close (
476
+ % { ref: newref } = query ,
477
+ % { prepare: :unnamed , last_query: % { ref: oldref } = last_query } = state
478
+ )
479
+ when last_query != nil and oldref != newref do
480
+ queries_delete ( state , state . last_query )
481
+ Client . com_stmt_close_prepare ( state . client , query . statement , last_query . statement_id )
482
+ end
483
+
484
+ def prepare_maybe_close ( query , state ) do
485
+ Client . com_stmt_prepare ( state . client , query . statement )
486
+ end
487
+
479
488
defp maybe_reprepare ( % { ref: ref } , % { last_query: % { ref: ref } } = state ) do
480
489
{ :ok , state . last_query , state }
481
490
end
@@ -494,15 +503,6 @@ defmodule MyXQL.Connection do
494
503
end
495
504
end
496
505
497
- defp maybe_close ( % { ref: ref } , % { last_query: % { ref: ref } } = state ) , do: state
498
-
499
- defp maybe_close ( _query , % { prepare: :unnamed , last_query: last_query } = state )
500
- when last_query != nil do
501
- close ( last_query , state )
502
- end
503
-
504
- defp maybe_close ( _query , state ) , do: state
505
-
506
506
defp close ( query , state ) do
507
507
:ok = Client . com_stmt_close ( state . client , query . statement_id )
508
508
queries_delete ( state , query )
0 commit comments