@@ -2764,9 +2764,10 @@ fn translate_without_rowid_insert(
27642764 } ) ?;
27652765
27662766 tracing:: debug!(
2767- "Found primary key index '{}' with root page {}" ,
2767+ "Found WITHOUT ROWID primary key index '{}' with root page {} and {} key columns. " ,
27682768 pk_index. name,
2769- pk_index. root_page
2769+ pk_index. root_page,
2770+ pk_index. n_key_col
27702771 ) ;
27712772
27722773 let pk_cursor_id = program. alloc_cursor_index ( None , pk_index) ?;
@@ -2806,16 +2807,15 @@ fn translate_without_rowid_insert(
28062807
28072808 emit_notnulls ( & mut program, & ctx, & insertion) ;
28082809
2809- let pk_columns = & pk_index. columns ;
2810- let num_pk_cols = pk_columns. len ( ) ;
2810+ let num_pk_cols = pk_index. n_key_col ;
28112811 let pk_registers_start = program. alloc_registers ( num_pk_cols) ;
28122812 tracing:: debug!(
28132813 "Allocated registers {}-{} for PK uniqueness check" ,
28142814 pk_registers_start,
28152815 pk_registers_start + num_pk_cols - 1
28162816 ) ;
28172817
2818- for ( i, pk_col) in pk_columns . iter ( ) . enumerate ( ) {
2818+ for ( i, pk_col) in pk_index . columns . iter ( ) . take ( num_pk_cols ) . enumerate ( ) {
28192819 let mapping = insertion. get_col_mapping_by_name ( & pk_col. name ) . unwrap ( ) ;
28202820 program. emit_insn ( Insn :: Copy {
28212821 src_reg : mapping. register ,
@@ -2878,13 +2878,7 @@ fn translate_without_rowid_insert(
28782878
28792879 tracing:: debug!( "Beginning update of secondary indices." ) ;
28802880 for index in resolver. schema . get_indices ( table. name . as_str ( ) ) {
2881- let is_pk = index. columns . len ( ) == pk_index. columns . len ( )
2882- && index
2883- . columns
2884- . iter ( )
2885- . zip ( pk_index. columns . iter ( ) )
2886- . all ( |( a, b) | a. name == b. name ) ;
2887- if is_pk {
2881+ if index. is_primary_key {
28882882 continue ;
28892883 }
28902884
@@ -2897,13 +2891,12 @@ fn translate_without_rowid_insert(
28972891
28982892 tracing:: debug!( "Processing secondary index '{}'" , index. name) ;
28992893
2900- let secondary_key_cols = & index . columns ;
2901- let num_key_cols = secondary_key_cols . len ( ) ;
2894+
2895+ let num_key_cols = index . n_key_col ;
29022896 let key_start_reg = program. alloc_registers ( num_key_cols) ;
29032897
29042898 let mut current_reg = key_start_reg;
2905-
2906- for idx_col in secondary_key_cols {
2899+ for idx_col in index. columns . iter ( ) . take ( num_key_cols) {
29072900 let mapping = insertion. get_col_mapping_by_name ( & idx_col. name ) . unwrap ( ) ;
29082901 program. emit_insn ( Insn :: Copy {
29092902 src_reg : mapping. register ,
0 commit comments