internal static long Insert <T>(this IDbCommand dbCmd, T obj, bool selectIdentity = false) { OrmLiteConfig.InsertFilter?.Invoke(dbCmd, obj); var dialectProvider = dbCmd.GetDialectProvider(); dialectProvider.PrepareParameterizedInsertStatement <T>(dbCmd, insertFields: OrmLiteUtils.GetNonDefaultValueInsertFields(obj)); dialectProvider.SetParameterValues <T>(dbCmd, obj); if (selectIdentity) { return(dialectProvider.InsertAndGetLastInsertId <T>(dbCmd)); } return(dbCmd.ExecNonQuery()); }
internal static Task <long> InsertAsync <T>(this IDbCommand dbCmd, T obj, bool selectIdentity, CancellationToken token) { OrmLiteConfig.InsertFilter?.Invoke(dbCmd, obj); var dialectProvider = dbCmd.GetDialectProvider(); dialectProvider.PrepareParameterizedInsertStatement <T>(dbCmd, insertFields: OrmLiteUtils.GetNonDefaultValueInsertFields(obj)); dialectProvider.SetParameterValues <T>(dbCmd, obj); if (selectIdentity) { return(dialectProvider.InsertAndGetLastInsertIdAsync <T>(dbCmd, token)); } return(dbCmd.ExecNonQueryAsync(token).Then(i => (long)i)); }
internal static long Insert <T>(this IDbCommand dbCmd, T obj, Action <IDbCommand> commandFilter, bool selectIdentity = false) { OrmLiteConfig.InsertFilter?.Invoke(dbCmd, obj); var dialectProvider = dbCmd.GetDialectProvider(); dialectProvider.PrepareParameterizedInsertStatement <T>(dbCmd, insertFields: OrmLiteUtils.GetNonDefaultValueInsertFields(obj)); dialectProvider.SetParameterValues <T>(dbCmd, obj); commandFilter?.Invoke(dbCmd); //dbCmd.OnConflictInsert() needs to be applied before last insert id var modelDef = typeof(T).GetModelDefinition(); if (modelDef.HasReturnAttribute) { using (var reader = dbCmd.ExecReader(dbCmd.CommandText)) using (reader) { if (reader.Read()) { var values = new object[reader.FieldCount]; var indexCache = reader.GetIndexFieldsCache(ModelDefinition <T> .Definition, dialectProvider); obj.PopulateWithSqlReader(dialectProvider, reader, indexCache, values); if ((modelDef.PrimaryKey != null) && modelDef.PrimaryKey.AutoIncrement) { var id = modelDef.GetPrimaryKey(obj); return(Convert.ToInt64(id)); } } return(0); } } if (selectIdentity) { dbCmd.CommandText += dialectProvider.GetLastInsertIdSqlSuffix <T>(); return(dbCmd.ExecLongScalar()); } return(dbCmd.ExecNonQuery()); }
internal static long Insert <T>(this IDbCommand dbCmd, T obj, Action <IDbCommand> commandFilter, bool selectIdentity = false) { OrmLiteConfig.InsertFilter?.Invoke(dbCmd, obj); var dialectProvider = dbCmd.GetDialectProvider(); dialectProvider.PrepareParameterizedInsertStatement <T>(dbCmd, insertFields: OrmLiteUtils.GetNonDefaultValueInsertFields(obj)); dialectProvider.SetParameterValues <T>(dbCmd, obj); commandFilter?.Invoke(dbCmd); //dbCmd.OnConflictInsert() needs to be applied before last insert id if (selectIdentity) { dbCmd.CommandText += dialectProvider.GetLastInsertIdSqlSuffix <T>(); return(dbCmd.ExecLongScalar()); } return(dbCmd.ExecNonQuery()); }