@@ -376,24 +376,23 @@ public int CreateTable(Type ty, CreateFlags createFlags = CreateFlags.None)
376
376
throw new Exception ( "Table has no (public) columns" ) ;
377
377
}
378
378
379
- var PKs = mapColumns . Where ( c => c . IsPK ) . ToList ( ) ;
380
-
381
- var decls = mapColumns . Select ( p => Orm . SqlDecl ( p , StoreDateTimeAsTicks , Serializer , ExtraTypeMappings , PKs . Count ) ) ;
382
- var decl = string . Join ( ",\n " , decls . ToArray ( ) ) ;
383
- query . Append ( decl ) . Append ( ",\n " ) ;
384
-
385
-
386
- if ( PKs . Count > 1 )
379
+ if ( map . HasCompositePK )
387
380
{
381
+ var PKs = mapColumns . Where ( c => c . IsPK ) . ToList ( ) ;
382
+
383
+ var decls = mapColumns . Select ( p => Orm . SqlDecl ( p , StoreDateTimeAsTicks , Serializer , ExtraTypeMappings , map . HasCompositePK ) ) ;
384
+ var decl = string . Join ( ",\n " , decls . ToArray ( ) ) ;
385
+ query . Append ( decl ) . Append ( ",\n " ) ;
388
386
query . Append ( "primary key (" ) . Append ( string . Join ( "," , PKs . Select ( pk => pk . Name ) ) ) . Append ( ")" ) ;
387
+ query . Append ( ")" ) ;
389
388
}
390
389
else
391
390
{
392
- query . Remove ( query . Length - 2 , 2 ) ;
391
+ var decls = mapColumns . Select ( p => Orm . SqlDecl ( p , StoreDateTimeAsTicks , Serializer , ExtraTypeMappings ) ) ;
392
+ var decl = string . Join ( ",\n " , decls . ToArray ( ) ) ;
393
+ query . Append ( decl ) . Append ( ")" ) ;
393
394
}
394
395
395
- query . Append ( ")" ) ;
396
-
397
396
var count = Execute ( query . ToString ( ) ) ;
398
397
399
398
if ( count == 0 )
@@ -575,7 +574,7 @@ private void MigrateTable(TableMapping map)
575
574
}
576
575
577
576
var addCol = "alter table \" " + map . TableName + "\" add column " +
578
- Orm . SqlDecl ( p , StoreDateTimeAsTicks , Serializer , ExtraTypeMappings , PKscount ) ;
577
+ Orm . SqlDecl ( p , StoreDateTimeAsTicks , Serializer , ExtraTypeMappings , map . HasCompositePK ) ;
579
578
Execute ( addCol ) ;
580
579
}
581
580
}
@@ -832,10 +831,6 @@ public T Get<T>(object pk) where T : class
832
831
throw new NotSupportedException ( map . TableName + " table has a composite primary key. Make sure primary key is passed in as Dictionary<string, object>." ) ;
833
832
}
834
833
var pks = map . PKs ;
835
- if ( pks == null || pks . Length == 0 )
836
- {
837
- throw new NotSupportedException ( "Cannot get from " + map . TableName + ": it has no PK" ) ;
838
- }
839
834
if ( PKs . Keys . Intersect ( pks . Select ( p => p . Name ) ) . Count ( ) < pks . Length )
840
835
{
841
836
throw new NotSupportedException ( "Cannot get from " + map . TableName + ": PKs mismatch. Make sure PK names are valid." ) ;
@@ -889,10 +884,6 @@ public T Find<T>(object pk) where T : class
889
884
throw new NotSupportedException ( map . TableName + " table has a composite primary key. Make sure primary key is passed in as Dictionary<string, object>." ) ;
890
885
}
891
886
var pks = map . PKs ;
892
- if ( pks == null || pks . Length == 0 )
893
- {
894
- throw new NotSupportedException ( "Cannot find in " + map . TableName + ": it has no PK" ) ;
895
- }
896
887
if ( PKs . Keys . Intersect ( pks . Select ( p => p . Name ) ) . Count ( ) < pks . Length )
897
888
{
898
889
throw new NotSupportedException ( "Cannot find in " + map . TableName + ": PKs mismatch. Make sure PK names are valid." ) ;
@@ -951,10 +942,6 @@ public object Find(object pk, TableMapping map)
951
942
throw new NotSupportedException ( map . TableName + " table has a composite primary key. Make sure primary key is passed in as Dictionary<string, object>." ) ;
952
943
}
953
944
var pks = map . PKs ;
954
- if ( pks == null || pks . Length == 0 )
955
- {
956
- throw new NotSupportedException ( "Cannot find in " + map . TableName + ": it has no PK" ) ;
957
- }
958
945
if ( PKs . Keys . Intersect ( pks . Select ( p => p . Name ) ) . Count ( ) < pks . Length )
959
946
{
960
947
throw new NotSupportedException ( "Cannot find in " + map . TableName + ": PKs mismatch. Make sure PK names are valid." ) ;
@@ -1522,13 +1509,19 @@ public int Insert(object obj, string extra, Type objType)
1522
1509
}
1523
1510
1524
1511
var map = GetMapping ( objType ) ;
1525
-
1526
1512
TableMapping . Column pk = null ;
1527
1513
1528
- if ( map . PKs != null )
1514
+ if ( map . HasCompositePK )
1529
1515
{
1530
1516
pk = map . PKs . FirstOrDefault ( p => p . IsAutoGuid ) ;
1531
1517
}
1518
+ else
1519
+ {
1520
+ if ( map . PK != null && map . PK . IsAutoGuid )
1521
+ {
1522
+ pk = map . PK ;
1523
+ }
1524
+ }
1532
1525
1533
1526
if ( pk != null )
1534
1527
{
@@ -1637,27 +1630,57 @@ public int Update(object obj, Type objType)
1637
1630
}
1638
1631
1639
1632
var map = GetMapping ( objType ) ;
1633
+ string q = null ;
1634
+ object [ ] ps = null ;
1640
1635
1641
- var pks = map . PKs ;
1642
-
1643
- if ( pks == null || pks . Length == 0 )
1636
+ if ( map . HasCompositePK )
1644
1637
{
1645
- throw new NotSupportedException ( "Cannot update " + map . TableName + ": it has no PK" ) ;
1638
+ var pks = map . PKs ;
1639
+ var cols = from p in map . Columns
1640
+ where ! pks . Any ( pk => pk == p )
1641
+ select p ;
1642
+
1643
+ var pslist = ( from c in cols
1644
+ select c . GetValue ( obj ) ) . ToList ( ) ;
1645
+
1646
+ pslist . AddRange ( pks . Select ( pk => pk . GetValue ( obj ) ) ) ;
1647
+
1648
+ q = string . Format ( "update \" {0}\" set {1} where {2}" , map . TableName ,
1649
+ string . Join ( "," , ( from c in cols
1650
+ select "\" " + c . Name + "\" = ? " ) . ToArray ( ) ) , string . Join ( " and " , pks . Select ( pk => "\" " + pk . Name + "\" = ? " ) ) ) ;
1651
+
1652
+ ps = pslist . ToArray ( ) ;
1646
1653
}
1654
+ else
1655
+ {
1656
+ var pk = map . PK ;
1647
1657
1648
- var cols = from p in map . Columns
1649
- where ! pks . Any ( pk => pk == p )
1650
- select p ;
1651
- var ps = ( from c in cols
1652
- select c . GetValue ( obj ) ) . ToList ( ) ;
1658
+ if ( pk == null )
1659
+ {
1660
+ throw new NotSupportedException ( "Cannot update " + map . TableName + ": it has no PK" ) ;
1661
+ }
1662
+
1663
+ var cols = from p in map . Columns
1664
+ where p != pk
1665
+ select p ;
1666
+
1667
+ var vals = from c in cols
1668
+ select c . GetValue ( obj ) ;
1669
+ var pslist = new List < object > ( vals )
1670
+ {
1671
+ pk . GetValue ( obj )
1672
+ } ;
1673
+
1674
+ q = string . Format ( "update \" {0}\" set {1} where {2} = ? " , map . TableName ,
1675
+ string . Join ( "," , ( from c in cols
1676
+ select "\" " + c . Name + "\" = ? " ) . ToArray ( ) ) , pk . Name ) ;
1677
+
1678
+ ps = pslist . ToArray ( ) ;
1679
+ }
1653
1680
1654
- ps . AddRange ( pks . Select ( pk=> pk . GetValue ( obj ) ) ) ;
1655
- var q = string . Format ( "update \" {0}\" set {1} where {2}" , map . TableName ,
1656
- string . Join ( "," , ( from c in cols
1657
- select "\" " + c . Name + "\" = ? " ) . ToArray ( ) ) , string . Join ( " and " , pks . Select ( pk => "\" " + pk . Name + "\" = ? " ) ) ) ;
1658
1681
try
1659
1682
{
1660
- rowsAffected = Execute ( q , ps . ToArray ( ) ) ;
1683
+ rowsAffected = Execute ( q , ps ) ;
1661
1684
}
1662
1685
catch ( SQLiteException ex )
1663
1686
{
@@ -1719,14 +1742,27 @@ public int UpdateAll(IEnumerable objects, bool runInTransaction = true)
1719
1742
public int Delete ( object objectToDelete )
1720
1743
{
1721
1744
var map = GetMapping ( objectToDelete . GetType ( ) ) ;
1722
- var pks = map . PKs ;
1723
- if ( pks == null || pks . Length == 0 )
1745
+ string q = null ;
1746
+ object [ ] ps = null ;
1747
+
1748
+ if ( map . HasCompositePK )
1724
1749
{
1725
- throw new NotSupportedException ( "Cannot delete " + map . TableName + ": it has no PK" ) ;
1726
- }
1727
- var q = string . Format ( "delete from \" {0}\" where {1}" , map . TableName , string . Join ( " and " , pks . Select ( pk => "\" " + pk . Name + "\" = ? " ) ) ) ;
1728
- var ps = ( from pk in pks
1750
+ var pks = map . PKs ;
1751
+ q = string . Format ( "delete from \" {0}\" where {1}" , map . TableName , string . Join ( " and " , pks . Select ( pk => "\" " + pk . Name + "\" = ? " ) ) ) ;
1752
+ ps = ( from pk in pks
1729
1753
select pk . GetValue ( objectToDelete ) ) . ToArray ( ) ;
1754
+ }
1755
+ else
1756
+ {
1757
+ var pk = map . PK ;
1758
+ if ( pk == null )
1759
+ {
1760
+ throw new NotSupportedException ( "Cannot delete " + map . TableName + ": it has no PK" ) ;
1761
+ }
1762
+ q = string . Format ( "delete from \" {0}\" where \" {1}\" = ?" , map . TableName , pk . Name ) ;
1763
+ ps = new object [ ] { pk . GetValue ( objectToDelete ) } ;
1764
+ }
1765
+
1730
1766
return Execute ( q , ps ) ;
1731
1767
}
1732
1768
@@ -1746,14 +1782,10 @@ public int Delete(object objectToDelete)
1746
1782
public int Delete < T > ( object primaryKey )
1747
1783
{
1748
1784
var map = GetMapping ( typeof ( T ) ) ;
1749
- var pks = map . PKs ;
1750
- if ( pks == null || pks . Length == 0 )
1751
- {
1752
- throw new NotSupportedException ( "Cannot delete " + map . TableName + ": it has no PK" ) ;
1753
- }
1754
1785
1755
1786
if ( map . HasCompositePK )
1756
1787
{
1788
+ var pks = map . PKs ;
1757
1789
IDictionary < string , object > PKs = primaryKey as Dictionary < string , object > ;
1758
1790
if ( PKs == null )
1759
1791
{
@@ -1770,7 +1802,12 @@ public int Delete<T>(object primaryKey)
1770
1802
}
1771
1803
else
1772
1804
{
1773
- var q = string . Format ( "delete from \" {0}\" where \" {1}\" = ?" , map . TableName , pks . FirstOrDefault ( ) . Name ) ;
1805
+ var pk = map . PK ;
1806
+ if ( pk == null )
1807
+ {
1808
+ throw new NotSupportedException ( "Cannot delete " + map . TableName + ": it has no PK" ) ;
1809
+ }
1810
+ var q = string . Format ( "delete from \" {0}\" where \" {1}\" = ?" , map . TableName , pk . Name ) ;
1774
1811
return Execute ( q , primaryKey ) ;
1775
1812
}
1776
1813
}
0 commit comments