@ -35,6 +35,7 @@
# include "column_namer.hh"
# include "column_namer.hh"
# include "config.h"
# include "config.h"
# include "pcrepp/pcrepp.hh"
# include "pcrepp/pcrepp.hh"
# include "scn/scn.h"
# include "sql_help.hh"
# include "sql_help.hh"
# include "sql_util.hh"
# include "sql_util.hh"
# include "vtab_module.hh"
# include "vtab_module.hh"
@ -332,31 +333,27 @@ CREATE TABLE regexp_capture_into_json (
if ( ! cap - > is_valid ( ) ) {
if ( ! cap - > is_valid ( ) ) {
yajl_gen_null ( gen ) ;
yajl_gen_null ( gen ) ;
} else {
} else {
auto * cap_start = vc . c_input - > get_substr_start ( cap ) ;
auto cap_view = vc . c_input - > to_string_view ( cap ) ;
char * cap_copy = ( char * ) alloca ( cap - > length ( ) + 1 ) ;
auto scan_int_res
long long int i_value ;
= scn : : scan_value < int64_t > ( cap_view ) ;
double d_value ;
int end_index ;
if ( scan_int_res & & scan_int_res . range ( ) . empty ( ) ) {
yajl_gen_integer ( gen , scan_int_res . value ( ) ) ;
memcpy ( cap_copy , cap_start , cap - > length ( ) ) ;
continue ;
cap_copy [ cap - > length ( ) ] = ' \0 ' ;
}
if ( sscanf ( cap_copy , " %lld%n " , & i_value , & end_index )
auto scan_float_res
= = 1
= scn : : scan_value < double > ( cap_view ) ;
& & ( end_index = = cap - > length ( ) ) )
if ( scan_float_res
{
& & scan_float_res . range ( ) . empty ( ) )
yajl_gen_integer ( gen , i_value ) ;
} else if ( sscanf ( cap_copy ,
" %lf%n " ,
& d_value ,
& end_index )
= = 1
& & ( end_index = = cap - > length ( ) ) )
{
{
yajl_gen_number ( gen , cap_start , cap - > length ( ) ) ;
yajl_gen_number (
} else {
gen , cap_view . data ( ) , cap_view . length ( ) ) ;
yajl_gen_pstring ( gen , cap_start , cap - > length ( ) ) ;
continue ;
}
}
yajl_gen_pstring (
gen , cap_view . data ( ) , cap_view . length ( ) ) ;
}
}
}
}
}
}