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); }
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); }
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); }