public void to_upsert_with_duplicated_fields() { var mapping = DocumentMapping.For <User>(); mapping.DuplicateField("FirstName"); mapping.DuplicateField("LastName"); var function = new UpsertFunction(mapping); var args = function.Arguments.Select(x => x.Column).ToArray(); args.ShouldContain("first_name"); args.ShouldContain("last_name"); }
public DocumentFunctionOperationBuilder(DocumentMapping mapping, UpsertFunction function, OperationRole role, StoreOptions options) { _function = function; _role = role; _options = options; CommandText = $"select {_function.Identifier}({_function.OrderedArguments().Select(x => "?").Join(", ")})"; ClassName = $"{function.GetType().Name.Replace("Function", "")}{mapping.DocumentType.Name.Sanitize()}Operation"; _mapping = mapping; }
public void tenant_id_argument_when_multi_tenanted() { var options = new StoreOptions(); options.Connection(ConnectionSource.ConnectionString); options.Policies.AllDocumentsAreMultiTenanted(); var mapping = new DocumentMapping(typeof(User), options); mapping.TenancyStyle = TenancyStyle.Conjoined; var func = new UpsertFunction(mapping); func.Arguments.Any(x => x is TenantIdArgument) .ShouldBeTrue(); }
public void restore_previous_function_in_rollback() { writeFunction(); theMapping.Duplicate(x => x.FirstName); writeTable(); var function = new UpsertFunction(theMapping); var ddlRules = new DdlRules(); var delta = function.FetchDelta(_conn, ddlRules); var patch = new SchemaPatch(ddlRules); delta.WritePatch(patch); patch.RollbackDDL.ShouldContain(delta.Actual.Body); }
private void writeFunction() { var writer = new StringWriter(); var function = new UpsertFunction(theMapping); function.Write(new DdlRules(), writer); var sql = writer.ToString(); try { _conn.CreateCommand(sql).ExecuteNonQuery(); } catch (Exception) { Console.WriteLine(sql); throw; } }
public GeneratedType BuildType(GeneratedAssembly assembly) { var upsertFunction = new UpsertFunction(_mapping); var arguments = upsertFunction.OrderedArguments().Where(x => !(x is CurrentVersionArgument)).ToArray(); var columns = arguments.Select(x => $"\\\"{x.Column}\\\"").Join(", "); var type = assembly.AddType($"{_mapping.DocumentType.Name.Sanitize()}BulkLoader", typeof(BulkLoader <,>).MakeGenericType(_mapping.DocumentType, _mapping.IdType)); if (_mapping.IsHierarchy()) { type.AllInjectedFields.Add(new InjectedField(typeof(DocumentMapping), "mapping")); } type.MethodFor("MainLoaderSql").Frames .Return($"COPY {_mapping.Table.QualifiedName}({columns}) FROM STDIN BINARY"); type.MethodFor("TempLoaderSql").Frames .Return($"COPY {_tempTable}({columns}) FROM STDIN BINARY"); type.MethodFor(nameof(CopyNewDocumentsFromTempTable)) .Frames.Return(CopyNewDocumentsFromTempTable()); type.MethodFor(nameof(OverwriteDuplicatesFromTempTable)) .Frames.Return(OverwriteDuplicatesFromTempTable()); type.MethodFor(nameof(CreateTempTableForCopying)) .Frames.Return(CreateTempTableForCopying().Replace("\"", "\\\"")); var load = type.MethodFor("LoadRow"); for (int i = 0; i < arguments.Length; i++) { arguments[i].GenerateBulkWriterCode(type, load, _mapping); } return(type); }