private PreparedSqliteInsertCommand CreateInsertCommand(SQLiteConnection conn, string extra) { Column[] cols = this.InsertColumns; string insertSql; if (!cols.Any() && this.Columns.Count() == 1 && this.Columns[0].IsAutoInc) { insertSql = string.Format("insert {1} into \"{0}\" default values", this.TableName, extra); } else { bool replacing = string.Compare(extra, "OR REPLACE", StringComparison.OrdinalIgnoreCase) == 0; if (replacing) { cols = this.InsertOrReplaceColumns; } insertSql = string.Format("insert {3} into \"{0}\"({1}) values ({2})", this.TableName, string.Join(",", (from c in cols select "\"" + c.Name + "\"").ToArray()), string.Join(",", (from c in cols select "?").ToArray()), extra); } PreparedSqliteInsertCommand insertCommand = new PreparedSqliteInsertCommand(conn); insertCommand.CommandText = insertSql; return(insertCommand); }
protected internal void Dispose() { if (_insertCommand != null) { _insertCommand.Dispose(); _insertCommand = null; } }
public int Insert(object obj, string extra, Type objType) { if (obj == null || objType == null) { return(0); } TableMapping map = GetMapping(objType); if (map.PK != null && map.PK.IsAutoGuid) { PropertyInfo prop = objType.GetProperty(map.PK.PropertyName); if (prop != null) { if (prop.GetValue(obj, null).Equals(Guid.Empty)) { prop.SetValue(obj, Guid.NewGuid(), null); } } } bool replacing = string.Compare(extra, "OR REPLACE", StringComparison.OrdinalIgnoreCase) == 0; TableMapping.Column[] cols = replacing ? map.InsertOrReplaceColumns : map.InsertColumns; object[] vals = new object[cols.Length]; for (int i = 0; i < vals.Length; i++) { vals[i] = cols[i].GetValue(obj); } PreparedSqliteInsertCommand insertCmd = map.GetInsertCommand(this, extra); int count; try { count = insertCmd.ExecuteNonQuery(vals); } catch (SQLiteException ex) { if (SQLite3.ExtendedErrCode(this.Handle) == SQLite3.ExtendedResult.ConstraintNotNull) { throw NotNullConstraintViolationException.New(ex.Result, ex.Message, map, obj); } throw; } if (map.HasAutoIncPK) { long id = SQLite3.LastInsertRowid(this.Handle); map.SetAutoIncPK(obj, id); } return(count); }
public PreparedSqliteInsertCommand GetInsertCommand(SQLiteConnection conn, string extra) { if (_insertCommand == null) { _insertCommand = CreateInsertCommand(conn, extra); _insertCommandExtra = extra; } else if (_insertCommandExtra != extra) { _insertCommand.Dispose(); _insertCommand = CreateInsertCommand(conn, extra); _insertCommandExtra = extra; } return(_insertCommand); }