/// <summary> /// Prepares an insert query. /// </summary> /// <param name="context"></param> /// <param name="connection">The connection.</param> /// <param name="transaction">The transaction.</param> /// <param name="properties"></param> /// <returns></returns> public void Prepare(IMansionContext context, SqlConnection connection, SqlTransaction transaction, IPropertyBag properties) { // validate arguments if (connection == null) throw new ArgumentNullException("connection"); if (transaction == null) throw new ArgumentNullException("transaction"); if (properties == null) throw new ArgumentNullException("properties"); // get the values var typeName = properties.Get<string>(context, "type", null); if (string.IsNullOrWhiteSpace(typeName)) throw new InvalidOperationException("A record must have a type"); // retrieve the type var type = typeService.Load(context, typeName); // get the schema of the root type var schema = Resolver.Resolve(context, type); // set the full text property SqlServerUtilities.PopulateFullTextColumn(context, type, properties, properties); // create the commands command = connection.CreateCommand(); command.CommandType = CommandType.Text; command.Transaction = transaction; // prepare the query var queryBuilder = new ModificationQueryBuilder(command); // loop through all the tables in the schema and let them prepare for insert foreach (var table in schema.Tables) table.ToInsertStatement(context, queryBuilder, properties); // finish the complete insert statement queryBuilder.AppendQuery("SELECT @ScopeIdentity"); // set the command text command.CommandText = queryBuilder.ToStatement(); }
/// <summary> /// Prepares an insert query. /// </summary> /// <param name="context"></param> /// <param name="connection">The connection.</param> /// <param name="transaction">The transaction.</param> /// <param name="node"></param> /// <param name="modifiedProperties"></param> /// <returns></returns> public void Prepare(IMansionContext context, SqlConnection connection, SqlTransaction transaction, Node node, IPropertyBag modifiedProperties) { // validate arguments if (connection == null) throw new ArgumentNullException("connection"); if (transaction == null) throw new ArgumentNullException("transaction"); if (node == null) throw new ArgumentNullException("node"); if (modifiedProperties == null) throw new ArgumentNullException("modifiedProperties"); // set the modified date modifiedProperties.TrySet("modified", DateTime.Now); // retrieve the type var type = typeService.Load(context, node.Pointer.Type); // retrieve the schema var schema = Resolver.Resolve(context, type); // set the full text property SqlServerUtilities.PopulateFullTextColumn(context, type, modifiedProperties, node); // create the commandse command = connection.CreateCommand(); command.CommandType = CommandType.Text; command.Transaction = transaction; // prepare the query var queryBuilder = new ModificationQueryBuilder(command); // loop through all the tables in the schema and let them prepare for update foreach (var table in schema.Tables) table.ToUpdateStatement(context, queryBuilder, node, modifiedProperties); // finish the insert statement command.CommandText = queryBuilder.ToStatement(); }
/// <summary> /// Prepares an insert query. /// </summary> /// <param name="context"></param> /// <param name="connection">The connection.</param> /// <param name="transaction">The transaction.</param> /// <param name="parent"></param> /// <param name="properties"></param> /// <returns></returns> public void Prepare(IMansionContext context, SqlConnection connection, SqlTransaction transaction, NodePointer parent, IPropertyBag properties) { // validate arguments if (connection == null) throw new ArgumentNullException("connection"); if (transaction == null) throw new ArgumentNullException("transaction"); if (parent == null) throw new ArgumentNullException("parent"); if (properties == null) throw new ArgumentNullException("properties"); // get the values var name = properties.Get<string>(context, "name", null); if (string.IsNullOrWhiteSpace(name)) throw new InvalidOperationException("The node must have a name"); var typeName = properties.Get<string>(context, "type", null); if (string.IsNullOrWhiteSpace(typeName)) throw new InvalidOperationException("The node must have a type"); // retrieve the type var type = typeService.Load(context, typeName); // get the schema of the root type var schema = Resolver.Resolve(context, type); // set the full text property SqlServerUtilities.PopulateFullTextColumn(context, type, properties, properties); // create the new pointer name = NodePointer.MakeSafeName(name); var newPointer = NodePointer.Parse(string.Join(NodePointer.PointerSeparator, new[] {parent.PointerString, 0.ToString(CultureInfo.InvariantCulture)}), string.Join(NodePointer.StructureSeparator, new[] {parent.StructureString, type.Name}), string.Join(NodePointer.PathSeparator, new[] {parent.PathString, name})); properties.Set("_newPointer", newPointer); // create the commands command = connection.CreateCommand(); command.CommandType = CommandType.Text; command.Transaction = transaction; // prepare the query var queryBuilder = new ModificationQueryBuilder(command); // loop through all the tables in the schema and let them prepare for insert foreach (var table in schema.Tables) table.ToInsertStatement(context, queryBuilder, properties); // finish the complete insert statement queryBuilder.AppendQuery("SELECT @ScopeIdentity"); // set the command text command.CommandText = queryBuilder.ToStatement(); }