Esempio n. 1
0
        internal static SqlGenerator InsertScalar(MySqlSession mySqlSession, DbSelectStatement statement)
        {
            var result     = new SqlGenerator(mySqlSession.MySqlVersion);
            var model      = statement.Model;
            var sqlBuilder = result.SqlBuilder;

            BuildInsertIntoClause(sqlBuilder, model, statement.Select);
            if (statement.Select.Count > 0)
            {
                statement.Accept(result);
            }

            return(result);
        }
Esempio n. 2
0
        internal static SqlGenerator Insert(SqlSession sqlSession, DbSelectStatement statement, IDbTable identityOutput)
        {
            var result     = new SqlGenerator(sqlSession.SqlVersion);
            var model      = statement.Model;
            var sqlBuilder = result.SqlBuilder;

            if (model.IsIdentitySuspended())
            {
                SetIdentityInsert(sqlBuilder, model, true);
            }

            BuildInsertIntoClause(sqlBuilder, statement.Model, statement.Select);

            if (identityOutput != null)
            {
                var identityColumn         = model.GetIdentity(false).Column;
                var identityOutputNewValue = ((IIdentityOutput)identityOutput.Model).NewValue;
                sqlBuilder.AppendLine(string.Format("OUTPUT INSERTED.{0} INTO {1} ({2})",
                                                    identityColumn.DbColumnName.ToQuotedIdentifier(),
                                                    identityOutput.Name.ToQuotedIdentifier(),
                                                    identityOutputNewValue.DbColumnName.ToQuotedIdentifier()));
            }

            if (statement.Select == null)
            {
                statement.From.Accept(result);
            }
            else if (statement.Select.Count > 0)
            {
                statement.Accept(result);
            }

            if (model.IsIdentitySuspended())
            {
                SetIdentityInsert(sqlBuilder, model, false);
            }

            return(result);
        }
Esempio n. 3
0
        internal static SqlGenerator InsertScalar(SqlSession sqlSession, DbSelectStatement statement, bool outputIdentity, out SqlParameter scopeIdentityParam)
        {
            var result     = new SqlGenerator(sqlSession.SqlVersion);
            var model      = statement.Model;
            var sqlBuilder = result.SqlBuilder;

            if (model.IsIdentitySuspended())
            {
                SetIdentityInsert(sqlBuilder, model, true);
            }

            BuildInsertIntoClause(sqlBuilder, model, statement.Select);

            if (statement.Select.Count > 0)
            {
                statement.Accept(result);
            }

            if (model.IsIdentitySuspended())
            {
                SetIdentityInsert(sqlBuilder, model, false);
            }

            if (outputIdentity)
            {
                var sqlType = SqlType.BigInt(new _Int64());
                scopeIdentityParam = sqlType.CreateSqlParameter("@scopeIdentity", ParameterDirection.Output, null, sqlSession.SqlVersion);

                sqlBuilder.AppendLine();
                sqlBuilder.Append("SET @scopeIdentity = CAST(SCOPE_IDENTITY() AS BIGINT);");
            }
            else
            {
                scopeIdentityParam = null;
            }

            return(result);
        }