public void Map(MetaToParamSettings settings)
        {
            if (settings.Metadatas == null)
            {
                throw new ArgumentNullException(nameof(settings.Metadatas));
            }
            if (settings.Columns == null)
            {
                throw new ArgumentNullException(nameof(settings.Columns));
            }
            if (settings.ColumnToIndexMap == null)
            {
                throw new ArgumentNullException(nameof(settings.ColumnToIndexMap));
            }
            if (settings.Target == null)
            {
                throw new ArgumentNullException(nameof(settings.Target));
            }

            var index          = 0;
            var ansiParameters = settings.AnsiStringParameters?.ToDictionary(
                ansiParam => ansiParam,
                ansiParam => 0) ?? new Dictionary <string, int>();

            // ReSharper disable once LoopCanBeConvertedToQuery
            foreach (var columnName in settings.Columns)
            {
                if (!settings.ColumnToIndexMap.TryGetValue(columnName, out var columnIndex))
                {
                    columnIndex = -1;
                }
                var meta = columnIndex >= 0 ? settings.Metadatas[columnIndex] : ColumnMetadata.NullMeta;

                var param = AddParam(settings.Target, (settings.UseShortParam ? $"P{index++}" : columnName) + (settings.ParamSuffix ?? ""), SqlTypeFromType(meta.DataType));
                if (!string.IsNullOrEmpty(meta.ColumnName) &&
                    (param.DbType == DbType.String || param.DbType == DbType.StringFixedLength) &&
                    ansiParameters.ContainsKey(meta.ColumnName))
                {
                    param.DbType = param.DbType == DbType.String ? DbType.AnsiString : DbType.AnsiStringFixedLength;
                }

                // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
                switch (param.DbType)
                {
                case DbType.AnsiString:
                case DbType.AnsiStringFixedLength:
                case DbType.Binary:
                case DbType.String:
                case DbType.StringFixedLength:
                case DbType.Xml:
                    param.Size = meta.ColumnSize ?? 0;
                    break;

                case DbType.Decimal:
                    param.Precision = (byte)(meta.NumericPrecision ?? 0);
                    param.Scale     = (byte)(meta.NumericScale ?? 0);
                    break;
                }
            }
        }
 public void Map(MetaToParamSettings settings, int batchCount)
 {
     for (var i = 0; i < batchCount; i++)
     {
         if (settings.UseDefaultSuffix)
         {
             settings.ParamSuffix = $"_{i}";
         }
         Map(settings);
     }
 }
Ejemplo n.º 3
0
        protected override void MapParams(IDictionary <string, int> paramToMetaIndex, ref SQLiteCommand sqlCommand, int rowCount)
        {
            var metaToParamSettings = new MetaToParamSettings
            {
                Columns              = ColumnNames,
                Metadatas            = Source.ColumnMetadatas,
                AnsiStringParameters = AnsiStringParameters,
                ColumnToIndexMap     = paramToMetaIndex,
                Target        = sqlCommand.Parameters,
                UseShortParam = true
            };

            SQLiteUtils.ParamMapper.Map(metaToParamSettings, rowCount);
        }
Ejemplo n.º 4
0
        protected override void MapParams(IEnumerable <string> columnNames, Dictionary <string, int> paramToMetaIndex)
        {
            var metaToParamSettings = new MetaToParamSettings
            {
                Columns              = columnNames,
                Metadatas            = Source.ColumnMetadatas,
                AnsiStringParameters = AnsiStringParameters,
                ColumnToIndexMap     = paramToMetaIndex,
                Target        = Cmd.Parameters,
                UseShortParam = false
            };

            ParamMapper.Map(metaToParamSettings);
        }
        protected override void MapParams(IDictionary <string, int> paramToMetaIndex, ref OracleCommand sqlCommand, int rowCount)
        {
            var metaToParamSettings = new MetaToParamSettings
            {
                Columns              = ColumnNames,
                Metadatas            = Source.ColumnMetadatas,
                AnsiStringParameters = AnsiStringParameters,
                ColumnToIndexMap     = paramToMetaIndex,
                Target           = sqlCommand.Parameters,
                UseShortParam    = !UseArrayBinding,
                UseDefaultSuffix = !UseArrayBinding
            };

            OracleUtils.ParamMapper.Map(metaToParamSettings, !UseArrayBinding ? rowCount : 1);
        }