@@ -84,7 +84,54 @@ namespace async_postgres::lua {
84
84
}
85
85
86
86
state->query = std::move (query);
87
+ return 0 ;
88
+ }
89
+
90
+ lua_protected_fn (prepare) {
91
+ lua->CheckType (1 , async_postgres::connection_meta);
92
+ lua->CheckType (2 , GLua::Type::String);
93
+ lua->CheckType (3 , GLua::Type::String);
94
+ lua->CheckType (4 , GLua::Type::Function);
95
+
96
+ auto state = lua_connection_state ();
97
+ if (state->query ) {
98
+ throw std::runtime_error (" query already in progress" );
99
+ }
100
+
101
+ async_postgres::CreatePreparedCommand command = {lua->GetString (2 ),
102
+ lua->GetString (3 )};
103
+ async_postgres::Query query = {std::move (command)};
104
+
105
+ if (lua->IsType (4 , GLua::Type::Function)) {
106
+ query.callback = GLua::AutoReference (lua, 4 );
107
+ }
108
+
109
+ state->query = std::move (query);
110
+ return 0 ;
111
+ }
87
112
113
+ lua_protected_fn (queryPrepared) {
114
+ lua->CheckType (1 , async_postgres::connection_meta);
115
+ lua->CheckType (2 , GLua::Type::String);
116
+ lua->CheckType (3 , GLua::Type::Table);
117
+ lua->CheckType (4 , GLua::Type::Function);
118
+
119
+ auto state = lua_connection_state ();
120
+ if (state->query ) {
121
+ throw std::runtime_error (" query already in progress" );
122
+ }
123
+
124
+ async_postgres::PreparedCommand command = {
125
+ lua->GetString (2 ),
126
+ async_postgres::array_to_params (lua, 3 ),
127
+ };
128
+ async_postgres::Query query = {std::move (command)};
129
+
130
+ if (lua->IsType (4 , GLua::Type::Function)) {
131
+ query.callback = GLua::AutoReference (lua, 4 );
132
+ }
133
+
134
+ state->query = std::move (query);
88
135
return 0 ;
89
136
}
90
137
@@ -126,6 +173,8 @@ void register_connection_mt(GLua::ILuaInterface* lua) {
126
173
register_lua_fn (__gc);
127
174
register_lua_fn (query);
128
175
register_lua_fn (queryParams);
176
+ register_lua_fn (prepare);
177
+ register_lua_fn (queryPrepared);
129
178
register_lua_fn (reset);
130
179
register_lua_fn (setNotifyCallback);
131
180
0 commit comments