@@ -183,7 +183,12 @@ lua_mysql_field_type_to_string(enum enum_field_types type)
183183 return mysql_field_type_strs [hash ];
184184}
185185
186- /* Push value retrieved from mysql field to lua stack */
186+ /**
187+ * Push value retrieved from mysql field to lua stack.
188+ *
189+ * When `data` is NULL, `field` and len` parameters are
190+ * ignored and Lua nil or LuaJIT FFI NULL is pushed.
191+ */
187192static void
188193lua_mysql_push_value (struct lua_State * L , MYSQL_FIELD * field , void * data ,
189194 unsigned long len , int keep_null )
@@ -263,11 +268,8 @@ lua_mysql_fetch_result(struct lua_State *L)
263268 unsigned long * len = mysql_fetch_lengths (result );
264269 unsigned col_no ;
265270 for (col_no = 0 ; col_no < num_fields ; ++ col_no ) {
266- void * data = conn -> keep_null == 1 && !row [col_no ] ? NULL
267- : row [col_no ];
268- lua_mysql_push_value (L , fields + col_no , data ,
269- data == NULL ? 0 : len [col_no ],
270- conn -> keep_null );
271+ lua_mysql_push_value (L , fields + col_no , row [col_no ],
272+ len [col_no ], conn -> keep_null );
271273 if (conn -> use_numeric_result ) {
272274 /* Assign to a column number. */
273275 lua_rawseti (L , -2 , col_no + 1 );
@@ -380,14 +382,11 @@ lua_mysql_stmt_push_row(struct lua_State *L)
380382 lua_newtable (L );
381383 unsigned col_no ;
382384 for (col_no = 0 ; col_no < col_count ; ++ col_no ) {
383- void * data = NULL ;
384- if (* results [col_no ].is_null && keep_null == 0 )
385- continue ;
386- else if (!(* results [col_no ].is_null ))
387- data = results [col_no ].buffer ;
385+ void * data = * results [col_no ].is_null ? NULL :
386+ results [col_no ].buffer ;
388387 lua_pushstring (L , fields [col_no ].name );
389- lua_mysql_push_value (L , fields + col_no , data , data == NULL ? 0
390- : * results [col_no ].length , keep_null );
388+ lua_mysql_push_value (L , fields + col_no , data ,
389+ * results [col_no ].length , keep_null );
391390 lua_settable (L , -3 );
392391 }
393392 return 1 ;
0 commit comments