/// <summary>
        ///     Writes to the stream.
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="entities">The entities.</param>
        private void WriteToStream(NpgsqlBinaryImporter writer, IEnumerable <LogEvent> entities)
        {
            foreach (var entity in entities)
            {
                writer.StartRow();

                foreach (var columnKey in this.ColumnNamesWithoutSkipped())
                {
                    writer.Write(
                        this.columnOptions[columnKey].GetValue(entity, this.formatProvider),
                        this.columnOptions[columnKey].DbType);
                }
            }
        }
Esempio n. 2
0
 /// <summary>
 ///     Mapping values from properties which have a corresponding data row.
 ///     Matching is done based on Column name and property key
 /// </summary>
 private void WriteAdditionalColumns(NpgsqlBinaryImporter writer, LogEvent logEvent)
 {
     foreach (var column in _columnOptions.AdditionalDataColumns)
     {
         logEvent.Properties.TryGetValue(column.PropertyName, out LogEventPropertyValue propertyValue);
         var scalarValue = propertyValue as ScalarValue;
         if (scalarValue != null)
         {
             writer.Write(scalarValue.ToString(), column.ColumnType);
         }
         else
         {
             writer.WriteNull();
         }
     }
 }
Esempio n. 3
0
 private void WriteTags(NpgsqlBinaryImporter writer, OsmGeo item, Action <Tag> processTag = null)
 {
     if (item.Tags != null)
     {
         List <string> tags = new List <string>(item.Tags.Count);
         foreach (var tag in item.Tags)
         {
             tags.Add($"{tag.Key}={tag.Value}");
             processTag?.Invoke(tag);
         }
         writer.Write(tags.ToArray(), NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Text);
     }
     else
     {
         writer.Write <string[]>(null, NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Text);
     }
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="importer"></param>
 /// <param name="reader"></param>
 /// <param name="mappings"></param>
 /// <param name="identityBehavior"></param>
 private static int BinaryImport(NpgsqlBinaryImporter importer,
                                 DbDataReader reader,
                                 IEnumerable <NpgsqlBulkInsertMapItem> mappings,
                                 BulkImportIdentityBehavior identityBehavior)
 {
     return(BinaryImportWrite(importer,
                              () => reader.Read(),
                              () => reader,
                              (current) =>
     {
         foreach (var mapping in mappings)
         {
             BinaryImportWrite(importer, current[mapping.SourceColumn], mapping.NpgsqlDbType);
         }
     },
                              identityBehavior));
 }
Esempio n. 5
0
        private void WriteRegularColumns(NpgsqlBinaryImporter writer, LogEvent logEvent)
        {
            foreach (var column in _columnOptions.Store)
            {
                switch (column)
                {
                case StandardColumn.Message:
                    var message = logEvent.RenderMessage(_formatProvider);
                    writer.WriteNullable(message, NpgsqlDbType.Text);
                    break;

                case StandardColumn.MessageTemplate:
                    var messageTemplate = logEvent.MessageTemplate.Text;
                    writer.WriteNullable(messageTemplate, NpgsqlDbType.Text);
                    break;

                case StandardColumn.Level:
                    WriteLevel(writer, logEvent);
                    break;

                case StandardColumn.TimeStamp:
                    var timestamp = _columnOptions.TimeStamp.ConvertToUtc ? logEvent.Timestamp.DateTime.ToUniversalTime() : logEvent.Timestamp.DateTime;
                    writer.Write(timestamp, NpgsqlDbType.TimestampTZ);
                    break;

                case StandardColumn.Exception:
                    var exception = logEvent.Exception?.ToString();
                    writer.WriteNullable(exception, NpgsqlDbType.Text);
                    break;

                case StandardColumn.Properties:
                    var propertiesJson = ConvertPropertiesToJsonStructure(logEvent.Properties);
                    writer.Write(propertiesJson, NpgsqlDbType.Jsonb);
                    break;

                case StandardColumn.LogEvent:
                    var logEventJson = LogEventToJson(logEvent);
                    writer.Write(logEventJson, NpgsqlDbType.Jsonb);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
        /// <summary>
        /// Пишет значение в импортер
        /// </summary>
        protected virtual void WriteValue(NpgsqlBinaryImporter writer, object value, bool valueSpecified, NpgsqlDbType?type = null)
        {
            if (!valueSpecified || value == null || value == DBNull.Value)
            {
                writer.WriteNull();
            }
            else if (type.HasValue)
            {
                writer.Write(value, type.Value);
            }
            else
            {
                writer.Write(value);
            }

            //Запись о том что столбец передан
            writer.Write(valueSpecified);
        }
Esempio n. 7
0
        private void AddToTxImporter(NpgsqlBinaryImporter txImporter, long txInternalId, byte[] txExternalId, byte[] txPayload, DateTime?receivedAt, string callbackUrl,
                                     string callbackToken, string callbackEncryption, bool?merkleProof, bool?dsCheck, long?n, byte[] prevTxId, long?prevN)
        {
            txImporter.StartRow();

            txImporter.Write(txInternalId, NpgsqlTypes.NpgsqlDbType.Bigint);
            txImporter.Write(txExternalId, NpgsqlTypes.NpgsqlDbType.Bytea);
            txImporter.Write((object)txPayload ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Bytea);
            txImporter.Write((object)receivedAt ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Timestamp);
            txImporter.Write((object)callbackUrl ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Varchar);
            txImporter.Write((object)callbackToken ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Varchar);
            txImporter.Write((object)callbackEncryption ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Varchar);
            txImporter.Write((object)merkleProof ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Boolean);
            txImporter.Write((object)dsCheck ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Boolean);
            txImporter.Write((object)n ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Bigint);
            txImporter.Write((object)prevTxId ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Bytea);
            txImporter.Write((object)prevN ?? DBNull.Value, NpgsqlTypes.NpgsqlDbType.Bigint);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="importer"></param>
        /// <param name="dictionaries"></param>
        /// <param name="mappings"></param>
        /// <param name="identityBehavior"></param>
        private static int BinaryImport(NpgsqlBinaryImporter importer,
                                        IEnumerable <IDictionary <string, object> > dictionaries,
                                        IEnumerable <NpgsqlBulkInsertMapItem> mappings,
                                        BulkImportIdentityBehavior identityBehavior)
        {
            var enumerator = dictionaries.GetEnumerator();

            return(BinaryImportWrite(importer,
                                     () => enumerator.MoveNext(),
                                     () => enumerator.Current,
                                     (dictionary) =>
            {
                foreach (var mapping in mappings)
                {
                    BinaryImportWrite(importer, dictionary[mapping.SourceColumn], mapping.NpgsqlDbType);
                }
            },
                                     identityBehavior));
        }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="importer"></param>
        /// <param name="tableName"></param>
        /// <param name="entities"></param>
        /// <param name="mappings"></param>
        /// <param name="entityType"></param>
        /// <param name="identityBehavior"></param>
        private static int BinaryImport <TEntity>(NpgsqlBinaryImporter importer,
                                                  string tableName,
                                                  IEnumerable <TEntity> entities,
                                                  IEnumerable <NpgsqlBulkInsertMapItem> mappings,
                                                  Type entityType,
                                                  BulkImportIdentityBehavior identityBehavior)
            where TEntity : class
        {
            var func = Compiler.GetNpgsqlBinaryImporterWriteFunc <TEntity>(tableName,
                                                                           mappings,
                                                                           entityType);
            var enumerator = entities.GetEnumerator();

            return(BinaryImportWrite(importer,
                                     () => enumerator.MoveNext(),
                                     () => enumerator.Current,
                                     (entity) => func(importer, entity),
                                     identityBehavior));
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="importer"></param>
 /// <param name="reader"></param>
 /// <param name="mappings"></param>
 /// <param name="identityBehavior"></param>
 /// <param name="cancellationToken"></param>
 private static async Task <int> BinaryImportAsync(NpgsqlBinaryImporter importer,
                                                   DbDataReader reader,
                                                   IEnumerable <NpgsqlBulkInsertMapItem> mappings,
                                                   BulkImportIdentityBehavior identityBehavior,
                                                   CancellationToken cancellationToken = default)
 {
     return(await BinaryImportWriteAsync(importer,
                                         async() => await reader.ReadAsync(cancellationToken),
                                         async() => await Task.FromResult(reader),
                                         async (current) =>
     {
         foreach (var mapping in mappings)
         {
             await BinaryImportWriteAsync(importer, current[mapping.SourceColumn],
                                          mapping.NpgsqlDbType, cancellationToken);
         }
     },
                                         identityBehavior,
                                         cancellationToken : cancellationToken));
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="importer"></param>
 /// <param name="data"></param>
 /// <param name="npgsqlDbType"></param>
 /// <param name="cancellationToken"></param>
 /// <returns></returns>
 private static async Task BinaryImportWriteAsync(NpgsqlBinaryImporter importer,
                                                  object data,
                                                  NpgsqlDbType?npgsqlDbType,
                                                  CancellationToken cancellationToken = default)
 {
     if (data == null)
     {
         await importer.WriteNullAsync(cancellationToken);
     }
     else
     {
         if (npgsqlDbType != null)
         {
             await importer.WriteAsync(data, npgsqlDbType.Value, cancellationToken);
         }
         else
         {
             await importer.WriteAsync(data, cancellationToken);
         }
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="importer"></param>
        /// <param name="tableName"></param>
        /// <param name="entities"></param>
        /// <param name="mappings"></param>
        /// <param name="entityType"></param>
        /// <param name="identityBehavior"></param>
        /// <param name="cancellationToken"></param>
        private static async Task <int> BinaryImportAsync <TEntity>(NpgsqlBinaryImporter importer,
                                                                    string tableName,
                                                                    IEnumerable <TEntity> entities,
                                                                    IEnumerable <NpgsqlBulkInsertMapItem> mappings,
                                                                    Type entityType,
                                                                    BulkImportIdentityBehavior identityBehavior,
                                                                    CancellationToken cancellationToken = default)
            where TEntity : class
        {
            var func = Compiler.GetNpgsqlBinaryImporterWriteAsyncFunc <TEntity>(tableName,
                                                                                mappings,
                                                                                entityType);
            var enumerator = entities.GetEnumerator();

            return(await BinaryImportWriteAsync(importer,
                                                async() => await Task.FromResult(enumerator.MoveNext()),
                                                async() => await Task.FromResult(enumerator.Current),
                                                async (entity) => await func(importer, entity, cancellationToken),
                                                identityBehavior,
                                                cancellationToken));
        }
 public static void SerializeColumn(Column c, object value, NpgsqlBinaryImporter importer)
 {
     if (value == DBNull.Value)
     {
         importer.WriteNull();
     }
     else
     {
         var type = GetPgType(c.Type, c.IsMax);
         var s    = value as string;
         if (s == null)
         {
             importer.Write(value, type);
         }
         else
         {
             s = Regex.Replace(s, "\0", ""); //null characters are not allowed in Postgres
             importer.Write(s, type);
         }
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="importer"></param>
        /// <param name="moveNext"></param>
        /// <param name="getCurrent"></param>
        /// <param name="write"></param>
        /// <param name="identityBehavior"></param>
        /// <returns></returns>
        private static int BinaryImportWrite <TEntity>(NpgsqlBinaryImporter importer,
                                                       Func <bool> moveNext,
                                                       Func <TEntity> getCurrent,
                                                       Action <TEntity> write,
                                                       BulkImportIdentityBehavior identityBehavior)
            where TEntity : class
        {
            var result = 0;

            while (moveNext())
            {
                importer.StartRow();

                EnsureCustomizedOrderColumn(importer, identityBehavior, result);
                write(getCurrent());

                result++;
            }

            importer.Complete();
            return(result);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="importer"></param>
        /// <param name="rows"></param>
        /// <param name="mappings"></param>
        /// <param name="identityBehavior"></param>
        /// <param name="cancellationToken"></param>
        private static async Task <int> BinaryImportAsync(NpgsqlBinaryImporter importer,
                                                          IEnumerable <DataRow> rows,
                                                          IEnumerable <NpgsqlBulkInsertMapItem> mappings,
                                                          BulkImportIdentityBehavior identityBehavior,
                                                          CancellationToken cancellationToken = default)
        {
            var enumerator = rows.GetEnumerator();

            return(await BinaryImportWriteAsync(importer,
                                                async() => await Task.FromResult(enumerator.MoveNext()),
                                                async() => await Task.FromResult(enumerator.Current),
                                                async (row) =>
            {
                foreach (var mapping in mappings)
                {
                    await BinaryImportWriteAsync(importer, row[mapping.SourceColumn],
                                                 mapping.NpgsqlDbType, cancellationToken);
                }
            },
                                                identityBehavior,
                                                cancellationToken));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="importer"></param>
        /// <param name="dictionaries"></param>
        /// <param name="mappings"></param>
        /// <param name="identityBehavior"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        private static async Task <int> BinaryImportExplicitAsync(NpgsqlBinaryImporter importer,
                                                                  IEnumerable <IDictionary <string, object> > dictionaries,
                                                                  IEnumerable <NpgsqlBulkInsertMapItem> mappings,
                                                                  BulkImportIdentityBehavior identityBehavior,
                                                                  CancellationToken cancellationToken = default)
        {
            var enumerator = dictionaries.GetEnumerator();

            return(await BinaryImportWriteAsync(importer,
                                                async() => await Task.FromResult(enumerator.MoveNext()),
                                                async() => await Task.FromResult(enumerator.Current),
                                                async (dictionary) =>
            {
                foreach (var mapping in mappings)
                {
                    await BinaryImportWriteAsync(importer, dictionary[mapping.SourceColumn],
                                                 mapping.NpgsqlDbType, cancellationToken);
                }
            },
                                                identityBehavior,
                                                cancellationToken));
        }
Esempio n. 17
0
 public static void WriteValue(this NpgsqlBinaryImporter importer, long value)
 {
     importer.Write(value, NpgsqlDbType.Bigint);
 }
Esempio n. 18
0
 private void WriteEvent(NpgsqlBinaryImporter writer, LogEvent logEvent)
 {
     writer.StartRow();
     WriteRegularColumns(writer, logEvent);
     WriteAdditionalColumns(writer, logEvent);
 }
Esempio n. 19
0
 public abstract void Import(NpgsqlBinaryImporter writer);
Esempio n. 20
0
 public static void WriteValue(this NpgsqlBinaryImporter binaryImporter, string value, NpgsqlDbType npgsqlDbType)
 {
     binaryImporter.Write(value, npgsqlDbType);
 }
Esempio n. 21
0
 public static void WriteValue(this NpgsqlBinaryImporter binaryImporter, byte[] value)
 {
     binaryImporter.Write(value, NpgsqlDbType.Bytea);
 }
Esempio n. 22
0
 public static void WriteValue(this NpgsqlBinaryImporter importer, OperationType value)
 {
     importer.Write((byte)value, NpgsqlDbType.Smallint);
 }
 internal Task WriteValues(TEntity entity, NpgsqlBinaryImporter binaryImporter, CancellationToken cancellationToken)
 {
     return(_valueWriter.Invoke(entity, binaryImporter, cancellationToken));
 }
Esempio n. 24
0
 public static void WriteValue(this NpgsqlBinaryImporter importer, DateTime value)
 {
     importer.Write(value, NpgsqlDbType.Timestamp);
 }
Esempio n. 25
0
 public static void WriteValue(this NpgsqlBinaryImporter importer, short value)
 {
     importer.Write(value, NpgsqlDbType.Smallint);
 }
Esempio n. 26
0
 public static void WriteValue(this NpgsqlBinaryImporter binaryImporter, decimal value)
 {
     binaryImporter.Write(value, NpgsqlDbType.Numeric);
 }
Esempio n. 27
0
 public abstract void LoadRow(NpgsqlBinaryImporter writer, T document, ITenant tenant, ISerializer serializer);
Esempio n. 28
0
 protected abstract bool ImportRow(NpgsqlBinaryImporter importer, T model);
Esempio n. 29
0
 public abstract Task LoadRowAsync(NpgsqlBinaryImporter writer, T document, ITenant tenant, ISerializer serializer, CancellationToken cancellation);
Esempio n. 30
0
 public static void WriteValue(this NpgsqlBinaryImporter importer, int value)
 {
     importer.Write(value, NpgsqlDbType.Integer);
 }