Example #1
0
        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));
        }
Example #3
0
        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());
        }