diff --git a/coverage/tests.lcov b/coverage/tests.lcov index adf2d7a..1c72b78 100644 --- a/coverage/tests.lcov +++ b/coverage/tests.lcov @@ -1,7 +1,7 @@ -------------------|---------|----------|---------|---------|--------------------------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -------------------|---------|----------|---------|---------|--------------------------------------- -All files | 95.64 | 94.11 | 94.25 | 95.64 | +All files | 95.66 | 94.13 | 94.31 | 95.66 | JoinTables.js | 99.7 | 98.07 | 100 | 99.7 | 291,579 ScriptSettings.js | 93.47 | 75 | 100 | 93.47 | 51-52,81-82,85-87,122-123 SimpleParser.js | 98.38 | 97.51 | 100 | 98.38 | ...14,186-191,440-443,617-622,920-921 @@ -9,12 +9,12 @@ All files | 95.64 | 94.11 | 94.25 | 95.64 | SqlTest.js | 93.18 | 93.97 | 89.62 | 93.18 | ...4093,4820-4824,4835-4838,4841-4852 Table.js | 98.71 | 88.46 | 100 | 98.71 | 77-78,158-160,163-164 TableData.js | 83.55 | 68.08 | 83.33 | 83.55 | ...27,362-363,390-391,401-403,409-412 - Views.js | 98.21 | 96.3 | 96.29 | 98.21 | ...1997-2006,2014-2025,2195,2397-2398 + Views.js | 98.25 | 96.33 | 96.44 | 98.25 | ...1997-2006,2014-2025,2175,2464-2465 -------------------|---------|----------|---------|---------|--------------------------------------- -------------------|---------|----------|---------|---------|--------------------------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -------------------|---------|----------|---------|---------|--------------------------------------- -All files | 95.64 | 94.11 | 94.25 | 95.64 | +All files | 95.66 | 94.13 | 94.31 | 95.66 | JoinTables.js | 99.7 | 98.07 | 100 | 99.7 | 291,579 ScriptSettings.js | 93.47 | 75 | 100 | 93.47 | 51-52,81-82,85-87,122-123 SimpleParser.js | 98.38 | 97.51 | 100 | 98.38 | ...14,186-191,440-443,617-622,920-921 @@ -22,7 +22,7 @@ All files | 95.64 | 94.11 | 94.25 | 95.64 | SqlTest.js | 93.18 | 93.97 | 89.62 | 93.18 | ...4093,4820-4824,4835-4838,4841-4852 Table.js | 98.71 | 88.46 | 100 | 98.71 | 77-78,158-160,163-164 TableData.js | 83.55 | 68.08 | 83.33 | 83.55 | ...27,362-363,390-391,401-403,409-412 - Views.js | 98.21 | 96.3 | 96.29 | 98.21 | ...1997-2006,2014-2025,2195,2397-2398 + Views.js | 98.25 | 96.33 | 96.44 | 98.25 | ...1997-2006,2014-2025,2175,2464-2465 -------------------|---------|----------|---------|---------|--------------------------------------- TN: SF:JoinTables.js @@ -5092,8 +5092,8 @@ DA:290,1 DA:291,1 DA:292,1 DA:293,1 -DA:294,1253308 -DA:295,1253308 +DA:294,1234576 +DA:295,1234576 DA:296,1 DA:297,1 DA:298,1 @@ -9932,7 +9932,7 @@ BRDA:278,53,0,6 BRDA:280,54,0,0 BRDA:282,55,0,1 BRDA:289,56,0,1 -BRDA:293,57,0,1253308 +BRDA:293,57,0,1234576 BRDA:305,58,0,233 BRDA:398,59,0,149 BRDA:408,60,0,245 @@ -11526,51 +11526,58 @@ FN:2089,caseEnd FN:2109,ConglomerateRecord FN:2121,squish FN:2145,aggregateColumn -FN:2222,minCase -FN:2234,maxCase -FN:2245,TableFields -FN:2259,loadVirtualFields -FN:2298,sortPrimaryFields -FN:2317,indexTableField -FN:2344,findTableField -FN:2354,hasField -FN:2363,getFieldInfo -FN:2372,getTableInfo -FN:2382,getFieldColumn -FN:2392,getSelectFieldColumn -FN:2416,updateSelectFieldList -FN:2446,updateColumnAsSelected -FN:2479,updateCalculatedAsSelected -FN:2498,updateConstantAsSelected -FN:2517,getNextSelectColumnNumber -FN:2530,getTempSelectedColumnNumbers -FN:2547,getSelectFields -FN:2558,getColumnNames -FN:2570,getColumnTitles -FN:2594,updateDerivedTableVirtualFields -FN:2622,parseAstSelectField -FN:2651,getSelectCountModifiers -FN:2683,getConglomerateFieldCount -FN:2693,TableField -FN:2730,get tableColumn -FN:2739,setOriginalTable -FN:2749,setOriginalTableColumn -FN:2759,addAlias -FN:2777,setSelectColumn -FN:2788,setIsTempField -FN:2798,setAggregateFunction -FN:2808,setCalculatedFormula -FN:2818,setSubQueryAst -FN:2828,setColumnTitle -FN:2838,setColumnName -FN:2848,setDistinctSetting -FN:2858,setIsPrimaryTable -FN:2867,get isPrimaryTable -FN:2876,setTableInfo -FN:2886,getData -FN:2897,getAllExtendedAliasNames -FNF:162 -FNH:156 +FN:2195,aggregateColumnToNumeric +FN:2211,AggregateTrack +FN:2225,minCase +FN:2237,maxCase +FN:2249,sum +FN:2260,getAverage +FN:2269,count +FN:2284,addGroupConcatItem +FN:2297,getGroupConcat +FN:2312,TableFields +FN:2326,loadVirtualFields +FN:2365,sortPrimaryFields +FN:2384,indexTableField +FN:2411,findTableField +FN:2421,hasField +FN:2430,getFieldInfo +FN:2439,getTableInfo +FN:2449,getFieldColumn +FN:2459,getSelectFieldColumn +FN:2483,updateSelectFieldList +FN:2513,updateColumnAsSelected +FN:2546,updateCalculatedAsSelected +FN:2565,updateConstantAsSelected +FN:2584,getNextSelectColumnNumber +FN:2597,getTempSelectedColumnNumbers +FN:2614,getSelectFields +FN:2625,getColumnNames +FN:2637,getColumnTitles +FN:2661,updateDerivedTableVirtualFields +FN:2689,parseAstSelectField +FN:2718,getSelectCountModifiers +FN:2750,getConglomerateFieldCount +FN:2760,TableField +FN:2797,get tableColumn +FN:2806,setOriginalTable +FN:2816,setOriginalTableColumn +FN:2826,addAlias +FN:2844,setSelectColumn +FN:2855,setIsTempField +FN:2865,setAggregateFunction +FN:2875,setCalculatedFormula +FN:2885,setSubQueryAst +FN:2895,setColumnTitle +FN:2905,setColumnName +FN:2915,setDistinctSetting +FN:2925,setIsPrimaryTable +FN:2934,get isPrimaryTable +FN:2943,setTableInfo +FN:2953,getData +FN:2964,getAllExtendedAliasNames +FNF:169 +FNH:163 FNDA:344,SelectTables FNDA:336,updateSelectedFields FNDA:340,join @@ -11690,8 +11697,15 @@ FNDA:6080,caseEnd FNDA:141,ConglomerateRecord FNDA:251,squish FNDA:418,aggregateColumn +FNDA:876,aggregateColumnToNumeric +FNDA:418,AggregateTrack FNDA:99,minCase FNDA:216,maxCase +FNDA:363,sum +FNDA:40,getAverage +FNDA:181,count +FNDA:17,addGroupConcatItem +FNDA:6,getGroupConcat FNDA:344,TableFields FNDA:340,loadVirtualFields FNDA:3695,sortPrimaryFields @@ -13882,260 +13896,260 @@ DA:2146,418 DA:2147,418 DA:2148,418 DA:2149,418 -DA:2150,418 -DA:2151,418 -DA:2152,418 -DA:2153,1179 -DA:2154,1179 +DA:2150,1179 +DA:2151,1179 +DA:2152,876 +DA:2153,876 +DA:2154,876 DA:2155,876 -DA:2156,876 -DA:2157,1179 -DA:2158,48 -DA:2159,48 -DA:2160,828 -DA:2161,828 -DA:2162,828 -DA:2163,828 -DA:2164,876 -DA:2165,876 -DA:2166,1179 -DA:2167,245 -DA:2168,245 -DA:2169,1179 -DA:2170,181 -DA:2171,181 -DA:2172,38 -DA:2173,38 -DA:2174,38 -DA:2175,181 +DA:2156,1179 +DA:2157,245 +DA:2158,245 +DA:2159,1179 +DA:2160,181 +DA:2161,181 +DA:2162,1179 +DA:2163,99 +DA:2164,99 +DA:2165,1179 +DA:2166,216 +DA:2167,216 +DA:2168,1179 +DA:2169,118 +DA:2170,118 +DA:2171,1179 +DA:2172,17 +DA:2173,17 +DA:2174,1179 +DA:2175,0 DA:2176,1179 -DA:2177,99 -DA:2178,99 -DA:2179,1179 -DA:2180,216 -DA:2181,216 -DA:2182,1179 -DA:2183,118 -DA:2184,118 -DA:2185,118 -DA:2186,1179 -DA:2187,17 -DA:2188,10 -DA:2189,10 -DA:2190,7 -DA:2191,7 -DA:2192,7 -DA:2193,17 -DA:2194,1179 -DA:2195,0 -DA:2196,1179 +DA:2177,1179 +DA:2178,418 +DA:2179,418 +DA:2180,40 +DA:2181,40 +DA:2182,418 +DA:2183,418 +DA:2184,6 +DA:2185,6 +DA:2186,412 +DA:2187,412 +DA:2188,418 +DA:2189,1 +DA:2190,1 +DA:2191,1 +DA:2192,1 +DA:2193,1 +DA:2194,1 +DA:2195,1 +DA:2196,876 DA:2197,876 DA:2198,876 -DA:2199,418 -DA:2200,418 -DA:2201,40 -DA:2202,40 -DA:2203,418 -DA:2204,418 -DA:2205,6 -DA:2206,5 -DA:2207,5 -DA:2208,6 -DA:2209,6 -DA:2210,6 -DA:2211,412 -DA:2212,412 +DA:2199,48 +DA:2200,48 +DA:2201,828 +DA:2202,828 +DA:2203,828 +DA:2204,828 +DA:2205,876 +DA:2206,876 +DA:2207,876 +DA:2208,1 +DA:2209,1 +DA:2210,1 +DA:2211,1 +DA:2212,418 DA:2213,418 -DA:2214,1 -DA:2215,1 -DA:2216,1 -DA:2217,1 -DA:2218,1 +DA:2214,418 +DA:2215,418 +DA:2216,418 +DA:2217,418 +DA:2218,418 DA:2219,1 DA:2220,1 DA:2221,1 DA:2222,1 -DA:2223,99 -DA:2224,99 -DA:2225,99 -DA:2226,1 -DA:2227,1 -DA:2228,1 -DA:2229,1 -DA:2230,1 +DA:2223,1 +DA:2224,1 +DA:2225,1 +DA:2226,99 +DA:2227,99 +DA:2228,99 +DA:2229,99 +DA:2230,99 DA:2231,1 DA:2232,1 DA:2233,1 DA:2234,1 -DA:2235,216 -DA:2236,216 -DA:2237,216 -DA:2238,1 -DA:2239,1 -DA:2240,1 -DA:2241,1 -DA:2242,1 +DA:2235,1 +DA:2236,1 +DA:2237,1 +DA:2238,216 +DA:2239,216 +DA:2240,216 +DA:2241,216 +DA:2242,216 DA:2243,1 DA:2244,1 DA:2245,1 -DA:2246,344 -DA:2247,344 -DA:2248,344 -DA:2249,344 -DA:2250,344 -DA:2251,344 -DA:2252,344 -DA:2253,1 -DA:2254,1 +DA:2246,1 +DA:2247,1 +DA:2248,1 +DA:2249,1 +DA:2250,363 +DA:2251,363 +DA:2252,363 +DA:2253,363 +DA:2254,363 DA:2255,1 DA:2256,1 DA:2257,1 DA:2258,1 DA:2259,1 -DA:2260,340 -DA:2261,340 -DA:2262,340 -DA:2263,340 -DA:2264,340 -DA:2265,340 -DA:2266,520 -DA:2267,520 -DA:2268,520 -DA:2269,5715 -DA:2270,5715 -DA:2271,5715 -DA:2272,5715 -DA:2273,2952 -DA:2274,2952 -DA:2275,2763 -DA:2276,2763 -DA:2277,2763 -DA:2278,2763 -DA:2279,2763 -DA:2280,2763 -DA:2281,2763 -DA:2282,2763 -DA:2283,2763 -DA:2284,2763 -DA:2285,5715 -DA:2286,5715 -DA:2287,5715 -DA:2288,520 -DA:2289,340 -DA:2290,340 -DA:2291,340 +DA:2260,1 +DA:2261,40 +DA:2262,40 +DA:2263,1 +DA:2264,1 +DA:2265,1 +DA:2266,1 +DA:2267,1 +DA:2268,1 +DA:2269,1 +DA:2270,181 +DA:2271,181 +DA:2272,38 +DA:2273,38 +DA:2274,38 +DA:2275,181 +DA:2276,181 +DA:2277,181 +DA:2278,1 +DA:2279,1 +DA:2280,1 +DA:2281,1 +DA:2282,1 +DA:2283,1 +DA:2284,1 +DA:2285,17 +DA:2286,10 +DA:2287,10 +DA:2288,7 +DA:2289,7 +DA:2290,7 +DA:2291,17 DA:2292,1 DA:2293,1 DA:2294,1 DA:2295,1 DA:2296,1 DA:2297,1 -DA:2298,1 -DA:2299,3695 -DA:2300,3695 -DA:2301,3695 -DA:2302,3695 -DA:2303,3695 -DA:2304,3695 -DA:2305,3695 -DA:2306,3695 -DA:2307,2670 -DA:2308,2670 -DA:2309,206 -DA:2310,3695 +DA:2298,6 +DA:2299,5 +DA:2300,5 +DA:2301,6 +DA:2302,6 +DA:2303,6 +DA:2304,6 +DA:2305,1 +DA:2306,1 +DA:2307,1 +DA:2308,1 +DA:2309,1 +DA:2310,1 DA:2311,1 DA:2312,1 -DA:2313,1 -DA:2314,1 -DA:2315,1 -DA:2316,1 -DA:2317,1 -DA:2318,6820 -DA:2319,10815 -DA:2320,10815 -DA:2321,10815 -DA:2322,7812 -DA:2323,7812 -DA:2324,10815 -DA:2325,6820 -DA:2326,6820 -DA:2327,6820 -DA:2328,8 -DA:2329,8 -DA:2330,6820 -DA:2331,6820 -DA:2332,6645 -DA:2333,6645 -DA:2334,6645 -DA:2335,6645 -DA:2336,6820 -DA:2337,1 -DA:2338,1 -DA:2339,1 -DA:2340,1 -DA:2341,1 -DA:2342,1 -DA:2343,1 -DA:2344,1 -DA:2345,5715 -DA:2346,5715 -DA:2347,5715 -DA:2348,1 -DA:2349,1 -DA:2350,1 -DA:2351,1 -DA:2352,1 -DA:2353,1 -DA:2354,1 -DA:2355,3137 -DA:2356,3137 -DA:2357,1 -DA:2358,1 +DA:2313,344 +DA:2314,344 +DA:2315,344 +DA:2316,344 +DA:2317,344 +DA:2318,344 +DA:2319,344 +DA:2320,1 +DA:2321,1 +DA:2322,1 +DA:2323,1 +DA:2324,1 +DA:2325,1 +DA:2326,1 +DA:2327,340 +DA:2328,340 +DA:2329,340 +DA:2330,340 +DA:2331,340 +DA:2332,340 +DA:2333,520 +DA:2334,520 +DA:2335,520 +DA:2336,5715 +DA:2337,5715 +DA:2338,5715 +DA:2339,5715 +DA:2340,2952 +DA:2341,2952 +DA:2342,2763 +DA:2343,2763 +DA:2344,2763 +DA:2345,2763 +DA:2346,2763 +DA:2347,2763 +DA:2348,2763 +DA:2349,2763 +DA:2350,2763 +DA:2351,2763 +DA:2352,5715 +DA:2353,5715 +DA:2354,5715 +DA:2355,520 +DA:2356,340 +DA:2357,340 +DA:2358,340 DA:2359,1 DA:2360,1 DA:2361,1 DA:2362,1 DA:2363,1 -DA:2364,2736 -DA:2365,2736 -DA:2366,1 -DA:2367,1 -DA:2368,1 -DA:2369,1 -DA:2370,1 -DA:2371,1 -DA:2372,1 -DA:2373,244 -DA:2374,244 -DA:2375,244 -DA:2376,1 -DA:2377,1 +DA:2364,1 +DA:2365,1 +DA:2366,3695 +DA:2367,3695 +DA:2368,3695 +DA:2369,3695 +DA:2370,3695 +DA:2371,3695 +DA:2372,3695 +DA:2373,3695 +DA:2374,2670 +DA:2375,2670 +DA:2376,206 +DA:2377,3695 DA:2378,1 DA:2379,1 DA:2380,1 DA:2381,1 DA:2382,1 -DA:2383,244 -DA:2384,244 -DA:2385,244 -DA:2386,1 -DA:2387,1 -DA:2388,1 -DA:2389,1 -DA:2390,1 -DA:2391,1 -DA:2392,1 -DA:2393,390 -DA:2394,390 -DA:2395,390 -DA:2396,390 -DA:2397,0 -DA:2398,0 -DA:2399,390 -DA:2400,1 -DA:2401,1 -DA:2402,1 -DA:2403,1 +DA:2383,1 +DA:2384,1 +DA:2385,6820 +DA:2386,10815 +DA:2387,10815 +DA:2388,10815 +DA:2389,7812 +DA:2390,7812 +DA:2391,10815 +DA:2392,6820 +DA:2393,6820 +DA:2394,6820 +DA:2395,8 +DA:2396,8 +DA:2397,6820 +DA:2398,6820 +DA:2399,6645 +DA:2400,6645 +DA:2401,6645 +DA:2402,6645 +DA:2403,6820 DA:2404,1 DA:2405,1 DA:2406,1 @@ -14144,347 +14158,347 @@ DA:2408,1 DA:2409,1 DA:2410,1 DA:2411,1 -DA:2412,1 -DA:2413,1 -DA:2414,1 +DA:2412,5715 +DA:2413,5715 +DA:2414,5715 DA:2415,1 DA:2416,1 -DA:2417,393 -DA:2418,1156 -DA:2419,1156 -DA:2420,1156 -DA:2421,1156 -DA:2422,1156 -DA:2423,1156 -DA:2424,1156 -DA:2425,1156 -DA:2426,1156 -DA:2427,981 -DA:2428,981 -DA:2429,981 -DA:2430,175 -DA:2431,86 -DA:2432,86 -DA:2433,86 -DA:2434,89 -DA:2435,89 -DA:2436,89 -DA:2437,89 -DA:2438,1156 -DA:2439,393 -DA:2440,1 -DA:2441,1 -DA:2442,1 +DA:2417,1 +DA:2418,1 +DA:2419,1 +DA:2420,1 +DA:2421,1 +DA:2422,3137 +DA:2423,3137 +DA:2424,1 +DA:2425,1 +DA:2426,1 +DA:2427,1 +DA:2428,1 +DA:2429,1 +DA:2430,1 +DA:2431,2736 +DA:2432,2736 +DA:2433,1 +DA:2434,1 +DA:2435,1 +DA:2436,1 +DA:2437,1 +DA:2438,1 +DA:2439,1 +DA:2440,244 +DA:2441,244 +DA:2442,244 DA:2443,1 DA:2444,1 DA:2445,1 DA:2446,1 -DA:2447,981 -DA:2448,981 -DA:2449,981 -DA:2450,981 -DA:2451,981 -DA:2452,930 -DA:2453,981 -DA:2454,122 -DA:2455,122 -DA:2456,122 -DA:2457,122 -DA:2458,122 -DA:2459,122 -DA:2460,122 -DA:2461,930 -DA:2462,930 -DA:2463,930 -DA:2464,930 -DA:2465,930 -DA:2466,930 -DA:2467,930 -DA:2468,930 -DA:2469,930 -DA:2470,930 -DA:2471,930 -DA:2472,930 -DA:2473,981 +DA:2447,1 +DA:2448,1 +DA:2449,1 +DA:2450,244 +DA:2451,244 +DA:2452,244 +DA:2453,1 +DA:2454,1 +DA:2455,1 +DA:2456,1 +DA:2457,1 +DA:2458,1 +DA:2459,1 +DA:2460,390 +DA:2461,390 +DA:2462,390 +DA:2463,390 +DA:2464,0 +DA:2465,0 +DA:2466,390 +DA:2467,1 +DA:2468,1 +DA:2469,1 +DA:2470,1 +DA:2471,1 +DA:2472,1 +DA:2473,1 DA:2474,1 DA:2475,1 DA:2476,1 DA:2477,1 DA:2478,1 DA:2479,1 -DA:2480,86 -DA:2481,86 -DA:2482,86 -DA:2483,86 -DA:2484,86 -DA:2485,86 -DA:2486,86 -DA:2487,86 -DA:2488,86 -DA:2489,86 -DA:2490,86 -DA:2491,86 -DA:2492,86 -DA:2493,1 -DA:2494,1 -DA:2495,1 -DA:2496,1 -DA:2497,1 -DA:2498,1 -DA:2499,89 -DA:2500,89 +DA:2480,1 +DA:2481,1 +DA:2482,1 +DA:2483,1 +DA:2484,393 +DA:2485,1156 +DA:2486,1156 +DA:2487,1156 +DA:2488,1156 +DA:2489,1156 +DA:2490,1156 +DA:2491,1156 +DA:2492,1156 +DA:2493,1156 +DA:2494,981 +DA:2495,981 +DA:2496,981 +DA:2497,175 +DA:2498,86 +DA:2499,86 +DA:2500,86 DA:2501,89 DA:2502,89 DA:2503,89 DA:2504,89 -DA:2505,89 -DA:2506,89 -DA:2507,89 -DA:2508,89 -DA:2509,89 -DA:2510,89 -DA:2511,89 +DA:2505,1156 +DA:2506,393 +DA:2507,1 +DA:2508,1 +DA:2509,1 +DA:2510,1 +DA:2511,1 DA:2512,1 DA:2513,1 -DA:2514,1 -DA:2515,1 -DA:2516,1 -DA:2517,1 -DA:2518,57 -DA:2519,57 -DA:2520,221 -DA:2521,221 -DA:2522,57 -DA:2523,57 -DA:2524,57 -DA:2525,1 -DA:2526,1 -DA:2527,1 -DA:2528,1 -DA:2529,1 -DA:2530,1 -DA:2531,321 -DA:2532,321 -DA:2533,321 -DA:2534,1059 -DA:2535,11 -DA:2536,11 -DA:2537,1059 -DA:2538,321 -DA:2539,321 -DA:2540,321 -DA:2541,321 +DA:2514,981 +DA:2515,981 +DA:2516,981 +DA:2517,981 +DA:2518,981 +DA:2519,930 +DA:2520,981 +DA:2521,122 +DA:2522,122 +DA:2523,122 +DA:2524,122 +DA:2525,122 +DA:2526,122 +DA:2527,122 +DA:2528,930 +DA:2529,930 +DA:2530,930 +DA:2531,930 +DA:2532,930 +DA:2533,930 +DA:2534,930 +DA:2535,930 +DA:2536,930 +DA:2537,930 +DA:2538,930 +DA:2539,930 +DA:2540,981 +DA:2541,1 DA:2542,1 DA:2543,1 DA:2544,1 DA:2545,1 DA:2546,1 -DA:2547,1 -DA:2548,2700 -DA:2549,2700 -DA:2550,2700 -DA:2551,2700 -DA:2552,2700 -DA:2553,1 -DA:2554,1 -DA:2555,1 -DA:2556,1 -DA:2557,1 -DA:2558,1 -DA:2559,2 -DA:2560,2 -DA:2561,2 -DA:2562,2 -DA:2563,2 +DA:2547,86 +DA:2548,86 +DA:2549,86 +DA:2550,86 +DA:2551,86 +DA:2552,86 +DA:2553,86 +DA:2554,86 +DA:2555,86 +DA:2556,86 +DA:2557,86 +DA:2558,86 +DA:2559,86 +DA:2560,1 +DA:2561,1 +DA:2562,1 +DA:2563,1 DA:2564,1 DA:2565,1 -DA:2566,1 -DA:2567,1 -DA:2568,1 -DA:2569,1 -DA:2570,1 -DA:2571,161 -DA:2572,161 -DA:2573,161 -DA:2574,751 -DA:2575,740 -DA:2576,740 -DA:2577,740 -DA:2578,740 -DA:2579,740 -DA:2580,48 -DA:2581,48 -DA:2582,48 -DA:2583,740 -DA:2584,740 -DA:2585,751 -DA:2586,161 -DA:2587,161 -DA:2588,161 -DA:2589,1 -DA:2590,1 -DA:2591,1 +DA:2566,89 +DA:2567,89 +DA:2568,89 +DA:2569,89 +DA:2570,89 +DA:2571,89 +DA:2572,89 +DA:2573,89 +DA:2574,89 +DA:2575,89 +DA:2576,89 +DA:2577,89 +DA:2578,89 +DA:2579,1 +DA:2580,1 +DA:2581,1 +DA:2582,1 +DA:2583,1 +DA:2584,1 +DA:2585,57 +DA:2586,57 +DA:2587,221 +DA:2588,221 +DA:2589,57 +DA:2590,57 +DA:2591,57 DA:2592,1 DA:2593,1 DA:2594,1 -DA:2595,56 -DA:2596,56 -DA:2597,56 -DA:2598,56 -DA:2599,741 -DA:2600,741 -DA:2601,741 -DA:2602,741 -DA:2603,741 -DA:2604,741 -DA:2605,741 -DA:2606,741 -DA:2607,56 -DA:2608,1 +DA:2595,1 +DA:2596,1 +DA:2597,1 +DA:2598,321 +DA:2599,321 +DA:2600,321 +DA:2601,1059 +DA:2602,11 +DA:2603,11 +DA:2604,1059 +DA:2605,321 +DA:2606,321 +DA:2607,321 +DA:2608,321 DA:2609,1 DA:2610,1 DA:2611,1 DA:2612,1 DA:2613,1 DA:2614,1 -DA:2615,1 -DA:2616,1 -DA:2617,1 -DA:2618,1 -DA:2619,1 +DA:2615,2700 +DA:2616,2700 +DA:2617,2700 +DA:2618,2700 +DA:2619,2700 DA:2620,1 DA:2621,1 DA:2622,1 -DA:2623,1156 -DA:2624,1156 -DA:2625,1156 -DA:2626,1156 -DA:2627,1156 -DA:2628,1156 -DA:2629,207 -DA:2630,207 -DA:2631,207 -DA:2632,207 -DA:2633,207 -DA:2634,207 -DA:2635,207 -DA:2636,198 -DA:2637,198 -DA:2638,198 -DA:2639,198 -DA:2640,198 -DA:2641,207 -DA:2642,1156 -DA:2643,1156 -DA:2644,1156 -DA:2645,1 -DA:2646,1 -DA:2647,1 -DA:2648,1 -DA:2649,1 -DA:2650,1 -DA:2651,1 -DA:2652,198 -DA:2653,198 -DA:2654,198 -DA:2655,198 -DA:2656,198 -DA:2657,198 -DA:2658,59 -DA:2659,59 -DA:2660,6 -DA:2661,6 -DA:2662,6 -DA:2663,59 -DA:2664,198 -DA:2665,198 -DA:2666,198 -DA:2667,192 -DA:2668,192 -DA:2669,192 -DA:2670,1 -DA:2671,1 -DA:2672,1 -DA:2673,192 -DA:2674,198 -DA:2675,198 -DA:2676,198 -DA:2677,198 +DA:2623,1 +DA:2624,1 +DA:2625,1 +DA:2626,2 +DA:2627,2 +DA:2628,2 +DA:2629,2 +DA:2630,2 +DA:2631,1 +DA:2632,1 +DA:2633,1 +DA:2634,1 +DA:2635,1 +DA:2636,1 +DA:2637,1 +DA:2638,161 +DA:2639,161 +DA:2640,161 +DA:2641,751 +DA:2642,740 +DA:2643,740 +DA:2644,740 +DA:2645,740 +DA:2646,740 +DA:2647,48 +DA:2648,48 +DA:2649,48 +DA:2650,740 +DA:2651,740 +DA:2652,751 +DA:2653,161 +DA:2654,161 +DA:2655,161 +DA:2656,1 +DA:2657,1 +DA:2658,1 +DA:2659,1 +DA:2660,1 +DA:2661,1 +DA:2662,56 +DA:2663,56 +DA:2664,56 +DA:2665,56 +DA:2666,741 +DA:2667,741 +DA:2668,741 +DA:2669,741 +DA:2670,741 +DA:2671,741 +DA:2672,741 +DA:2673,741 +DA:2674,56 +DA:2675,1 +DA:2676,1 +DA:2677,1 DA:2678,1 DA:2679,1 DA:2680,1 DA:2681,1 DA:2682,1 DA:2683,1 -DA:2684,292 -DA:2685,292 +DA:2684,1 +DA:2685,1 DA:2686,1 DA:2687,1 DA:2688,1 DA:2689,1 -DA:2690,1 -DA:2691,1 -DA:2692,1 -DA:2693,1 -DA:2694,3060 -DA:2695,3060 -DA:2696,3060 -DA:2697,3060 -DA:2698,3060 -DA:2699,3060 -DA:2700,3060 -DA:2701,3060 -DA:2702,3060 -DA:2703,3060 -DA:2704,3060 -DA:2705,3060 -DA:2706,3060 -DA:2707,3060 -DA:2708,3060 -DA:2709,3060 -DA:2710,3060 -DA:2711,3060 -DA:2712,3060 -DA:2713,3060 -DA:2714,3060 -DA:2715,3060 -DA:2716,3060 -DA:2717,3060 -DA:2718,3060 -DA:2719,3060 -DA:2720,3060 -DA:2721,3060 -DA:2722,3060 -DA:2723,3060 -DA:2724,3060 -DA:2725,1 -DA:2726,1 -DA:2727,1 -DA:2728,1 -DA:2729,1 -DA:2730,1 -DA:2731,849 -DA:2732,849 -DA:2733,1 -DA:2734,1 -DA:2735,1 -DA:2736,1 +DA:2690,1156 +DA:2691,1156 +DA:2692,1156 +DA:2693,1156 +DA:2694,1156 +DA:2695,1156 +DA:2696,207 +DA:2697,207 +DA:2698,207 +DA:2699,207 +DA:2700,207 +DA:2701,207 +DA:2702,207 +DA:2703,198 +DA:2704,198 +DA:2705,198 +DA:2706,198 +DA:2707,198 +DA:2708,207 +DA:2709,1156 +DA:2710,1156 +DA:2711,1156 +DA:2712,1 +DA:2713,1 +DA:2714,1 +DA:2715,1 +DA:2716,1 +DA:2717,1 +DA:2718,1 +DA:2719,198 +DA:2720,198 +DA:2721,198 +DA:2722,198 +DA:2723,198 +DA:2724,198 +DA:2725,59 +DA:2726,59 +DA:2727,6 +DA:2728,6 +DA:2729,6 +DA:2730,59 +DA:2731,198 +DA:2732,198 +DA:2733,198 +DA:2734,192 +DA:2735,192 +DA:2736,192 DA:2737,1 DA:2738,1 DA:2739,1 -DA:2740,2763 -DA:2741,2763 -DA:2742,2763 -DA:2743,1 -DA:2744,1 +DA:2740,192 +DA:2741,198 +DA:2742,198 +DA:2743,198 +DA:2744,198 DA:2745,1 DA:2746,1 DA:2747,1 DA:2748,1 DA:2749,1 -DA:2750,2763 -DA:2751,2763 -DA:2752,2763 +DA:2750,1 +DA:2751,292 +DA:2752,292 DA:2753,1 DA:2754,1 DA:2755,1 @@ -14492,158 +14506,225 @@ DA:2756,1 DA:2757,1 DA:2758,1 DA:2759,1 -DA:2760,5715 -DA:2761,5715 -DA:2762,5715 -DA:2763,5715 -DA:2764,5715 -DA:2765,5715 -DA:2766,5715 -DA:2767,5715 -DA:2768,5715 -DA:2769,5715 -DA:2770,5715 -DA:2771,1 -DA:2772,1 -DA:2773,1 -DA:2774,1 -DA:2775,1 -DA:2776,1 -DA:2777,1 -DA:2778,1105 -DA:2779,1105 -DA:2780,1105 -DA:2781,1105 -DA:2782,1 -DA:2783,1 -DA:2784,1 -DA:2785,1 -DA:2786,1 -DA:2787,1 -DA:2788,1 -DA:2789,1105 -DA:2790,1105 -DA:2791,1105 +DA:2760,1 +DA:2761,3060 +DA:2762,3060 +DA:2763,3060 +DA:2764,3060 +DA:2765,3060 +DA:2766,3060 +DA:2767,3060 +DA:2768,3060 +DA:2769,3060 +DA:2770,3060 +DA:2771,3060 +DA:2772,3060 +DA:2773,3060 +DA:2774,3060 +DA:2775,3060 +DA:2776,3060 +DA:2777,3060 +DA:2778,3060 +DA:2779,3060 +DA:2780,3060 +DA:2781,3060 +DA:2782,3060 +DA:2783,3060 +DA:2784,3060 +DA:2785,3060 +DA:2786,3060 +DA:2787,3060 +DA:2788,3060 +DA:2789,3060 +DA:2790,3060 +DA:2791,3060 DA:2792,1 DA:2793,1 DA:2794,1 DA:2795,1 DA:2796,1 DA:2797,1 -DA:2798,1 -DA:2799,1019 -DA:2800,1019 -DA:2801,1019 +DA:2798,849 +DA:2799,849 +DA:2800,1 +DA:2801,1 DA:2802,1 DA:2803,1 DA:2804,1 DA:2805,1 DA:2806,1 -DA:2807,1 -DA:2808,1 -DA:2809,175 -DA:2810,175 -DA:2811,175 +DA:2807,2763 +DA:2808,2763 +DA:2809,2763 +DA:2810,1 +DA:2811,1 DA:2812,1 DA:2813,1 DA:2814,1 DA:2815,1 DA:2816,1 -DA:2817,1 -DA:2818,1 -DA:2819,86 -DA:2820,86 -DA:2821,86 +DA:2817,2763 +DA:2818,2763 +DA:2819,2763 +DA:2820,1 +DA:2821,1 DA:2822,1 DA:2823,1 DA:2824,1 DA:2825,1 DA:2826,1 -DA:2827,1 -DA:2828,1 -DA:2829,1105 -DA:2830,1105 -DA:2831,1105 -DA:2832,1 -DA:2833,1 -DA:2834,1 -DA:2835,1 -DA:2836,1 -DA:2837,1 +DA:2827,5715 +DA:2828,5715 +DA:2829,5715 +DA:2830,5715 +DA:2831,5715 +DA:2832,5715 +DA:2833,5715 +DA:2834,5715 +DA:2835,5715 +DA:2836,5715 +DA:2837,5715 DA:2838,1 -DA:2839,1105 -DA:2840,1105 -DA:2841,1105 +DA:2839,1 +DA:2840,1 +DA:2841,1 DA:2842,1 DA:2843,1 DA:2844,1 -DA:2845,1 -DA:2846,1 -DA:2847,1 -DA:2848,1 -DA:2849,930 -DA:2850,930 -DA:2851,930 +DA:2845,1105 +DA:2846,1105 +DA:2847,1105 +DA:2848,1105 +DA:2849,1 +DA:2850,1 +DA:2851,1 DA:2852,1 DA:2853,1 DA:2854,1 DA:2855,1 -DA:2856,1 -DA:2857,1 -DA:2858,1 -DA:2859,2763 -DA:2860,2763 -DA:2861,2763 +DA:2856,1105 +DA:2857,1105 +DA:2858,1105 +DA:2859,1 +DA:2860,1 +DA:2861,1 DA:2862,1 DA:2863,1 DA:2864,1 DA:2865,1 -DA:2866,1 -DA:2867,1 -DA:2868,7390 -DA:2869,7390 +DA:2866,1019 +DA:2867,1019 +DA:2868,1019 +DA:2869,1 DA:2870,1 DA:2871,1 DA:2872,1 DA:2873,1 DA:2874,1 DA:2875,1 -DA:2876,1 -DA:2877,2763 -DA:2878,2763 -DA:2879,2763 +DA:2876,175 +DA:2877,175 +DA:2878,175 +DA:2879,1 DA:2880,1 DA:2881,1 DA:2882,1 DA:2883,1 DA:2884,1 DA:2885,1 -DA:2886,1 -DA:2887,14652 -DA:2888,14652 -DA:2889,14652 -DA:2890,14652 +DA:2886,86 +DA:2887,86 +DA:2888,86 +DA:2889,1 +DA:2890,1 DA:2891,1 DA:2892,1 DA:2893,1 DA:2894,1 DA:2895,1 -DA:2896,1 -DA:2897,1 -DA:2898,4 -DA:2899,4 -DA:2900,36 -DA:2901,72 -DA:2902,36 -DA:2903,36 -DA:2904,72 -DA:2905,36 -DA:2906,4 -DA:2907,4 -DA:2908,4 +DA:2896,1105 +DA:2897,1105 +DA:2898,1105 +DA:2899,1 +DA:2900,1 +DA:2901,1 +DA:2902,1 +DA:2903,1 +DA:2904,1 +DA:2905,1 +DA:2906,1105 +DA:2907,1105 +DA:2908,1105 DA:2909,1 -LF:2909 -LH:2857 +DA:2910,1 +DA:2911,1 +DA:2912,1 +DA:2913,1 +DA:2914,1 +DA:2915,1 +DA:2916,930 +DA:2917,930 +DA:2918,930 +DA:2919,1 +DA:2920,1 +DA:2921,1 +DA:2922,1 +DA:2923,1 +DA:2924,1 +DA:2925,1 +DA:2926,2763 +DA:2927,2763 +DA:2928,2763 +DA:2929,1 +DA:2930,1 +DA:2931,1 +DA:2932,1 +DA:2933,1 +DA:2934,1 +DA:2935,7390 +DA:2936,7390 +DA:2937,1 +DA:2938,1 +DA:2939,1 +DA:2940,1 +DA:2941,1 +DA:2942,1 +DA:2943,1 +DA:2944,2763 +DA:2945,2763 +DA:2946,2763 +DA:2947,1 +DA:2948,1 +DA:2949,1 +DA:2950,1 +DA:2951,1 +DA:2952,1 +DA:2953,1 +DA:2954,14652 +DA:2955,14652 +DA:2956,14652 +DA:2957,14652 +DA:2958,1 +DA:2959,1 +DA:2960,1 +DA:2961,1 +DA:2962,1 +DA:2963,1 +DA:2964,1 +DA:2965,4 +DA:2966,4 +DA:2967,36 +DA:2968,72 +DA:2969,36 +DA:2970,36 +DA:2971,72 +DA:2972,36 +DA:2973,4 +DA:2974,4 +DA:2975,4 +DA:2976,1 +LF:2976 +LH:2924 BRDA:1,0,0,1 BRDA:23,1,0,344 BRDA:50,2,0,4 @@ -15008,156 +15089,161 @@ BRDA:2129,360,0,177 BRDA:2130,361,0,418 BRDA:2135,362,0,243 BRDA:2145,363,0,418 -BRDA:2152,364,0,1179 -BRDA:2154,365,0,303 -BRDA:2155,366,0,876 -BRDA:2157,367,0,48 -BRDA:2160,368,0,828 -BRDA:2162,369,0,174 -BRDA:2162,370,0,654 -BRDA:2164,371,0,876 -BRDA:2166,372,0,245 -BRDA:2169,373,0,181 -BRDA:2171,374,0,38 -BRDA:2176,375,0,99 -BRDA:2179,376,0,216 -BRDA:2182,377,0,118 -BRDA:2186,378,0,17 -BRDA:2187,379,0,10 -BRDA:2190,380,0,7 -BRDA:2194,381,0,0 -BRDA:2197,382,0,876 -BRDA:2200,383,0,40 -BRDA:2204,384,0,6 -BRDA:2205,385,0,5 -BRDA:2211,386,0,412 -BRDA:2222,387,0,99 -BRDA:2223,388,0,28 -BRDA:2223,389,0,71 -BRDA:2224,390,0,35 -BRDA:2224,391,0,64 -BRDA:2234,392,0,216 -BRDA:2235,393,0,84 -BRDA:2235,394,0,132 -BRDA:2236,395,0,26 -BRDA:2236,396,0,190 -BRDA:2245,397,0,344 -BRDA:2259,398,0,340 -BRDA:2265,399,0,520 -BRDA:2268,400,0,5715 -BRDA:2272,401,0,2952 -BRDA:2275,402,0,2763 -BRDA:2298,403,0,3695 -BRDA:2299,404,0,2427 -BRDA:2299,405,0,1268 -BRDA:2300,406,0,1754 -BRDA:2300,407,0,1941 -BRDA:2306,408,0,1025 -BRDA:2307,409,0,2670 -BRDA:2308,410,0,2464 -BRDA:2309,411,0,206 -BRDA:2317,412,0,6820 -BRDA:2318,413,0,10815 -BRDA:2321,414,0,5306 -BRDA:2321,415,0,7812 -BRDA:2327,416,0,13 -BRDA:2327,417,0,8 -BRDA:2331,418,0,6645 -BRDA:2334,419,0,2763 -BRDA:2344,420,0,5715 -BRDA:2346,421,0,2763 -BRDA:2346,422,0,2952 -BRDA:2354,423,0,3137 -BRDA:2363,424,0,2736 -BRDA:2372,425,0,244 -BRDA:2374,426,0,0 -BRDA:2382,427,0,244 -BRDA:2384,428,0,0 -BRDA:2392,429,0,390 -BRDA:2397,430,0,0 -BRDA:2416,431,0,393 -BRDA:2417,432,0,1156 -BRDA:2419,433,0,610 -BRDA:2419,434,0,85 -BRDA:2419,435,0,1071 -BRDA:2426,436,0,1070 -BRDA:2426,437,0,981 -BRDA:2430,438,0,175 -BRDA:2430,439,0,86 -BRDA:2434,440,0,89 -BRDA:2446,441,0,981 -BRDA:2450,442,0,56 -BRDA:2451,443,0,51 -BRDA:2452,444,0,930 -BRDA:2453,445,0,812 -BRDA:2453,446,0,122 -BRDA:2461,447,0,930 -BRDA:2479,448,0,86 -BRDA:2498,449,0,89 -BRDA:2517,450,0,57 -BRDA:2519,451,0,221 -BRDA:2520,452,0,0 -BRDA:2523,453,0,0 -BRDA:2530,454,0,321 -BRDA:2533,455,0,1059 -BRDA:2534,456,0,11 -BRDA:2538,457,0,2 -BRDA:2547,458,0,2700 -BRDA:2548,459,0,24649 -BRDA:2549,460,0,9659 -BRDA:2558,461,0,2 -BRDA:2560,462,0,4 -BRDA:2570,463,0,161 -BRDA:2573,464,0,751 -BRDA:2574,465,0,740 -BRDA:2579,466,0,48 -BRDA:2581,467,0,24 -BRDA:2581,468,0,24 -BRDA:2594,469,0,56 -BRDA:2598,470,0,741 -BRDA:2622,471,0,1156 -BRDA:2626,472,0,1070 -BRDA:2626,473,0,86 -BRDA:2628,474,0,1070 -BRDA:2628,475,0,207 -BRDA:2631,476,0,198 -BRDA:2632,477,0,198 -BRDA:2635,478,0,198 -BRDA:2635,479,0,198 -BRDA:2651,480,0,198 -BRDA:2657,481,0,59 -BRDA:2659,482,0,6 -BRDA:2666,483,0,192 -BRDA:2669,484,0,1 -BRDA:2669,485,0,1 -BRDA:2683,486,0,292 -BRDA:2684,487,0,956 -BRDA:2693,488,0,3060 -BRDA:2730,489,0,849 -BRDA:2731,490,0,662 -BRDA:2731,491,0,187 -BRDA:2739,492,0,2763 -BRDA:2749,493,0,2763 -BRDA:2759,494,0,5715 -BRDA:2761,495,0,2952 -BRDA:2777,496,0,1105 -BRDA:2788,497,0,1105 -BRDA:2798,498,0,1019 -BRDA:2808,499,0,175 -BRDA:2818,500,0,86 -BRDA:2828,501,0,1105 -BRDA:2838,502,0,1105 -BRDA:2848,503,0,930 -BRDA:2858,504,0,2763 -BRDA:2867,505,0,7390 -BRDA:2876,506,0,2763 -BRDA:2886,507,0,14652 -BRDA:2887,508,0,11608 -BRDA:2887,509,0,3044 -BRDA:2897,510,0,4 -BRDA:2899,511,0,36 -BRDA:2900,512,0,72 -BRDA:2901,513,0,36 -BRF:514 -BRH:495 +BRDA:2149,364,0,1179 +BRDA:2151,365,0,303 +BRDA:2152,366,0,876 +BRDA:2156,367,0,245 +BRDA:2159,368,0,181 +BRDA:2162,369,0,99 +BRDA:2165,370,0,216 +BRDA:2168,371,0,118 +BRDA:2171,372,0,17 +BRDA:2174,373,0,0 +BRDA:2179,374,0,40 +BRDA:2183,375,0,6 +BRDA:2186,376,0,412 +BRDA:2195,377,0,876 +BRDA:2198,378,0,48 +BRDA:2201,379,0,828 +BRDA:2203,380,0,174 +BRDA:2203,381,0,654 +BRDA:2211,382,0,418 +BRDA:2225,383,0,99 +BRDA:2226,384,0,28 +BRDA:2226,385,0,71 +BRDA:2228,386,0,35 +BRDA:2228,387,0,64 +BRDA:2237,388,0,216 +BRDA:2238,389,0,84 +BRDA:2238,390,0,132 +BRDA:2240,391,0,26 +BRDA:2240,392,0,190 +BRDA:2249,393,0,363 +BRDA:2260,394,0,40 +BRDA:2269,395,0,181 +BRDA:2271,396,0,38 +BRDA:2284,397,0,17 +BRDA:2285,398,0,10 +BRDA:2288,399,0,7 +BRDA:2297,400,0,6 +BRDA:2298,401,0,5 +BRDA:2312,402,0,344 +BRDA:2326,403,0,340 +BRDA:2332,404,0,520 +BRDA:2335,405,0,5715 +BRDA:2339,406,0,2952 +BRDA:2342,407,0,2763 +BRDA:2365,408,0,3695 +BRDA:2366,409,0,2427 +BRDA:2366,410,0,1268 +BRDA:2367,411,0,1754 +BRDA:2367,412,0,1941 +BRDA:2373,413,0,1025 +BRDA:2374,414,0,2670 +BRDA:2375,415,0,2464 +BRDA:2376,416,0,206 +BRDA:2384,417,0,6820 +BRDA:2385,418,0,10815 +BRDA:2388,419,0,5306 +BRDA:2388,420,0,7812 +BRDA:2394,421,0,13 +BRDA:2394,422,0,8 +BRDA:2398,423,0,6645 +BRDA:2401,424,0,2763 +BRDA:2411,425,0,5715 +BRDA:2413,426,0,2763 +BRDA:2413,427,0,2952 +BRDA:2421,428,0,3137 +BRDA:2430,429,0,2736 +BRDA:2439,430,0,244 +BRDA:2441,431,0,0 +BRDA:2449,432,0,244 +BRDA:2451,433,0,0 +BRDA:2459,434,0,390 +BRDA:2464,435,0,0 +BRDA:2483,436,0,393 +BRDA:2484,437,0,1156 +BRDA:2486,438,0,610 +BRDA:2486,439,0,85 +BRDA:2486,440,0,1071 +BRDA:2493,441,0,1070 +BRDA:2493,442,0,981 +BRDA:2497,443,0,175 +BRDA:2497,444,0,86 +BRDA:2501,445,0,89 +BRDA:2513,446,0,981 +BRDA:2517,447,0,56 +BRDA:2518,448,0,51 +BRDA:2519,449,0,930 +BRDA:2520,450,0,812 +BRDA:2520,451,0,122 +BRDA:2528,452,0,930 +BRDA:2546,453,0,86 +BRDA:2565,454,0,89 +BRDA:2584,455,0,57 +BRDA:2586,456,0,221 +BRDA:2587,457,0,0 +BRDA:2590,458,0,0 +BRDA:2597,459,0,321 +BRDA:2600,460,0,1059 +BRDA:2601,461,0,11 +BRDA:2605,462,0,2 +BRDA:2614,463,0,2700 +BRDA:2615,464,0,24649 +BRDA:2616,465,0,9659 +BRDA:2625,466,0,2 +BRDA:2627,467,0,4 +BRDA:2637,468,0,161 +BRDA:2640,469,0,751 +BRDA:2641,470,0,740 +BRDA:2646,471,0,48 +BRDA:2648,472,0,24 +BRDA:2648,473,0,24 +BRDA:2661,474,0,56 +BRDA:2665,475,0,741 +BRDA:2689,476,0,1156 +BRDA:2693,477,0,1070 +BRDA:2693,478,0,86 +BRDA:2695,479,0,1070 +BRDA:2695,480,0,207 +BRDA:2698,481,0,198 +BRDA:2699,482,0,198 +BRDA:2702,483,0,198 +BRDA:2702,484,0,198 +BRDA:2718,485,0,198 +BRDA:2724,486,0,59 +BRDA:2726,487,0,6 +BRDA:2733,488,0,192 +BRDA:2736,489,0,1 +BRDA:2736,490,0,1 +BRDA:2750,491,0,292 +BRDA:2751,492,0,956 +BRDA:2760,493,0,3060 +BRDA:2797,494,0,849 +BRDA:2798,495,0,662 +BRDA:2798,496,0,187 +BRDA:2806,497,0,2763 +BRDA:2816,498,0,2763 +BRDA:2826,499,0,5715 +BRDA:2828,500,0,2952 +BRDA:2844,501,0,1105 +BRDA:2855,502,0,1105 +BRDA:2865,503,0,1019 +BRDA:2875,504,0,175 +BRDA:2885,505,0,86 +BRDA:2895,506,0,1105 +BRDA:2905,507,0,1105 +BRDA:2915,508,0,930 +BRDA:2925,509,0,2763 +BRDA:2934,510,0,7390 +BRDA:2943,511,0,2763 +BRDA:2953,512,0,14652 +BRDA:2954,513,0,11608 +BRDA:2954,514,0,3044 +BRDA:2964,515,0,4 +BRDA:2966,516,0,36 +BRDA:2967,517,0,72 +BRDA:2968,518,0,36 +BRF:519 +BRH:500 end_of_record diff --git a/dist/gssql.js b/dist/gssql.js index ec32cef..5f5b6e3 100644 --- a/dist/gssql.js +++ b/dist/gssql.js @@ -3810,96 +3810,163 @@ class ConglomerateRecord { */ static aggregateColumn(field, groupRecords, columnIndex) { let groupValue = 0; - let groupConcat = []; - let avgCounter = 0; - let first = true; - const distinctSet = new Set(); + let aggregator = new AggregateTrack(field); for (const groupRow of groupRecords) { if (groupRow[columnIndex] === 'null') continue; - let numericData = 0; - if (groupRow[columnIndex] instanceof Date) { - numericData = groupRow[columnIndex]; - } - else { - numericData = Number(groupRow[columnIndex]); - numericData = (isNaN(numericData)) ? 0 : numericData; - } + let numericData = ConglomerateRecord.aggregateColumnToNumeric(groupRow[columnIndex]); switch (field.aggregateFunction) { case "SUM": - groupValue += numericData; + groupValue = aggregator.sum(numericData); break; case "COUNT": - groupValue++; - if (field.distinctSetting === "DISTINCT") { - distinctSet.add(groupRow[columnIndex]); - groupValue = distinctSet.size; - } + groupValue = aggregator.count(groupRow[columnIndex]); break; case "MIN": - groupValue = ConglomerateRecord.minCase(first, groupValue, numericData); + groupValue = aggregator.minCase(numericData); break; case "MAX": - groupValue = ConglomerateRecord.maxCase(first, groupValue, numericData); + groupValue = aggregator.maxCase(numericData); break; case "AVG": - avgCounter++; - groupValue += numericData; + aggregator.sum(numericData); break; case "GROUP_CONCAT": - if (field.distinctSetting === "DISTINCT") { - distinctSet.add(groupRow[columnIndex]); - } - else { - groupConcat.push(groupRow[columnIndex]); - } + aggregator.addGroupConcatItem(groupRow[columnIndex]); break; default: throw new Error(`Invalid aggregate function: ${field.aggregateFunction}`); } - first = false; } if (field.aggregateFunction === "AVG") { - groupValue = groupValue / avgCounter; + groupValue = aggregator.getAverage(); } if (field.aggregateFunction === "GROUP_CONCAT") { - if (field.distinctSetting === "DISTINCT") { - groupConcat = Array.from(distinctSet.keys()); - } - groupConcat.sort(); - return groupConcat.join(); + return aggregator.getGroupConcat(); } return groupValue; } /** - * Find minimum value from group records. - * @param {Boolean} first - true if first record in set. - * @param {Number} value - cumulative data from all previous group records - * @param {Number} data - data from current group record - * @returns {Number} - minimum value from set. + * + * @param {any} columnData + * @returns {Number} + */ + static aggregateColumnToNumeric(columnData) { + /** @type {any} */ + let numericData = 0; + if (columnData instanceof Date) { + numericData = columnData; + } + else { + numericData = Number(columnData); + numericData = (isNaN(numericData)) ? 0 : numericData; + } + + return numericData; + } +} + +class AggregateTrack { + constructor(field) { + this.groupValue = 0; + this.groupConcat = []; + this.isDistinct = field.distinctSetting === "DISTINCT"; + this.distinctSet = new Set(); + this.first = true; + this.avgCounter = 0; + } + + /** + * + * @param {Number} numericData + * @returns {Number} + */ + minCase(numericData) { + this.groupValue = this.first ? numericData : this.groupValue; + this.first = false; + this.groupValue = numericData < this.groupValue ? numericData : this.groupValue; + return this.groupValue; + } + + /** + * + * @param {Number} numericData + * @returns {Number} */ - static minCase(first, value, data) { - const groupValue = first ? data : value; - return data < groupValue ? data : groupValue; + maxCase(numericData) { + this.groupValue = this.first ? numericData : this.groupValue; + this.first = false; + this.groupValue = numericData > this.groupValue ? numericData : this.groupValue; + return this.groupValue; } /** - * Find max value from group records. - * @param {Boolean} first - true if first record in set. - * @param {Number} value - cumulative data from all previous group records. - * @param {Number} data - data from current group record - * @returns {Number} - max value from set. + * + * @param {Number} numericData + * @returns {Number} */ - static maxCase(first, value, data) { - const groupValue = first ? data : value; - return data > groupValue ? data : groupValue; + sum(numericData) { + this.avgCounter++; + this.groupValue += numericData; + + return this.groupValue; + } + + /** + * + * @returns {Number} + */ + getAverage() { + return this.groupValue / this.avgCounter; + } + + /** + * + * @param {any} columnData + * @returns {Number} + */ + count(columnData) { + this.groupValue++; + if (this.isDistinct) { + this.distinctSet.add(columnData); + this.groupValue = this.distinctSet.size; + } + + return this.groupValue; + } + + /** + * + * @param {any} columnData + * @returns {void} + */ + addGroupConcatItem(columnData) { + if (this.isDistinct) { + this.distinctSet.add(columnData); + } + else { + this.groupConcat.push(columnData); + } + } + + /** + * All data from column returned as single string with items separated by comma. + * @returns {String} + */ + getGroupConcat() { + if (this.isDistinct) { + this.groupConcat = Array.from(this.distinctSet.keys()); + } + this.groupConcat.sort(); + + return this.groupConcat.join(); } } @@ -4334,10 +4401,10 @@ class TableFields { if (matches !== null && matches.length > 1) { columnName = matches[1]; - fieldDistinct = "DISTINCT"; + fieldDistinct = "DISTINCT"; } } - + return [columnName, fieldDistinct]; } diff --git a/package-lock.json b/package-lock.json index c2a4c30..4ec002f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@demmings/gssql", - "version": "1.3.13", + "version": "1.3.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@demmings/gssql", - "version": "1.3.13", + "version": "1.3.14", "license": "ISC", "dependencies": { "gas-local": "^1.3.1" diff --git a/package.json b/package.json index 7e206b4..c03f227 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@demmings/gssql", - "version": "1.3.13", + "version": "1.3.14", "description": "Google Sheets QUERY function replacement using real SQL select syntax.", "main": "testGsSql.js", "files": ["./src", "src", "img", "dist"], diff --git a/src/Views.js b/src/Views.js index a13eb78..3ffb5bf 100644 --- a/src/Views.js +++ b/src/Views.js @@ -2144,96 +2144,163 @@ class ConglomerateRecord { */ static aggregateColumn(field, groupRecords, columnIndex) { let groupValue = 0; - let groupConcat = []; - let avgCounter = 0; - let first = true; - const distinctSet = new Set(); + let aggregator = new AggregateTrack(field); for (const groupRow of groupRecords) { if (groupRow[columnIndex] === 'null') continue; - let numericData = 0; - if (groupRow[columnIndex] instanceof Date) { - numericData = groupRow[columnIndex]; - } - else { - numericData = Number(groupRow[columnIndex]); - numericData = (isNaN(numericData)) ? 0 : numericData; - } + let numericData = ConglomerateRecord.aggregateColumnToNumeric(groupRow[columnIndex]); switch (field.aggregateFunction) { case "SUM": - groupValue += numericData; + groupValue = aggregator.sum(numericData); break; case "COUNT": - groupValue++; - if (field.distinctSetting === "DISTINCT") { - distinctSet.add(groupRow[columnIndex]); - groupValue = distinctSet.size; - } + groupValue = aggregator.count(groupRow[columnIndex]); break; case "MIN": - groupValue = ConglomerateRecord.minCase(first, groupValue, numericData); + groupValue = aggregator.minCase(numericData); break; case "MAX": - groupValue = ConglomerateRecord.maxCase(first, groupValue, numericData); + groupValue = aggregator.maxCase(numericData); break; case "AVG": - avgCounter++; - groupValue += numericData; + aggregator.sum(numericData); break; case "GROUP_CONCAT": - if (field.distinctSetting === "DISTINCT") { - distinctSet.add(groupRow[columnIndex]); - } - else { - groupConcat.push(groupRow[columnIndex]); - } + aggregator.addGroupConcatItem(groupRow[columnIndex]); break; default: throw new Error(`Invalid aggregate function: ${field.aggregateFunction}`); } - first = false; } if (field.aggregateFunction === "AVG") { - groupValue = groupValue / avgCounter; + groupValue = aggregator.getAverage(); } if (field.aggregateFunction === "GROUP_CONCAT") { - if (field.distinctSetting === "DISTINCT") { - groupConcat = Array.from(distinctSet.keys()); - } - groupConcat.sort(); - return groupConcat.join(); + return aggregator.getGroupConcat(); } return groupValue; } /** - * Find minimum value from group records. - * @param {Boolean} first - true if first record in set. - * @param {Number} value - cumulative data from all previous group records - * @param {Number} data - data from current group record - * @returns {Number} - minimum value from set. + * + * @param {any} columnData + * @returns {Number} + */ + static aggregateColumnToNumeric(columnData) { + /** @type {any} */ + let numericData = 0; + if (columnData instanceof Date) { + numericData = columnData; + } + else { + numericData = Number(columnData); + numericData = (isNaN(numericData)) ? 0 : numericData; + } + + return numericData; + } +} + +class AggregateTrack { + constructor(field) { + this.groupValue = 0; + this.groupConcat = []; + this.isDistinct = field.distinctSetting === "DISTINCT"; + this.distinctSet = new Set(); + this.first = true; + this.avgCounter = 0; + } + + /** + * + * @param {Number} numericData + * @returns {Number} + */ + minCase(numericData) { + this.groupValue = this.first ? numericData : this.groupValue; + this.first = false; + this.groupValue = numericData < this.groupValue ? numericData : this.groupValue; + return this.groupValue; + } + + /** + * + * @param {Number} numericData + * @returns {Number} + */ + maxCase(numericData) { + this.groupValue = this.first ? numericData : this.groupValue; + this.first = false; + this.groupValue = numericData > this.groupValue ? numericData : this.groupValue; + return this.groupValue; + } + + /** + * + * @param {Number} numericData + * @returns {Number} + */ + sum(numericData) { + this.avgCounter++; + this.groupValue += numericData; + + return this.groupValue; + } + + /** + * + * @returns {Number} */ - static minCase(first, value, data) { - const groupValue = first ? data : value; - return data < groupValue ? data : groupValue; + getAverage() { + return this.groupValue / this.avgCounter; } /** - * Find max value from group records. - * @param {Boolean} first - true if first record in set. - * @param {Number} value - cumulative data from all previous group records. - * @param {Number} data - data from current group record - * @returns {Number} - max value from set. + * + * @param {any} columnData + * @returns {Number} */ - static maxCase(first, value, data) { - const groupValue = first ? data : value; - return data > groupValue ? data : groupValue; + count(columnData) { + this.groupValue++; + if (this.isDistinct) { + this.distinctSet.add(columnData); + this.groupValue = this.distinctSet.size; + } + + return this.groupValue; + } + + /** + * + * @param {any} columnData + * @returns {void} + */ + addGroupConcatItem(columnData) { + if (this.isDistinct) { + this.distinctSet.add(columnData); + } + else { + this.groupConcat.push(columnData); + } + } + + /** + * All data from column returned as single string with items separated by comma. + * @returns {String} + */ + getGroupConcat() { + if (this.isDistinct) { + this.groupConcat = Array.from(this.distinctSet.keys()); + } + this.groupConcat.sort(); + + return this.groupConcat.join(); } } @@ -2668,10 +2735,10 @@ class TableFields { if (matches !== null && matches.length > 1) { columnName = matches[1]; - fieldDistinct = "DISTINCT"; + fieldDistinct = "DISTINCT"; } } - + return [columnName, fieldDistinct]; }