private static void AssertDateTimeOffset(DateTimeOffset?expected, DateTimeOffset?actual, string provider)
        {
            if (expected != null)
            {
                if (provider.Contains(ProviderName.PostgreSQL))
                {
                    expected = expected.Value.AddTicks(-expected.Value.Ticks % 10);
                }
            }

            if (provider != ProviderName.SqlServer2000 &&
                provider != ProviderName.SqlServer2005 &&
                provider != ProviderName.SqlCe &&
                !provider.Contains(ProviderName.Informix) &&
                provider != ProviderName.Firebird &&
                provider != TestProvName.Firebird3 &&
                provider != ProviderName.MySql &&
                provider != ProviderName.MySqlConnector &&
                provider != TestProvName.MySql55 &&
                provider != TestProvName.MariaDB &&
                !provider.StartsWith("Access") &&
                provider != ProviderName.SQLiteClassic &&
                provider != TestProvName.SQLiteClassicMiniProfilerMapped &&
                provider != TestProvName.SQLiteClassicMiniProfilerUnmapped &&
                provider != ProviderName.SQLiteMS &&
                provider != ProviderName.Sybase &&
                provider != ProviderName.SybaseManaged &&
                provider != ProviderName.DB2 &&
                !TestProvName.IsiSeries(provider) &&
                !provider.StartsWith(ProviderName.SapHana))
            {
                Assert.AreEqual(expected, actual);
            }
        }
        private StringTestTable[] GetStringData([DataSources] string context)
        {
            var provider = GetProviderName(context, out var _);

            // filter out null-character test cases for servers/providers without support
            if (context.Contains(ProviderName.PostgreSQL) ||
                provider == ProviderName.DB2 ||
                context == ProviderName.DB2 + ".LinqService" ||
                TestProvName.IsiSeries(provider) ||
                TestProvName.IsiSeries(context) ||
                context.Contains("SQLite") ||
                provider == ProviderName.SqlCe ||
                context.Contains(ProviderName.SapHana))
            {
                return(StringTestData.Where(_ => !(_.NString ?? string.Empty).Contains("\0")).ToArray());
            }

            // I wonder why
            if (context.Contains(ProviderName.Firebird))
            {
                return(StringTestData.Where(_ => !(_.NString ?? string.Empty).Contains("\xA0")).ToArray());
            }

            // also strange
            if (context.Contains(TestProvName.AllInformix))
            {
                return(StringTestData.Where(_ => !(_.NString ?? string.Empty).Contains("\0") &&
                                            !(_.NString ?? string.Empty).Any(c => (int)c > byte.MaxValue)).ToArray());
            }

            return(StringTestData);
        }
        public void SqlPropertyNoStoreNonIdentifierGrouping([DataSources] string context)
        {
            using (new FirebirdQuoteMode(FirebirdIdentifierQuoteMode.Auto))
                using (var db = GetDataContext(context))
                    using (db.CreateLocalTable(new []
                    {
                        new DynamicTablePrototype {
                            NotIdentifier = 77, Value = 5
                        },
                        new DynamicTablePrototype {
                            NotIdentifier = 77, Value = 5
                        }
                    }))
                    {
                        var query =
                            from d in db.GetTable <DynamicTable>()
                            group d by new { NI = Sql.Property <int>(d, TestProvName.IsiSeries(context) ? "NotIdentifier" : "Not Identifier") }
                        into g
                            select new
                        {
                            g.Key.NI,
                            Count = g.Count(),
                            Sum   = g.Sum(i => Sql.Property <int>(i, TestProvName.IsiSeries(context) ? "SomeValue" : "Some Value"))
                        };

                        var result = query.ToArray();

                        Assert.AreEqual(77, result[0].NI);
                        Assert.AreEqual(2, result[0].Count);
                        Assert.AreEqual(10, result[0].Sum);
                    }
        }
