/// <summary>
 /// Build a DB2 iSeries data provider. The name will be infered from options and will be one of the constants in the DB2iSeriesProviderName class
 /// </summary>
 /// <param name="providerType">Undelying Ado.Net provider type</param>
 /// <param name="version">iSeries version</param>
 /// <param name="mappingOptions">Mapping specific options</param>
 public DB2iSeriesDataProvider(
     DB2iSeriesProviderType providerType     = DB2iSeriesProviderOptions.Defaults.ProviderType,
     DB2iSeriesVersion version               = DB2iSeriesProviderOptions.Defaults.Version,
     DB2iSeriesMappingOptions mappingOptions = null)
     : this(DB2iSeriesProviderName.GetProviderName(version, providerType, mappingOptions ?? DB2iSeriesMappingOptions.Default))
 {
 }
Exemplo n.º 2
0
 public static DB2iSeriesDataProvider GetDataProvider(
     DB2iSeriesVersion version,
     DB2iSeriesProviderType providerType,
     DB2iSeriesMappingOptions mappingOptions)
 {
     return(GetDataProvider(DB2iSeriesProviderName.GetProviderName(version, providerType, mappingOptions)));
 }
Exemplo n.º 3
0
 public static DataConnection CreateDataConnection(
     string connectionString,
     DB2iSeriesVersion version,
     DB2iSeriesProviderType providerType,
     bool mapGuidAsString)
 {
     return(new DataConnection(GetDataProvider(version, providerType, new DB2iSeriesMappingOptions(mapGuidAsString)), connectionString));
 }
 public DB2iSeriesProviderOptions(string providerName, DB2iSeriesProviderType providerType, DB2iSeriesVersion version)
     : this(providerName, providerType)
 {
     SupportsOffsetClause   = version > DB2iSeriesVersion.V7_2;
     SupportsTruncateTable  = version > DB2iSeriesVersion.V7_1 && !providerType.IsOdbc();
     SupportsMergeStatement = version >= DB2iSeriesVersion.V7_1;
     SupportsNCharTypes     = version >= DB2iSeriesVersion.V7_1;
 }
        private DB2iSeriesVersion GetServerMinLevel(string connectionString, DB2iSeriesProviderType providerType)
        {
            var version = GetServerVersion(connectionString, providerType);

            return(version switch
            {
                var x when x >= new ServerVersion(7, 2, 9) => DB2iSeriesVersion.V7_3,
                var x when x >= new ServerVersion(7, 2, 0) => DB2iSeriesVersion.V7_2,
                _ => DB2iSeriesVersion.V7_1
            });
 public DB2iSeriesSqlProviderFlags(
     DB2iSeriesVersion version,
     DB2iSeriesProviderType providerType)
     : this(
         supportsOffsetClause : version >= DB2iSeriesVersion.V7_3,
         supportsTruncateTable : version >= DB2iSeriesVersion.V7_2,
         supportsNamedParameters : providerType.IsIBM()
         )
 {
 }
 /// <summary>
 /// Build a DB2 iSeries data provider.
 /// </summary>
 /// <param name="name">Configuration name</param>
 /// <param name="providerType">Undelying Ado.Net provider type</param>
 /// <param name="version">iSeries version</param>
 /// <param name="mappingOptions">Mapping specific options</param>
 public DB2iSeriesDataProvider(
     string name,
     DB2iSeriesProviderType providerType     = DB2iSeriesProviderOptions.Defaults.ProviderType,
     DB2iSeriesVersion version               = DB2iSeriesProviderOptions.Defaults.Version,
     DB2iSeriesMappingOptions mappingOptions = null)
     : this(new DB2iSeriesProviderOptions(name, providerType, version)
 {
     MapGuidAsString = mappingOptions?.MapGuidAsString ?? DB2iSeriesProviderOptions.Defaults.MapGuidAsString
 })
 {
 }
Exemplo n.º 8
0
 public DB2iSeriesSqlProviderFlags(
     DB2iSeriesVersion version,
     DB2iSeriesProviderType providerType)
     : this(
         supportsOffsetClause : version >= DB2iSeriesVersion.V7_3,
         supportsTruncateTable : version >= DB2iSeriesVersion.V7_2 && !providerType.IsOdbc(),
         supportsNamedParameters : providerType.IsIBM(),
         supportsMergeStatement : version >= DB2iSeriesVersion.V7_1,
         supportsNCharTypes : version >= DB2iSeriesVersion.V7_1
         )
 {
 }
        /// <summary>
        /// Build a DB2 iSeries data provider.
        /// </summary>
        /// <param name="providerOptions">The provider's construction options, see <see cref="DB2iSeriesProviderOptions"/></param>
        public DB2iSeriesDataProvider(DB2iSeriesProviderOptions providerOptions)
            : base(
                providerOptions.ProviderName,
                GetMappingSchema(
                    providerOptions.ProviderName,
                    providerOptions.ProviderType,
                    providerOptions.MapGuidAsString),
                DB2iSeriesProviderAdapter.GetInstance(providerOptions.ProviderType))
        {
            this.db2iSeriesSqlProviderFlags = new DB2iSeriesSqlProviderFlags(providerOptions);
            this.mappingOptions             = new DB2iSeriesMappingOptions(providerOptions);
            this.ProviderType = providerOptions.ProviderType;

            DB2iSeriesLoadExpressions.SetupExpressions(providerOptions.ProviderName, mappingOptions.MapGuidAsString);

            SqlProviderFlags.AcceptsTakeAsParameter            = false;
            SqlProviderFlags.AcceptsTakeAsParameterIfSkip      = true;
            SqlProviderFlags.IsDistinctOrderBySupported        = false;
            SqlProviderFlags.CanCombineParameters              = false;
            SqlProviderFlags.IsCommonTableExpressionsSupported = true;
            SqlProviderFlags.IsUpdateFromSupported             = false;

            db2iSeriesSqlProviderFlags.SetCustomFlags(SqlProviderFlags);
            mappingOptions.SetCustomFlags(SqlProviderFlags);

            SetCharField(Constants.DbTypes.Char, (r, i) => r.GetString(i).TrimEnd(' '));
            SetCharField(Constants.DbTypes.NChar, (r, i) => r.GetString(i).TrimEnd(' '));
            SetCharField(Constants.DbTypes.Graphic, (r, i) => r.GetString(i).TrimEnd(' '));

            sqlOptimizer   = new DB2iSeriesSqlOptimizer(SqlProviderFlags, db2iSeriesSqlProviderFlags);
            schemaProvider = new DB2iSeriesSchemaProvider(this);
            bulkCopy       = new DB2iSeriesBulkCopy(this);

            if (ProviderType.IsOdbc())
            {
                SetupOdbc();
            }
            else if (ProviderType.IsOleDb())
            {
                SetupOleDb();
            }
#if NETFRAMEWORK
            else if (ProviderType.IsAccessClient())
            {
                SetupAccessClient();
            }
#endif
            else if (ProviderType.IsDB2())
            {
                SetupDB2Connect();
            }
        }
Exemplo n.º 10
0
        public DB2iSeriesProviderAdapter(DB2iSeriesProviderType providerType)
        {
            adapter = providerType switch
            {
#if NETFRAMEWORK
                DB2iSeriesProviderType.AccessClient => DB2iSeriesAccessClientProviderAdapter.GetInstance(),
#endif
                DB2iSeriesProviderType.Odbc => OdbcProviderAdapter.GetInstance(),
                DB2iSeriesProviderType.OleDb => OleDbProviderAdapter.GetInstance(),
                DB2iSeriesProviderType.DB2 => DB2.DB2ProviderAdapter.GetInstance(),
                _ => throw ExceptionHelper.InvalidAdoProvider(providerType)
            };
            this.ProviderType = providerType;
        }
        private ServerVersion GetServerVersion(string connectionString, DB2iSeriesProviderType providerType)
        {
            using (var conn = (DbConnection)DB2iSeriesTools.GetDataProvider(DB2iSeriesVersion.V7_1, providerType, DB2iSeriesMappingOptions.Default).CreateConnection(connectionString))
            {
                conn.Open();

                var serverVersionParts = conn.ServerVersion.Substring(0, 5).Split('.');
                var major = int.Parse(serverVersionParts.First());
                var minor = int.Parse(serverVersionParts.Last());

                var patchLevel = GetMaxPatchLevel(conn, major, minor);

                return(new ServerVersion(major, minor, patchLevel));
            }
        }
        private static MappingSchema GetMappingSchema(string configuration, DB2iSeriesProviderType providerType, bool mapGuidAsString)
        {
            var providerSchema = providerType switch
            {
#if NETFRAMEWORK
                DB2iSeriesProviderType.AccessClient => DB2iSeriesAccessClientProviderAdapter.GetInstance().MappingSchema,
#endif
                DB2iSeriesProviderType.DB2 => DB2.DB2ProviderAdapter.GetInstance().MappingSchema,
                _ => new MappingSchema()
            };

            return(mapGuidAsString
                                ? (MappingSchema) new DB2iSeriesGuidAsStringMappingSchema(configuration, providerSchema)
                                : new DB2iSeriesMappingSchema(configuration, providerSchema));
        }
        public static string GetProviderName(
            DB2iSeriesVersion version,
            DB2iSeriesProviderType providerType,
            DB2iSeriesMappingOptions mappingOptions)
        {
            var mapGuidAsString = mappingOptions.MapGuidAsString;

            return(providerType switch
            {
#if NETFRAMEWORK
                DB2iSeriesProviderType.AccessClient => version switch
                {
                    DB2iSeriesVersion.V7_1 => mapGuidAsString ? DB2_AccessClient_71_GAS : DB2_AccessClient_71,
                    DB2iSeriesVersion.V7_2 => mapGuidAsString ? DB2_AccessClient_72_GAS : DB2_AccessClient_72,
                    _ => mapGuidAsString ? DB2_AccessClient_73_GAS : DB2_AccessClient_73,
                },
Exemplo n.º 14
0
 public static bool IsDB2(this DB2iSeriesProviderType providerType)
 => providerType == DB2iSeriesProviderType.DB2;
Exemplo n.º 15
0
        public static bool IsAccessClient(this DB2iSeriesProviderType providerType)
        =>
#if NETFRAMEWORK
        providerType == DB2iSeriesProviderType.AccessClient;
Exemplo n.º 16
0
        public static bool IsIBM(this DB2iSeriesProviderType providerType)
        => providerType == DB2iSeriesProviderType.DB2
#if NETFRAMEWORK
        || providerType == DB2iSeriesProviderType.AccessClient
#endif
        ;
 public DB2iSeriesProviderOptions(string providerName, DB2iSeriesProviderType providerType, DB2iSeriesVersion version)
     : this(providerName, providerType)
 {
     SupportsOffsetClause  = version > DB2iSeriesVersion.V7_2;
     SupportsTruncateTable = version > DB2iSeriesVersion.V7_1;
 }
 public DB2iSeriesProviderOptions(string providerName, DB2iSeriesProviderType providerType)
 {
     ProviderType = providerType;
     ProviderName = providerName;
 }
Exemplo n.º 19
0
 public static LinqToDBException InvalidAdoProvider(DB2iSeriesProviderType providerType)
 => new LinqToDBException($"Invalid ADO.net provider type {providerType} for iSeries DataProvider.");
Exemplo n.º 20
0
 public DB2iSeriesDataProviderV5R4(DB2iSeriesProviderType providerType) : base($"DB2.iSeries.{providerType}.54", providerType, version: DB2iSeriesVersionRelease.V7_1)
 {
     sqlOptimizer = new DB2iSeriesSqlOptimizerV5R4(SqlProviderFlags);
 }