@@ -486,10 +486,7 @@ public void CreateSecondaryIndex(IndexDefinition indexDef, Transaction tx)
486486 var idx = new SkipList < ComparableObject , List < ComparableObject > > ( ) ;
487487 _secondaryIndexes [ indexDef . IndexName ] = idx ;
488488
489- // 获取索引列的序号
490- var colOrdinals = new Int32 [ indexDef . Columns . Count ] ;
491- for ( var i = 0 ; i < indexDef . Columns . Count ; i ++ )
492- colOrdinals [ i ] = _schema . GetColumnIndex ( indexDef . Columns [ i ] ) ;
489+ var colOrdinals = GetColumnOrdinals ( indexDef ) ;
493490
494491 var pkCol = _schema . GetPrimaryKeyColumn ( ) ! ;
495492
@@ -513,7 +510,7 @@ public void CreateSecondaryIndex(IndexDefinition indexDef, Transaction tx)
513510 }
514511 else if ( indexDef . IsUnique && pkList ! . Count > 0 )
515512 {
516- throw new NovaException ( ErrorCode . PrimaryKeyConflict , $ "Duplicate key in unique index '{ indexDef . IndexName } '") ;
513+ throw new NovaException ( ErrorCode . UniqueConstraintViolation , $ "Duplicate key in unique index '{ indexDef . IndexName } '") ;
517514 }
518515
519516 pkList ! . Add ( pk ) ;
@@ -557,6 +554,15 @@ public void DropSecondaryIndex(String indexName)
557554 }
558555 }
559556
557+ /// <summary>获取索引定义的列序号数组</summary>
558+ private Int32 [ ] GetColumnOrdinals ( IndexDefinition indexDef )
559+ {
560+ var colOrdinals = new Int32 [ indexDef . Columns . Count ] ;
561+ for ( var i = 0 ; i < indexDef . Columns . Count ; i ++ )
562+ colOrdinals [ i ] = _schema . GetColumnIndex ( indexDef . Columns [ i ] ) ;
563+ return colOrdinals ;
564+ }
565+
560566 /// <summary>构建索引键</summary>
561567 private static ComparableObject BuildIndexKey ( Object ? [ ] row , Int32 [ ] colOrdinals )
562568 {
@@ -579,10 +585,7 @@ private void InsertIntoSecondaryIndexes(Object?[] row, ComparableObject pk)
579585 var indexDef = _schema . GetIndex ( kvp . Key ) ;
580586 if ( indexDef == null ) continue ;
581587
582- var colOrdinals = new Int32 [ indexDef . Columns . Count ] ;
583- for ( var i = 0 ; i < indexDef . Columns . Count ; i ++ )
584- colOrdinals [ i ] = _schema . GetColumnIndex ( indexDef . Columns [ i ] ) ;
585-
588+ var colOrdinals = GetColumnOrdinals ( indexDef ) ;
586589 var indexKey = BuildIndexKey ( row , colOrdinals ) ;
587590 var idx = kvp . Value ;
588591
@@ -593,7 +596,7 @@ private void InsertIntoSecondaryIndexes(Object?[] row, ComparableObject pk)
593596 }
594597 else if ( indexDef . IsUnique && pkList ! . Count > 0 )
595598 {
596- throw new NovaException ( ErrorCode . PrimaryKeyConflict , $ "Duplicate key in unique index '{ indexDef . IndexName } '") ;
599+ throw new NovaException ( ErrorCode . UniqueConstraintViolation , $ "Duplicate key in unique index '{ indexDef . IndexName } '") ;
597600 }
598601
599602 pkList ! . Add ( pk ) ;
@@ -608,10 +611,7 @@ private void RemoveFromSecondaryIndexes(Object?[] row, ComparableObject pk)
608611 var indexDef = _schema . GetIndex ( kvp . Key ) ;
609612 if ( indexDef == null ) continue ;
610613
611- var colOrdinals = new Int32 [ indexDef . Columns . Count ] ;
612- for ( var i = 0 ; i < indexDef . Columns . Count ; i ++ )
613- colOrdinals [ i ] = _schema . GetColumnIndex ( indexDef . Columns [ i ] ) ;
614-
614+ var colOrdinals = GetColumnOrdinals ( indexDef ) ;
615615 var indexKey = BuildIndexKey ( row , colOrdinals ) ;
616616 var idx = kvp . Value ;
617617
0 commit comments