/// <summary> /// Método responsável por gerar comandos de inserção /// </summary> private string InsertParser() { var sqlCommand = new StringBuilder(); var propertyPart = new StringBuilder(); var valuePart = new StringBuilder(); EntityInfo info = GetEntityInfo(Action.EntityFullName); var typeMetadata = TypeSchema.GetTypeMetadata(Action.EntityFullName); Append("INSERT INTO ", sqlCommand).AppendTranslatedName(Translator.GetName(info), sqlCommand).Append(" (", sqlCommand); Tuple <int, IPropertyMetadata> identityKey = null; var keysIndex = new List <Tuple <int, IPropertyMetadata> >(); bool isPosCommand = PrimaryKeyRepository.IsPosCommand(typeMetadata.FullName); bool isFirst = true; for (int i = 0; i < Action.Parameters.Count; i++) { var parameter = Action.Parameters[i]; if (string.IsNullOrEmpty(parameter.Name) || parameter.Name.StartsWith("?")) { continue; } var propertyMetadata = typeMetadata[parameter.Name]; SetParameterType(propertyMetadata, parameter); if (propertyMetadata.ParameterType == PersistenceParameterType.IdentityKey) { identityKey = new Tuple <int, IPropertyMetadata>(i, propertyMetadata); if (isPosCommand) { continue; } } else if (propertyMetadata.ParameterType == PersistenceParameterType.Key) { keysIndex.Add(new Tuple <int, IPropertyMetadata>(i, propertyMetadata)); } if (!isFirst) { Append(',', valuePart); Append(',', propertyPart); } else { isFirst = false; } var translatedName = Translator.GetName(info, propertyMetadata.Name); if (translatedName is TranslatedColumnName) { AppendTranslatedName(translatedName, propertyPart); } else if (propertyMetadata.Name == Query.DataAccessConstants.RowVersionPropertyName) { AppendQuoteExpression(Query.DataAccessConstants.RowVersionColumnName, propertyPart); } else { throw new InvalidOperationException("Expected ColumnName for property \"" + propertyMetadata.Name + "\""); } Append('?', valuePart).Append(Action.Parameters[i].Name, valuePart); } Append(')', valuePart); Append(')', propertyPart); Append(propertyPart, sqlCommand).Append(" VALUES (", sqlCommand).Append(valuePart, sqlCommand); if (isPosCommand && identityKey != null) { Append(" SELECT ?", sqlCommand).Append(Action.Parameters[identityKey.Item1].Name, sqlCommand).Append("=SCOPE_IDENTITY()", sqlCommand); } if (identityKey != null) { keysIndex.Clear(); keysIndex.Add(identityKey); } AppendGetRowVersionAndVolatilePropertiesExpression(info, keysIndex, typeMetadata, sqlCommand); return(sqlCommand.ToString()); }
/// <summary> /// Método responsável por gerar comandos de inserção /// </summary> private string InsertParser() { var sqlCommand = new StringBuilder(); var propertyPart = new StringBuilder(); var valuePart = new StringBuilder(); StringBuilder generateIdentityPart = null; EntityInfo info = GetEntityInfo(Action.EntityFullName); var typeMetadata = TypeSchema.GetTypeMetadata(Action.EntityFullName); sqlCommand.AppendLine("BEGIN"); bool isFirst = true; bool isPosCommand = PrimaryKeyRepository.IsPosCommand(typeMetadata.FullName); for (int i = 0; i < Action.Parameters.Count; i++) { var propertyMetadata = typeMetadata[Action.Parameters[i].Name]; SetParameterType(propertyMetadata, Action.Parameters[i]); if (propertyMetadata.ParameterType == PersistenceParameterType.IdentityKey) { if (isPosCommand) { generateIdentityPart = new StringBuilder(); Append("SELECT ", generateIdentityPart).AppendQuoteExpression(typeMetadata.TableName.Schema, generateIdentityPart).Append(".\"", generateIdentityPart).Append(typeMetadata.TableName.Name, generateIdentityPart).Append("_seq\".nextval INTO ?", generateIdentityPart).Append(Action.Parameters[i].Name, generateIdentityPart).Append(" FROM dual;", generateIdentityPart); } } if (!isFirst) { Append(',', valuePart); Append(',', propertyPart); } else { isFirst = false; } var translatedName = Translator.GetName(info, propertyMetadata.Name); if (translatedName is TranslatedColumnName) { AppendTranslatedName(translatedName, propertyPart); } else if (propertyMetadata.Name == Query.DataAccessConstants.RowVersionPropertyName) { AppendQuoteExpression(Query.DataAccessConstants.RowVersionColumnName.ToUpper(), propertyPart); } else { throw new InvalidOperationException("Expected ColumnName for property \"" + propertyMetadata.Name + "\""); } Append('?', valuePart).Append(propertyMetadata.ColumnName, valuePart); } Append(')', valuePart); Append(')', propertyPart); if (generateIdentityPart != null) { sqlCommand.AppendLine(generateIdentityPart.ToString()); } Append("INSERT INTO ", sqlCommand).AppendTranslatedName(Translator.GetName(info), sqlCommand).Append(" (", sqlCommand).Append(propertyPart, sqlCommand).Append(" VALUES (", sqlCommand).Append(valuePart, sqlCommand); sqlCommand.AppendLine(";"); AppendGetRowsAffectedExpression(sqlCommand); sqlCommand.AppendLine("END;"); return(sqlCommand.ToString()); }