Beispiel #4
0
 public void CreateDatabase([CreateDatabaseSources] string context)
 {
     if (TestProvName.IsiSeries(context))
     {
         var script = context.Contains("GAS") ? "DB2iSeriesGAS" : "DB2iSeries";
         RunScript(context, "\nGO\n", script);
     }
 }
 private static bool SkipChar([DataSources] string context)
 {
     return(context == ProviderName.SqlCe ||
            context == ProviderName.SqlCe + ".LinqService" ||
            context == ProviderName.DB2 ||
            context == ProviderName.DB2 + ".LinqService" ||
            TestProvName.IsiSeries(context) ||
            context.Contains(ProviderName.PostgreSQL) ||
            context == ProviderName.MySql ||
            context == ProviderName.MySql + ".LinqService" ||
            context == ProviderName.MySqlConnector ||
            context == ProviderName.MySqlConnector + ".LinqService" ||
            context == TestProvName.MySql55 ||
            context == TestProvName.MySql55 + ".LinqService" ||
            context == TestProvName.MariaDB ||
            context == TestProvName.MariaDB + ".LinqService");
 }
        private static void AssertNChar(char?expected, char?actual, string provider)
        {
            if (expected != null)
            {
                if (expected == ' ' &&
                    (provider == ProviderName.MySql ||
                     provider == ProviderName.MySqlConnector ||
                     provider == TestProvName.MariaDB ||
                     provider == TestProvName.MySql55 ||
                     TestProvName.IsiSeries(provider) && !TestProvName.IsiSeriesDB2Connect(provider)
                     // after migration to 2.4.126 provider + SPS4, hana or provider started to trim spaces on insert for some reason
                     || provider.StartsWith(ProviderName.SapHana)))
                {
                    expected = '\0';
                }
            }

            Assert.AreEqual(expected, actual);
        }
        public void SqlPropertyNoStoreNonIdentifier([DataSources] string context)
        {
            using (new FirebirdQuoteMode(FirebirdIdentifierQuoteMode.Auto))
                using (var db = GetDataContext(context))
                    using (db.CreateLocalTable(new []
                    {
                        new DynamicTablePrototype {
                            NotIdentifier = 77
                        }
                    }))
                    {
                        var query =
                            from d in db.GetTable <DynamicTable>()
                            select new
                        {
                            NI = Sql.Property <int>(d, TestProvName.IsiSeries(context) ? "NotIdentifier"  : "Not Identifier")
                        };

                        var result = query.ToArray();

                        Assert.AreEqual(77, result[0].NI);
                    }
        }
        public void DB2Test([IncludeDataSources(ProviderName.DB2)] string context)
        {
            using (var conn = new DataConnection(context))
            {
                var sp       = conn.DataProvider.GetSchemaProvider();
                var dbSchema = sp.GetSchema(conn);

                var table = dbSchema.Tables.Single(t => t.IsDefaultSchema && t.TableName == "ALLTYPES");

                if (TestProvName.IsiSeries(context))
                {
                    var binaryType = TestProvName.IsiSeriesAccessClient(context) ? "BINARY(20)" : "BINARY";

                    Assert.That(table.Columns.Single(c => c.ColumnName == "BINARYDATATYPE").ColumnType, Is.EqualTo(binaryType));
                    Assert.That(table.Columns.Single(c => c.ColumnName == "VARBINARYDATATYPE").ColumnType, Is.EqualTo("VARBIN"));
                }
                else
                {
                    Assert.That(table.Columns.Single(c => c.ColumnName == "BINARYDATATYPE").ColumnType, Is.EqualTo("CHAR (5) FOR BIT DATA"));
                    Assert.That(table.Columns.Single(c => c.ColumnName == "VARBINARYDATATYPE").ColumnType, Is.EqualTo("VARCHAR (5) FOR BIT DATA"));
                }
            }
        }
        public void CharTrimming([DataSources(TestProvName.AllInformix)] string context)
        {
            using (var db = GetDataContext(context))
            {
                var lastId = db.GetTable <CharTestTable>().Select(_ => _.Id).Max();

                try
                {
                    var testData = GetCharData(context);

                    foreach (var record in testData)
                    {
                        var query = db.GetTable <CharTestTable>().Value(_ => _.NChar, record.NChar);
                        if (!SkipChar(context))
                        {
                            query = query.Value(_ => _.Char, record.Char);
                        }

                        if (context.Contains(ProviderName.Firebird))
                        {
                            query = db.GetTable <CharTestTable>().Value(_ => _.Char, record.Char);
                        }

                        query.Insert();
                    }

                    var records = db.GetTable <CharTestTable>().Where(_ => _.Id > lastId).OrderBy(_ => _.Id).ToArray();

                    Assert.AreEqual(testData.Length, records.Length);

                    for (var i = 0; i < records.Length; i++)
                    {
                        if (context.StartsWith(ProviderName.SapHana))
                        {
                            // SAP or provider trims space and we return default value, which is \0 for char
                            // or we insert it incorrectly?
                            if (testData[i].Char == ' ')
                            {
                                Assert.AreEqual('\0', records[i].Char);
                            }
                            else
                            {
                                Assert.AreEqual(testData[i].Char, records[i].Char);
                            }

                            if (testData[i].NChar == ' ')
                            {
                                Assert.AreEqual('\0', records[i].NChar);
                            }
                            else
                            {
                                Assert.AreEqual(testData[i].NChar, records[i].NChar);
                            }

                            continue;
                        }

                        if (!SkipChar(context))
                        {
                            if (context.Contains("Sybase"))
                            {
                                Assert.AreEqual(testData[i].Char == '\0' ? ' ' : testData[i].Char, records[i].Char);
                            }
                            else
                            {
                                Assert.AreEqual(testData[i].Char, records[i].Char);
                            }
                        }

                        if (TestProvName.IsiSeriesOleDb(context) && i == 18)
                        {
                            Assert.AreEqual('\0', records[i].NChar);
                        }
                        else if (context == ProviderName.MySql ||
                                 context == ProviderName.MySql + ".LinqService" ||
                                 context == ProviderName.MySqlConnector ||
                                 context == ProviderName.MySqlConnector + ".LinqService" ||
                                 context == TestProvName.MySql55 ||
                                 context == TestProvName.MySql55 + ".LinqService" ||
                                 context == TestProvName.MariaDB ||
                                 context == TestProvName.MariaDB + ".LinqService" ||
                                 TestProvName.IsiSeries(context)
                                 )
                        {
                            // for some reason mysql doesn't insert space
                            Assert.AreEqual(testData[i].NChar == ' ' ? '\0' : testData[i].NChar, records[i].NChar);
                        }
                        else if (!context.Contains(ProviderName.Firebird))
                        {
                            if (context.Contains("Sybase") || TestProvName.IsiSeriesAccessClient(context))
                            {
                                Assert.AreEqual(testData[i].NChar == '\0' ? ' ' : testData[i].NChar, records[i].NChar);
                            }
                            else
                            {
                                Assert.AreEqual(testData[i].NChar, records[i].NChar);
                            }
                        }
                    }
                }
                finally
                {
                    db.GetTable <CharTestTable>().Where(_ => _.Id > lastId).Delete();
                }
            }
        }