public BulkLoader(ISerializer serializer, DocumentMapping mapping, IdAssignment <T> assignment) { _mapping = mapping; _assignment = assignment; var upsertFunction = new UpsertFunction(mapping); _tempTableName = mapping.Table.Name + "_temp"; var writer = Expression.Parameter(typeof(NpgsqlBinaryImporter), "writer"); var document = Expression.Parameter(typeof(T), "document"); var alias = Expression.Parameter(typeof(string), "alias"); var serializerParam = Expression.Parameter(typeof(ISerializer), "serializer"); var textWriter = Expression.Parameter(typeof(CharArrayTextWriter), "writer"); var tenantId = Expression.Parameter(typeof(string), "tenantId"); var arguments = upsertFunction.OrderedArguments().Where(x => !(x is CurrentVersionArgument)).ToArray(); var expressions = arguments.Select( x => x.CompileBulkImporter(mapping, serializer.EnumStorage, writer, document, alias, serializerParam, textWriter, tenantId)); var columns = arguments.Select(x => $"\"{x.Column}\"").Join(", "); _baseSql = $"COPY %TABLE%({columns}) FROM STDIN BINARY"; _sql = _baseSql.Replace("%TABLE%", mapping.Table.QualifiedName); var block = Expression.Block(expressions); var lambda = Expression.Lambda <Action <T, string, ISerializer, NpgsqlBinaryImporter, CharArrayTextWriter, string> >(block, document, alias, serializerParam, writer, textWriter, tenantId); _transferData = ExpressionCompiler.Compile <Action <T, string, ISerializer, NpgsqlBinaryImporter, CharArrayTextWriter, string> >(lambda); }
private static TView newView(ITenant tenant, IdAssignment <TView> idAssigner, TId id) { var view = new TView(); idAssigner.Assign(tenant, view, id); return(view); }
private static TView newView(IdAssignment <TView> idAssigner, Guid id) { var view = new TView(); idAssigner.Assign(view, id); return(view); }
public SubClassDocumentStorage(IDocumentStorage parent) { _parent = parent; _parentIdAssignment = _parent.As <IdAssignment <TBase> >(); _parentBulkLoader = _parent.As <IBulkLoader <TBase> >(); }