Beispiel #1
0
        public void ProviderConnectionStringConstructorTest2([DataSources(false)] string context)
        {
            using (var db = (TestDataConnection)GetDataContext(context))
                using (var db1 = new DataContext(db.DataProvider.Name, "BAD"))
                {
                    if (!TestProvName.IsiSeriesAccessClient(context))
                    {
                        Assert.Throws(typeof(ArgumentException), () => db1.GetTable <Child>().ToList());
                    }
#if NETFRAMEWORK
                    else
                    {
                        Assert.Throws(typeof(IBM.Data.DB2.iSeries.iDB2InvalidConnectionStringException), () => db1.GetTable <Child>().ToList());
                    }
#endif
                }
        }
        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();
                }
            }
        }