Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Support LINQ queries with EndsWith method, fix for [59edc1018b]. Add test to verify the behavior from ticket [00f86f9739]. Modify test results/handling for ticket [8b7d179c3c] to be consistent with these new tests. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
7810393e989359693c9827ba4cff9167 |
User & Date: | mistachkin 2011-09-07 10:31:02.159 |
References
2011-09-07
| ||
10:32 | • Closed ticket [59edc1018b]: String.EndsWith doesn't work plus 2 other changes artifact: 39cdf34b7b user: mistachkin | |
Context
2011-09-11
| ||
13:14 | Fix debug builds of the native interop assembly by making sure that SQLITE_WIN32_MALLOC is not defined with SQLITE_MEMDEBUG (i.e. they are mutually exclusive at compile-time). check-in: 7ef5b80330 user: mistachkin tags: trunk | |
2011-09-07
| ||
10:31 | Support LINQ queries with EndsWith method, fix for [59edc1018b]. Add test to verify the behavior from ticket [00f86f9739]. Modify test results/handling for ticket [8b7d179c3c] to be consistent with these new tests. check-in: 7810393e98 user: mistachkin tags: trunk | |
2011-09-03
| ||
15:36 | More comment updates to test suite. check-in: 5f2352effe user: mistachkin tags: trunk | |
Changes
Changes to System.Data.SQLite.Linq/SQL Generation/SqlGenerator.cs.
︙ | ︙ | |||
331 332 333 334 335 336 337 338 339 340 341 342 343 344 | functionHandlers.Add("IndexOf", HandleCanonicalFunctionIndexOf); functionHandlers.Add("Length", HandleCanonicalFunctionLength); functionHandlers.Add("NewGuid", HandleCanonicalFunctionNewGuid); functionHandlers.Add("Round", HandleCanonicalFunctionRound); functionHandlers.Add("ToLower", HandleCanonicalFunctionToLower); functionHandlers.Add("ToUpper", HandleCanonicalFunctionToUpper); functionHandlers.Add("Trim", HandleCanonicalFunctionTrim); functionHandlers.Add("CurrentDateTime", HandleGetDateFunction); functionHandlers.Add("CurrentUtcDateTime", HandleGetUtcDateFunction); //DatePartFunctions functionHandlers.Add("Year", HandleCanonicalFunctionDatepart); functionHandlers.Add("Month", HandleCanonicalFunctionDatepart); functionHandlers.Add("Day", HandleCanonicalFunctionDatepart); | > | 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | functionHandlers.Add("IndexOf", HandleCanonicalFunctionIndexOf); functionHandlers.Add("Length", HandleCanonicalFunctionLength); functionHandlers.Add("NewGuid", HandleCanonicalFunctionNewGuid); functionHandlers.Add("Round", HandleCanonicalFunctionRound); functionHandlers.Add("ToLower", HandleCanonicalFunctionToLower); functionHandlers.Add("ToUpper", HandleCanonicalFunctionToUpper); functionHandlers.Add("Trim", HandleCanonicalFunctionTrim); functionHandlers.Add("Right", HandleCanonicalFunctionRight); functionHandlers.Add("CurrentDateTime", HandleGetDateFunction); functionHandlers.Add("CurrentUtcDateTime", HandleGetUtcDateFunction); //DatePartFunctions functionHandlers.Add("Year", HandleCanonicalFunctionDatepart); functionHandlers.Add("Month", HandleCanonicalFunctionDatepart); functionHandlers.Add("Day", HandleCanonicalFunctionDatepart); |
︙ | ︙ | |||
2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 | Debug.Assert(e.Arguments.Count == 1, "Trim should have one argument"); result.Append(e.Arguments[0].Accept(sqlgen)); result.Append(")"); return result; } /// <summary> /// Function rename ToLower -> LOWER /// </summary> /// <param name="sqlgen"></param> /// <param name="e"></param> /// <returns></returns> | > > > > > > > > > > > > > > > > > > > > > > > | 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 | Debug.Assert(e.Arguments.Count == 1, "Trim should have one argument"); result.Append(e.Arguments[0].Accept(sqlgen)); result.Append(")"); return result; } /// <summary> /// RIGHT(string, length) -> SUBSTR(string, -(length), length) /// </summary> /// <param name="sqlgen"></param> /// <param name="e"></param> /// <returns></returns> private static ISqlFragment HandleCanonicalFunctionRight(SqlGenerator sqlgen, DbFunctionExpression e) { SqlBuilder result = new SqlBuilder(); result.Append("SUBSTR("); Debug.Assert(e.Arguments.Count == 2, "Right should have two arguments"); result.Append(e.Arguments[0].Accept(sqlgen)); result.Append(", -("); result.Append(e.Arguments[1].Accept(sqlgen)); result.Append("), "); result.Append(e.Arguments[1].Accept(sqlgen)); result.Append(")"); return result; } /// <summary> /// Function rename ToLower -> LOWER /// </summary> /// <param name="sqlgen"></param> /// <param name="e"></param> /// <returns></returns> |
︙ | ︙ |
Added Tests/tkt-00f86f9739.eagle.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | ############################################################################### # # tkt-00f86f9739.eagle -- # # Written by Joe Mistachkin. # Released to the public domain, use at your own risk! # ############################################################################### package require Eagle package require EagleLibrary package require EagleTest runTestPrologue ############################################################################### source [file join $path common.eagle] runSQLiteTestPrologue ############################################################################### # # NOTE: Setup the variables that refer to the various files required by the # tests in this file. # set testLinqExeFile [getBuildFileName testlinq.exe] set northwindEfDbFile [file nativename [file join [file dirname $path] \ testlinq northwindEF.db]] # # NOTE: Setup the test constraints specific to the tests in this file. # if {![haveConstraint file_[file tail $testLinqExeFile]]} then { checkForFile $test_channel $testLinqExeFile } if {![haveConstraint file_[file tail $northwindEfDbFile]]} then { checkForFile $test_channel $northwindEfDbFile } ############################################################################### runTest {test tkt-00f86f9739-1.1 {LINQ with StartsWith} -body { set result [list] foreach value [list "" a b z 1+1 don notthere] { set code [catch { testExec $testLinqExeFile [list -eventflags Wait -directory \ [file dirname $testLinqExeFile] -nocarriagereturns -stdout output \ -success 0] -startsWith $value } error] tlog "---- BEGIN STDOUT OUTPUT\n" tlog $output tlog "\n---- END STDOUT OUTPUT\n" lappend result $code if {$code == 0} then { lappend result [string trim $output] } else { lappend result [string trim $error] } } set result } -cleanup { unset -nocomplain code output error result value } -constraints {eagle file_testlinq.exe file_northwindEF.db} -result \ {0 {} 0 {DRACD OLDWO RATTC} 0 {ALFKI CACTU CHOPS FOLKO GALED KOENE LILAS MAGAA\ MAISD OCEAN RANCH SAVEA THECR} 0 {} 0 {} 0 {} 0 {}}} ############################################################################### unset -nocomplain testLinqExeFile northwindEfDbFile ############################################################################### runSQLiteTestEpilogue runTestEpilogue |
Added Tests/tkt-59edc1018b.eagle.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | ############################################################################### # # tkt-59edc1018b.eagle -- # # Written by Joe Mistachkin. # Released to the public domain, use at your own risk! # ############################################################################### package require Eagle package require EagleLibrary package require EagleTest runTestPrologue ############################################################################### source [file join $path common.eagle] runSQLiteTestPrologue ############################################################################### # # NOTE: Setup the variables that refer to the various files required by the # tests in this file. # set testLinqExeFile [getBuildFileName testlinq.exe] set northwindEfDbFile [file nativename [file join [file dirname $path] \ testlinq northwindEF.db]] # # NOTE: Setup the test constraints specific to the tests in this file. # if {![haveConstraint file_[file tail $testLinqExeFile]]} then { checkForFile $test_channel $testLinqExeFile } if {![haveConstraint file_[file tail $northwindEfDbFile]]} then { checkForFile $test_channel $northwindEfDbFile } ############################################################################### runTest {test tkt-59edc1018b-1.1 {LINQ with EndsWith} -body { set result [list] foreach value [list "" a b z 1+1 don notthere] { set code [catch { testExec $testLinqExeFile [list -eventflags Wait -directory \ [file dirname $testLinqExeFile] -nocarriagereturns -stdout output \ -success 0] -endsWith $value } error] tlog "---- BEGIN STDOUT OUTPUT\n" tlog $output tlog "\n---- END STDOUT OUTPUT\n" lappend result $code if {$code == 0} then { lappend result [string trim $output] } else { lappend result [string trim $error] } } set result } -cleanup { unset -nocomplain code output error result value } -constraints {eagle file_testlinq.exe file_northwindEF.db} -result \ {0 {} 0 {FURIB GALED GODOS LAZYK LINOD PRINI REGGC WOLZA} 0 {} 0 ERNSH 0 {} 0\ {AROUT BSBEV CONSH EASTC NORTS SEVES} 0 {}}} ############################################################################### unset -nocomplain testLinqExeFile northwindEfDbFile ############################################################################### runSQLiteTestEpilogue runTestEpilogue |
Changes to Tests/tkt-8b7d179c3c.eagle.
︙ | ︙ | |||
51 52 53 54 55 56 57 | -success 0] -skip $pageSize } error] tlog "---- BEGIN STDOUT OUTPUT\n" tlog $output tlog "\n---- END STDOUT OUTPUT\n" | | | > > > > | > | > < | | | | | | | | | | | | | | | | < | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | -success 0] -skip $pageSize } error] tlog "---- BEGIN STDOUT OUTPUT\n" tlog $output tlog "\n---- END STDOUT OUTPUT\n" lappend result $code if {$code == 0} then { lappend result [string trim $output] } else { lappend result [string trim $error] } } set result } -cleanup { unset -nocomplain code output error result pageSize } -constraints {eagle file_testlinq.exe file_northwindEF.db} -result \ {0 {} 0 {DRACD RATTC OLDWO GALED LILAS MAGAA ALFKI CHOPS SAVEA KOENE MAISD\ FOLKO CACTU OCEAN RANCH THECR GOURL GROSR SUPRD HUNGO ISLAT QUICK HUNGC GREAL\ LEHMS RICSU ERNSH WILMK LINOD TRAIH SIMOB OTTIK SPLIR MORGK FOLIG FURIB PRINI\ AROUT BSBEV CONSH EASTC NORTS SEVES BERGS VICTE BOLID FISSA ROMEY BLAUS BONAP\ MEREP ANATR ANTON CENTC PERIC TORTU FRANK TOMSP DUMON FRANR WARTH PARIS SPECD\ LONEP THEBI REGGC VINET WELLI HANAR QUEDE RICAR PICCO HILAA LETSS COMMI FAMIA\ QUEEN TRADH WHITC GODOS SANTG BLONP WANDK FRANS LAMAI BOTTM LAUGB LACOR LAZYK\ WOLZA VAFFE} 0 {DRACD RATTC OLDWO GALED LILAS MAGAA ALFKI CHOPS SAVEA KOENE\ MAISD FOLKO CACTU OCEAN RANCH THECR GOURL GROSR SUPRD HUNGO ISLAT QUICK HUNGC\ GREAL LEHMS RICSU ERNSH WILMK LINOD TRAIH SIMOB OTTIK SPLIR MORGK FOLIG FURIB\ PRINI AROUT BSBEV CONSH EASTC NORTS SEVES BERGS VICTE BOLID FISSA ROMEY BLAUS\ BONAP MEREP ANATR ANTON CENTC PERIC TORTU FRANK TOMSP DUMON FRANR WARTH PARIS\ SPECD LONEP THEBI REGGC VINET WELLI HANAR QUEDE RICAR PICCO HILAA LETSS COMMI\ FAMIA QUEEN TRADH WHITC GODOS SANTG BLONP WANDK FRANS LAMAI BOTTM LAUGB LACOR\ LAZYK WOLZA VAFFE}}} ############################################################################### unset -nocomplain testLinqExeFile northwindEfDbFile ############################################################################### |
︙ | ︙ |
Changes to testlinq/Program.cs.
︙ | ︙ | |||
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | if (arg != null) pageSize = int.Parse(arg.Trim()); } return SkipTest(pageSize); } default: { Console.WriteLine("unknown test \"{0}\"", arg); return 1; } } } private static int SkipTest(int pageSize) { using (northwindEFEntities db = new northwindEFEntities()) { bool once = false; int count = db.Customers.Count(); | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | if (arg != null) pageSize = int.Parse(arg.Trim()); } return SkipTest(pageSize); } case "endswith": { string value = null; if (args.Length > 1) { value = args[1]; if (value != null) value = value.Trim(); } return EndsWithTest(value); } case "startswith": { string value = null; if (args.Length > 1) { value = args[1]; if (value != null) value = value.Trim(); } return StartsWithTest(value); } default: { Console.WriteLine("unknown test \"{0}\"", arg); return 1; } } } // // NOTE: Used to test the fix for ticket [8b7d179c3c]. // private static int SkipTest(int pageSize) { using (northwindEFEntities db = new northwindEFEntities()) { bool once = false; int count = db.Customers.Count(); |
︙ | ︙ | |||
89 90 91 92 93 94 95 96 97 98 99 100 101 102 | Console.Write(customers.CustomerID); once = true; } } } return 0; } private static int OldTests() { using (northwindEFEntities db = new northwindEFEntities()) | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | Console.Write(customers.CustomerID); once = true; } } } return 0; } // // NOTE: Used to test the fix for ticket [59edc1018b]. // private static int EndsWithTest(string value) { using (northwindEFEntities db = new northwindEFEntities()) { bool once = false; var query = from c in db.Customers where c.City.EndsWith(value) orderby c.CustomerID select c; foreach (Customers customers in query) { if (once) Console.Write(' '); Console.Write(customers.CustomerID); once = true; } } return 0; } // // NOTE: Used to verify the behavior from ticket [00f86f9739]. // private static int StartsWithTest(string value) { using (northwindEFEntities db = new northwindEFEntities()) { bool once = false; var query = from c in db.Customers where c.City.StartsWith(value) orderby c.CustomerID select c; foreach (Customers customers in query) { if (once) Console.Write(' '); Console.Write(customers.CustomerID); once = true; } } return 0; } private static int OldTests() { using (northwindEFEntities db = new northwindEFEntities()) |
︙ | ︙ |