private static void AssertString(string?expected, string?actual, string provider, bool isIDS)
        {
            if (expected != null)
            {
                if (TestProvName.IsiSeriesOleDb(provider))
                {
                    expected = expected.TrimEnd(' ');
                }

                switch (provider)
                {
                case ProviderName.Sybase:
                case ProviderName.SybaseManaged:
                case ProviderName.SqlCe:
                    expected = expected.TrimEnd(' ');
                    break;

                case ProviderName.Informix:
                    expected = isIDS ? expected : expected.TrimEnd('\t', ' ');
                    break;
                }
            }

            Assert.AreEqual(expected, actual);
        }
        private static void AssertNString(string?expected, string?actual, string provider)
        {
            if (expected != null)
            {
                if (TestProvName.IsiSeriesOleDb(provider))
                {
                    expected = expected.TrimEnd(' ');
                }

                if (provider == ProviderName.Sybase ||
                    provider == ProviderName.SybaseManaged ||
                    provider == ProviderName.SqlCe)
                {
                    expected = expected.TrimEnd(' ');
                }
            }

            if (!provider.Contains(ProviderName.Informix))
            {
                Assert.AreEqual(expected, actual);
            }
        }
Beispiel #3
0
        private static char GetParameterToken([MergeDataContextSource] string context)
        {
            if (TestProvName.IsiSeriesODBC(context) || TestProvName.IsiSeriesOleDb(context))
            {
                return('?');
            }

            switch (context)
            {
            case ProviderName.SapHanaOdbc:
            case ProviderName.Informix:
                return('?');

            case ProviderName.SapHanaNative:
            case TestProvName.Oracle11Managed:
            case TestProvName.Oracle11Native:
            case ProviderName.OracleManaged:
            case ProviderName.OracleNative:
                return(':');
            }

            return('@');
        }
        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();
                }
            }
        }
        public void StringTrimming([DataSources(TestProvName.AllInformix)] string context)
        {
            using (var db = GetDataContext(context))
            {
                var lastId = db.GetTable <StringTestTable>().Select(_ => _.Id).Max();

                try
                {
                    var testData = GetStringData(context);

                    foreach (var record in testData)
                    {
                        var query = db.GetTable <StringTestTable>().Value(_ => _.NString, record.NString);

                        if (!SkipChar(context))
                        {
                            query = query.Value(_ => _.String, record.String);
                        }

                        if (context == ProviderName.Firebird ||
                            context == ProviderName.Firebird + ".LinqService" ||
                            context == TestProvName.Firebird3 ||
                            context == TestProvName.Firebird3 + ".LinqService")
                        {
                            query = db.GetTable <StringTestTable>().Value(_ => _.String, record.String);
                        }

                        query.Insert();
                    }

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

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

                    for (var i = 0; i < records.Length; i++)
                    {
                        if (!SkipChar(context))
                        {
                            if (context.Contains("Sybase"))
                            {
                                Assert.AreEqual(testData[i].String?.TrimEnd(' ')?.TrimEnd('\0'), records[i].String);
                            }
                            else
                            {
                                Assert.AreEqual(testData[i].String?.TrimEnd(' '), records[i].String);
                            }
                        }

                        if (context != ProviderName.Firebird &&
                            context != ProviderName.Firebird + ".LinqService" &&
                            context != TestProvName.Firebird3 &&
                            context != TestProvName.Firebird3 + ".LinqService")
                        {
                            if (context.Contains("Sybase"))
                            {
                                Assert.AreEqual(testData[i].NString?.TrimEnd(' ')?.TrimEnd('\0'), records[i].NString);
                            }
                            else if (TestProvName.IsiSeriesOleDb(context) && i == 19)
                            {
                                Assert.AreEqual(testData[i].NString?.TrimEnd(), records[i].NString);
                            }
                            else
                            {
                                Assert.AreEqual(testData[i].NString?.TrimEnd(' '), records[i].NString);
                            }
                        }
                    }
                }
                finally
                {
                    db.GetTable <StringTestTable>().Where(_ => _.Id > lastId).Delete();
                }
            }
        }