@node-c/persistance-rdb 1.0.0-alpha1 → 1.0.0-alpha10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +864 -0
- package/coverage/common/definitions/common.constants.ts.html +103 -0
- package/coverage/common/definitions/index.html +131 -0
- package/coverage/common/definitions/index.ts.html +88 -0
- package/coverage/coverage-final.json +12 -0
- package/coverage/entityService/index.html +131 -0
- package/coverage/entityService/index.ts.html +91 -0
- package/coverage/entityService/rdb.entity.service.ts.html +1126 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +176 -0
- package/coverage/module/index.html +131 -0
- package/coverage/module/index.ts.html +91 -0
- package/coverage/module/rdb.module.ts.html +241 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/repository/index.html +131 -0
- package/coverage/repository/index.ts.html +91 -0
- package/coverage/repository/rdb.repository.module.ts.html +172 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/sqlQueryBuilder/index.html +146 -0
- package/coverage/sqlQueryBuilder/index.ts.html +94 -0
- package/coverage/sqlQueryBuilder/sqlQueryBuilder.module.ts.html +163 -0
- package/coverage/sqlQueryBuilder/sqlQueryBuilder.service.ts.html +1534 -0
- package/dist/common/definitions/common.constants.d.ts +4 -0
- package/dist/common/definitions/common.constants.js +5 -1
- package/dist/common/definitions/common.constants.js.map +1 -1
- package/dist/{entityService → entity}/index.d.ts +2 -1
- package/dist/{entityService → entity}/index.js +2 -1
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/rdb.entity.schema.d.ts +9 -0
- package/dist/{module/rdb.module.definitions.js → entity/rdb.entity.schema.js} +1 -1
- package/dist/entity/rdb.entity.schema.js.map +1 -0
- package/dist/entity/rdb.entity.service.d.ts +35 -0
- package/dist/entity/rdb.entity.service.definitions.d.ts +21 -0
- package/dist/{entityService → entity}/rdb.entity.service.definitions.js +1 -1
- package/dist/entity/rdb.entity.service.definitions.js.map +1 -0
- package/dist/{entityService → entity}/rdb.entity.service.js +33 -19
- package/dist/entity/rdb.entity.service.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/ormQueryBuilder/index.d.ts +1 -0
- package/dist/{module → ormQueryBuilder}/index.js +1 -2
- package/dist/ormQueryBuilder/index.js.map +1 -0
- package/dist/ormQueryBuilder/rdb.ormQueryBuilder.d.ts +38 -0
- package/dist/ormQueryBuilder/rdb.ormQueryBuilder.js +16 -0
- package/dist/ormQueryBuilder/rdb.ormQueryBuilder.js.map +1 -0
- package/dist/repository/index.d.ts +1 -2
- package/dist/repository/index.js +1 -2
- package/dist/repository/index.js.map +1 -1
- package/dist/repository/rdb.repository.d.ts +22 -0
- package/dist/repository/rdb.repository.js +10 -0
- package/dist/repository/rdb.repository.js.map +1 -0
- package/dist/sqlQueryBuilder/index.d.ts +3 -3
- package/dist/sqlQueryBuilder/index.js +3 -3
- package/dist/sqlQueryBuilder/index.js.map +1 -1
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.definitions.d.ts → rdb.sqlQueryBuilder.definitions.d.ts} +2 -6
- package/dist/{repository/rdb.repository.definitions.js → sqlQueryBuilder/rdb.sqlQueryBuilder.definitions.js} +1 -1
- package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.definitions.js.map +1 -0
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.module.d.ts → rdb.sqlQueryBuilder.module.d.ts} +1 -1
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.module.js → rdb.sqlQueryBuilder.module.js} +6 -6
- package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.module.js.map +1 -0
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.service.d.ts → rdb.sqlQueryBuilder.service.d.ts} +10 -11
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.service.js → rdb.sqlQueryBuilder.service.js} +36 -31
- package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.service.js.map +1 -0
- package/package.json +2 -6
- package/dist/entityService/index.js.map +0 -1
- package/dist/entityService/rdb.entity.service.d.ts +0 -34
- package/dist/entityService/rdb.entity.service.definitions.d.ts +0 -21
- package/dist/entityService/rdb.entity.service.definitions.js.map +0 -1
- package/dist/entityService/rdb.entity.service.js.map +0 -1
- package/dist/module/index.d.ts +0 -2
- package/dist/module/index.js.map +0 -1
- package/dist/module/rdb.module.d.ts +0 -5
- package/dist/module/rdb.module.definitions.d.ts +0 -15
- package/dist/module/rdb.module.definitions.js.map +0 -1
- package/dist/module/rdb.module.js +0 -45
- package/dist/module/rdb.module.js.map +0 -1
- package/dist/repository/rdb.repository.definitions.d.ts +0 -5
- package/dist/repository/rdb.repository.definitions.js.map +0 -1
- package/dist/repository/rdb.repository.module.d.ts +0 -6
- package/dist/repository/rdb.repository.module.js +0 -38
- package/dist/repository/rdb.repository.module.js.map +0 -1
- package/dist/sqlQueryBuilder/sqlQueryBuilder.definitions.js +0 -3
- package/dist/sqlQueryBuilder/sqlQueryBuilder.definitions.js.map +0 -1
- package/dist/sqlQueryBuilder/sqlQueryBuilder.module.js.map +0 -1
- package/dist/sqlQueryBuilder/sqlQueryBuilder.service.js.map +0 -1
|
@@ -0,0 +1,1534 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for sqlQueryBuilder/sqlQueryBuilder.service.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">sqlQueryBuilder</a> sqlQueryBuilder.service.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>417/417</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">96% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>120/125</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>9/9</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>417/417</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
+
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
+
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
+
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
+
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
+
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
+
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
+
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
+
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
+
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
+
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
+
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
+
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
+
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
+
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
+
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
+
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
+
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
+
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
+
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
+
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
+
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
+
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
+
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
+
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
+
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
+
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
+
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
+
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
+
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
+
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
+
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
+
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
+
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
+
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
+
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
+
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
+
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
+
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
+
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
+
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
+
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
+
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
+
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
+
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
+
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
+
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
+
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
+
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
+
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
+
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
+
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
+
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
+
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
+
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
+
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
+
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
+
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
+
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
+
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
+
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
+
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
+
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
+
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
+
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
+
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
+
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
+
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
+
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
+
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
+
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
+
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
+
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
+
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
+
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
+
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
+
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
+
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
+
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
+
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
+
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
+
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
+
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
+
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
+
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
+
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
+
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
+
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
+
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
+
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
+
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
+
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
+
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
+
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
+
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
+
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
+
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
+
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
+
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
+
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
+
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
+
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
+
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
+
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
+
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
+
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
+
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
+
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
+
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
+
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
+
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
+
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
+
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
+
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
+
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
+
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
+
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
+
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
+
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
+
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
+
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
+
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
+
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
+
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
+
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
+
<a name='L479'></a><a href='#L479'>479</a>
|
|
545
|
+
<a name='L480'></a><a href='#L480'>480</a>
|
|
546
|
+
<a name='L481'></a><a href='#L481'>481</a>
|
|
547
|
+
<a name='L482'></a><a href='#L482'>482</a>
|
|
548
|
+
<a name='L483'></a><a href='#L483'>483</a>
|
|
549
|
+
<a name='L484'></a><a href='#L484'>484</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
550
|
+
<span class="cline-any cline-yes">1x</span>
|
|
551
|
+
<span class="cline-any cline-neutral"> </span>
|
|
552
|
+
<span class="cline-any cline-yes">1x</span>
|
|
553
|
+
<span class="cline-any cline-neutral"> </span>
|
|
554
|
+
<span class="cline-any cline-yes">1x</span>
|
|
555
|
+
<span class="cline-any cline-neutral"> </span>
|
|
556
|
+
<span class="cline-any cline-neutral"> </span>
|
|
557
|
+
<span class="cline-any cline-neutral"> </span>
|
|
558
|
+
<span class="cline-any cline-neutral"> </span>
|
|
559
|
+
<span class="cline-any cline-yes">1x</span>
|
|
560
|
+
<span class="cline-any cline-neutral"> </span>
|
|
561
|
+
<span class="cline-any cline-yes">1x</span>
|
|
562
|
+
<span class="cline-any cline-yes">1x</span>
|
|
563
|
+
<span class="cline-any cline-yes">1x</span>
|
|
564
|
+
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-neutral"> </span>
|
|
566
|
+
<span class="cline-any cline-neutral"> </span>
|
|
567
|
+
<span class="cline-any cline-neutral"> </span>
|
|
568
|
+
<span class="cline-any cline-yes">1x</span>
|
|
569
|
+
<span class="cline-any cline-yes">27x</span>
|
|
570
|
+
<span class="cline-any cline-yes">27x</span>
|
|
571
|
+
<span class="cline-any cline-yes">27x</span>
|
|
572
|
+
<span class="cline-any cline-yes">27x</span>
|
|
573
|
+
<span class="cline-any cline-yes">27x</span>
|
|
574
|
+
<span class="cline-any cline-yes">27x</span>
|
|
575
|
+
<span class="cline-any cline-yes">27x</span>
|
|
576
|
+
<span class="cline-any cline-yes">4x</span>
|
|
577
|
+
<span class="cline-any cline-yes">4x</span>
|
|
578
|
+
<span class="cline-any cline-yes">27x</span>
|
|
579
|
+
<span class="cline-any cline-yes">22x</span>
|
|
580
|
+
<span class="cline-any cline-yes">22x</span>
|
|
581
|
+
<span class="cline-any cline-yes">22x</span>
|
|
582
|
+
<span class="cline-any cline-yes">27x</span>
|
|
583
|
+
<span class="cline-any cline-neutral"> </span>
|
|
584
|
+
<span class="cline-any cline-yes">1x</span>
|
|
585
|
+
<span class="cline-any cline-yes">4x</span>
|
|
586
|
+
<span class="cline-any cline-neutral"> </span>
|
|
587
|
+
<span class="cline-any cline-neutral"> </span>
|
|
588
|
+
<span class="cline-any cline-neutral"> </span>
|
|
589
|
+
<span class="cline-any cline-neutral"> </span>
|
|
590
|
+
<span class="cline-any cline-yes">4x</span>
|
|
591
|
+
<span class="cline-any cline-yes">4x</span>
|
|
592
|
+
<span class="cline-any cline-yes">4x</span>
|
|
593
|
+
<span class="cline-any cline-yes">4x</span>
|
|
594
|
+
<span class="cline-any cline-yes">4x</span>
|
|
595
|
+
<span class="cline-any cline-yes">4x</span>
|
|
596
|
+
<span class="cline-any cline-yes">3x</span>
|
|
597
|
+
<span class="cline-any cline-yes">1x</span>
|
|
598
|
+
<span class="cline-any cline-yes">1x</span>
|
|
599
|
+
<span class="cline-any cline-yes">3x</span>
|
|
600
|
+
<span class="cline-any cline-yes">2x</span>
|
|
601
|
+
<span class="cline-any cline-yes">2x</span>
|
|
602
|
+
<span class="cline-any cline-yes">1x</span>
|
|
603
|
+
<span class="cline-any cline-yes">1x</span>
|
|
604
|
+
<span class="cline-any cline-yes">1x</span>
|
|
605
|
+
<span class="cline-any cline-yes">1x</span>
|
|
606
|
+
<span class="cline-any cline-yes">1x</span>
|
|
607
|
+
<span class="cline-any cline-yes">1x</span>
|
|
608
|
+
<span class="cline-any cline-yes">1x</span>
|
|
609
|
+
<span class="cline-any cline-yes">1x</span>
|
|
610
|
+
<span class="cline-any cline-yes">2x</span>
|
|
611
|
+
<span class="cline-any cline-yes">2x</span>
|
|
612
|
+
<span class="cline-any cline-yes">3x</span>
|
|
613
|
+
<span class="cline-any cline-yes">1x</span>
|
|
614
|
+
<span class="cline-any cline-yes">1x</span>
|
|
615
|
+
<span class="cline-any cline-yes">3x</span>
|
|
616
|
+
<span class="cline-any cline-yes">4x</span>
|
|
617
|
+
<span class="cline-any cline-yes">3x</span>
|
|
618
|
+
<span class="cline-any cline-yes">3x</span>
|
|
619
|
+
<span class="cline-any cline-yes">6x</span>
|
|
620
|
+
<span class="cline-any cline-yes">6x</span>
|
|
621
|
+
<span class="cline-any cline-yes">1x</span>
|
|
622
|
+
<span class="cline-any cline-yes">1x</span>
|
|
623
|
+
<span class="cline-any cline-yes">5x</span>
|
|
624
|
+
<span class="cline-any cline-yes">6x</span>
|
|
625
|
+
<span class="cline-any cline-yes">3x</span>
|
|
626
|
+
<span class="cline-any cline-yes">6x</span>
|
|
627
|
+
<span class="cline-any cline-yes">2x</span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-yes">2x</span>
|
|
630
|
+
<span class="cline-any cline-yes">5x</span>
|
|
631
|
+
<span class="cline-any cline-yes">5x</span>
|
|
632
|
+
<span class="cline-any cline-yes">5x</span>
|
|
633
|
+
<span class="cline-any cline-yes">5x</span>
|
|
634
|
+
<span class="cline-any cline-yes">5x</span>
|
|
635
|
+
<span class="cline-any cline-yes">3x</span>
|
|
636
|
+
<span class="cline-any cline-yes">4x</span>
|
|
637
|
+
<span class="cline-any cline-yes">1x</span>
|
|
638
|
+
<span class="cline-any cline-yes">1x</span>
|
|
639
|
+
<span class="cline-any cline-yes">1x</span>
|
|
640
|
+
<span class="cline-any cline-yes">1x</span>
|
|
641
|
+
<span class="cline-any cline-yes">1x</span>
|
|
642
|
+
<span class="cline-any cline-yes">1x</span>
|
|
643
|
+
<span class="cline-any cline-yes">1x</span>
|
|
644
|
+
<span class="cline-any cline-yes">1x</span>
|
|
645
|
+
<span class="cline-any cline-yes">1x</span>
|
|
646
|
+
<span class="cline-any cline-yes">1x</span>
|
|
647
|
+
<span class="cline-any cline-yes">4x</span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-yes">1x</span>
|
|
650
|
+
<span class="cline-any cline-yes">28x</span>
|
|
651
|
+
<span class="cline-any cline-yes">28x</span>
|
|
652
|
+
<span class="cline-any cline-yes">28x</span>
|
|
653
|
+
<span class="cline-any cline-yes">28x</span>
|
|
654
|
+
<span class="cline-any cline-yes">28x</span>
|
|
655
|
+
<span class="cline-any cline-yes">28x</span>
|
|
656
|
+
<span class="cline-any cline-yes">28x</span>
|
|
657
|
+
<span class="cline-any cline-yes">28x</span>
|
|
658
|
+
<span class="cline-any cline-yes">28x</span>
|
|
659
|
+
<span class="cline-any cline-yes">28x</span>
|
|
660
|
+
<span class="cline-any cline-yes">28x</span>
|
|
661
|
+
<span class="cline-any cline-yes">28x</span>
|
|
662
|
+
<span class="cline-any cline-yes">2x</span>
|
|
663
|
+
<span class="cline-any cline-yes">2x</span>
|
|
664
|
+
<span class="cline-any cline-yes">1x</span>
|
|
665
|
+
<span class="cline-any cline-yes">1x</span>
|
|
666
|
+
<span class="cline-any cline-yes">1x</span>
|
|
667
|
+
<span class="cline-any cline-yes">1x</span>
|
|
668
|
+
<span class="cline-any cline-yes">2x</span>
|
|
669
|
+
<span class="cline-any cline-yes">2x</span>
|
|
670
|
+
<span class="cline-any cline-yes">2x</span>
|
|
671
|
+
<span class="cline-any cline-yes">2x</span>
|
|
672
|
+
<span class="cline-any cline-yes">2x</span>
|
|
673
|
+
<span class="cline-any cline-yes">28x</span>
|
|
674
|
+
<span class="cline-any cline-yes">2x</span>
|
|
675
|
+
<span class="cline-any cline-yes">2x</span>
|
|
676
|
+
<span class="cline-any cline-yes">2x</span>
|
|
677
|
+
<span class="cline-any cline-yes">2x</span>
|
|
678
|
+
<span class="cline-any cline-yes">2x</span>
|
|
679
|
+
<span class="cline-any cline-yes">28x</span>
|
|
680
|
+
<span class="cline-any cline-yes">1x</span>
|
|
681
|
+
<span class="cline-any cline-yes">1x</span>
|
|
682
|
+
<span class="cline-any cline-yes">1x</span>
|
|
683
|
+
<span class="cline-any cline-yes">1x</span>
|
|
684
|
+
<span class="cline-any cline-yes">1x</span>
|
|
685
|
+
<span class="cline-any cline-yes">28x</span>
|
|
686
|
+
<span class="cline-any cline-yes">1x</span>
|
|
687
|
+
<span class="cline-any cline-yes">1x</span>
|
|
688
|
+
<span class="cline-any cline-yes">1x</span>
|
|
689
|
+
<span class="cline-any cline-yes">1x</span>
|
|
690
|
+
<span class="cline-any cline-yes">1x</span>
|
|
691
|
+
<span class="cline-any cline-yes">28x</span>
|
|
692
|
+
<span class="cline-any cline-yes">1x</span>
|
|
693
|
+
<span class="cline-any cline-yes">1x</span>
|
|
694
|
+
<span class="cline-any cline-yes">1x</span>
|
|
695
|
+
<span class="cline-any cline-yes">1x</span>
|
|
696
|
+
<span class="cline-any cline-yes">1x</span>
|
|
697
|
+
<span class="cline-any cline-yes">21x</span>
|
|
698
|
+
<span class="cline-any cline-yes">21x</span>
|
|
699
|
+
<span class="cline-any cline-yes">18x</span>
|
|
700
|
+
<span class="cline-any cline-yes">28x</span>
|
|
701
|
+
<span class="cline-any cline-yes">4x</span>
|
|
702
|
+
<span class="cline-any cline-yes">4x</span>
|
|
703
|
+
<span class="cline-any cline-yes">4x</span>
|
|
704
|
+
<span class="cline-any cline-yes">4x</span>
|
|
705
|
+
<span class="cline-any cline-yes">4x</span>
|
|
706
|
+
<span class="cline-any cline-yes">28x</span>
|
|
707
|
+
<span class="cline-any cline-yes">2x</span>
|
|
708
|
+
<span class="cline-any cline-yes">2x</span>
|
|
709
|
+
<span class="cline-any cline-yes">2x</span>
|
|
710
|
+
<span class="cline-any cline-yes">2x</span>
|
|
711
|
+
<span class="cline-any cline-yes">2x</span>
|
|
712
|
+
<span class="cline-any cline-yes">15x</span>
|
|
713
|
+
<span class="cline-any cline-yes">15x</span>
|
|
714
|
+
<span class="cline-any cline-yes">28x</span>
|
|
715
|
+
<span class="cline-any cline-yes">28x</span>
|
|
716
|
+
<span class="cline-any cline-yes">28x</span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-yes">1x</span>
|
|
719
|
+
<span class="cline-any cline-yes">14x</span>
|
|
720
|
+
<span class="cline-any cline-yes">14x</span>
|
|
721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-neutral"> </span>
|
|
725
|
+
<span class="cline-any cline-neutral"> </span>
|
|
726
|
+
<span class="cline-any cline-yes">14x</span>
|
|
727
|
+
<span class="cline-any cline-yes">14x</span>
|
|
728
|
+
<span class="cline-any cline-yes">14x</span>
|
|
729
|
+
<span class="cline-any cline-yes">14x</span>
|
|
730
|
+
<span class="cline-any cline-yes">14x</span>
|
|
731
|
+
<span class="cline-any cline-yes">14x</span>
|
|
732
|
+
<span class="cline-any cline-yes">22x</span>
|
|
733
|
+
<span class="cline-any cline-yes">22x</span>
|
|
734
|
+
<span class="cline-any cline-yes">4x</span>
|
|
735
|
+
<span class="cline-any cline-yes">4x</span>
|
|
736
|
+
<span class="cline-any cline-yes">22x</span>
|
|
737
|
+
<span class="cline-any cline-yes">11x</span>
|
|
738
|
+
<span class="cline-any cline-yes">11x</span>
|
|
739
|
+
<span class="cline-any cline-yes">18x</span>
|
|
740
|
+
<span class="cline-any cline-yes">18x</span>
|
|
741
|
+
<span class="cline-any cline-yes">17x</span>
|
|
742
|
+
<span class="cline-any cline-yes">16x</span>
|
|
743
|
+
<span class="cline-any cline-yes">8x</span>
|
|
744
|
+
<span class="cline-any cline-yes">8x</span>
|
|
745
|
+
<span class="cline-any cline-yes">7x</span>
|
|
746
|
+
<span class="cline-any cline-yes">22x</span>
|
|
747
|
+
<span class="cline-any cline-yes">12x</span>
|
|
748
|
+
<span class="cline-any cline-yes">12x</span>
|
|
749
|
+
<span class="cline-any cline-yes">12x</span>
|
|
750
|
+
<span class="cline-any cline-yes">12x</span>
|
|
751
|
+
<span class="cline-any cline-yes">12x</span>
|
|
752
|
+
<span class="cline-any cline-yes">22x</span>
|
|
753
|
+
<span class="cline-any cline-yes">1x</span>
|
|
754
|
+
<span class="cline-any cline-yes">1x</span>
|
|
755
|
+
<span class="cline-any cline-yes">1x</span>
|
|
756
|
+
<span class="cline-any cline-yes">1x</span>
|
|
757
|
+
<span class="cline-any cline-yes">1x</span>
|
|
758
|
+
<span class="cline-any cline-yes">5x</span>
|
|
759
|
+
<span class="cline-any cline-yes">5x</span>
|
|
760
|
+
<span class="cline-any cline-yes">5x</span>
|
|
761
|
+
<span class="cline-any cline-yes">5x</span>
|
|
762
|
+
<span class="cline-any cline-yes">22x</span>
|
|
763
|
+
<span class="cline-any cline-yes">14x</span>
|
|
764
|
+
<span class="cline-any cline-yes">14x</span>
|
|
765
|
+
<span class="cline-any cline-neutral"> </span>
|
|
766
|
+
<span class="cline-any cline-neutral"> </span>
|
|
767
|
+
<span class="cline-any cline-neutral"> </span>
|
|
768
|
+
<span class="cline-any cline-neutral"> </span>
|
|
769
|
+
<span class="cline-any cline-neutral"> </span>
|
|
770
|
+
<span class="cline-any cline-neutral"> </span>
|
|
771
|
+
<span class="cline-any cline-neutral"> </span>
|
|
772
|
+
<span class="cline-any cline-neutral"> </span>
|
|
773
|
+
<span class="cline-any cline-neutral"> </span>
|
|
774
|
+
<span class="cline-any cline-neutral"> </span>
|
|
775
|
+
<span class="cline-any cline-neutral"> </span>
|
|
776
|
+
<span class="cline-any cline-neutral"> </span>
|
|
777
|
+
<span class="cline-any cline-neutral"> </span>
|
|
778
|
+
<span class="cline-any cline-neutral"> </span>
|
|
779
|
+
<span class="cline-any cline-neutral"> </span>
|
|
780
|
+
<span class="cline-any cline-neutral"> </span>
|
|
781
|
+
<span class="cline-any cline-neutral"> </span>
|
|
782
|
+
<span class="cline-any cline-neutral"> </span>
|
|
783
|
+
<span class="cline-any cline-neutral"> </span>
|
|
784
|
+
<span class="cline-any cline-neutral"> </span>
|
|
785
|
+
<span class="cline-any cline-neutral"> </span>
|
|
786
|
+
<span class="cline-any cline-neutral"> </span>
|
|
787
|
+
<span class="cline-any cline-neutral"> </span>
|
|
788
|
+
<span class="cline-any cline-neutral"> </span>
|
|
789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
790
|
+
<span class="cline-any cline-yes">1x</span>
|
|
791
|
+
<span class="cline-any cline-yes">30x</span>
|
|
792
|
+
<span class="cline-any cline-yes">30x</span>
|
|
793
|
+
<span class="cline-any cline-yes">30x</span>
|
|
794
|
+
<span class="cline-any cline-neutral"> </span>
|
|
795
|
+
<span class="cline-any cline-neutral"> </span>
|
|
796
|
+
<span class="cline-any cline-neutral"> </span>
|
|
797
|
+
<span class="cline-any cline-yes">30x</span>
|
|
798
|
+
<span class="cline-any cline-neutral"> </span>
|
|
799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
800
|
+
<span class="cline-any cline-neutral"> </span>
|
|
801
|
+
<span class="cline-any cline-yes">30x</span>
|
|
802
|
+
<span class="cline-any cline-yes">30x</span>
|
|
803
|
+
<span class="cline-any cline-yes">30x</span>
|
|
804
|
+
<span class="cline-any cline-yes">30x</span>
|
|
805
|
+
<span class="cline-any cline-yes">30x</span>
|
|
806
|
+
<span class="cline-any cline-yes">30x</span>
|
|
807
|
+
<span class="cline-any cline-yes">30x</span>
|
|
808
|
+
<span class="cline-any cline-yes">30x</span>
|
|
809
|
+
<span class="cline-any cline-yes">30x</span>
|
|
810
|
+
<span class="cline-any cline-yes">4x</span>
|
|
811
|
+
<span class="cline-any cline-yes">4x</span>
|
|
812
|
+
<span class="cline-any cline-yes">30x</span>
|
|
813
|
+
<span class="cline-any cline-yes">30x</span>
|
|
814
|
+
<span class="cline-any cline-neutral"> </span>
|
|
815
|
+
<span class="cline-any cline-yes">30x</span>
|
|
816
|
+
<span class="cline-any cline-yes">1x</span>
|
|
817
|
+
<span class="cline-any cline-yes">1x</span>
|
|
818
|
+
<span class="cline-any cline-yes">1x</span>
|
|
819
|
+
<span class="cline-any cline-yes">1x</span>
|
|
820
|
+
<span class="cline-any cline-yes">1x</span>
|
|
821
|
+
<span class="cline-any cline-yes">1x</span>
|
|
822
|
+
<span class="cline-any cline-yes">1x</span>
|
|
823
|
+
<span class="cline-any cline-yes">1x</span>
|
|
824
|
+
<span class="cline-any cline-yes">1x</span>
|
|
825
|
+
<span class="cline-any cline-yes">1x</span>
|
|
826
|
+
<span class="cline-any cline-yes">1x</span>
|
|
827
|
+
<span class="cline-any cline-yes">1x</span>
|
|
828
|
+
<span class="cline-any cline-yes">1x</span>
|
|
829
|
+
<span class="cline-any cline-yes">1x</span>
|
|
830
|
+
<span class="cline-any cline-yes">1x</span>
|
|
831
|
+
<span class="cline-any cline-yes">1x</span>
|
|
832
|
+
<span class="cline-any cline-yes">1x</span>
|
|
833
|
+
<span class="cline-any cline-yes">1x</span>
|
|
834
|
+
<span class="cline-any cline-yes">1x</span>
|
|
835
|
+
<span class="cline-any cline-yes">1x</span>
|
|
836
|
+
<span class="cline-any cline-yes">1x</span>
|
|
837
|
+
<span class="cline-any cline-yes">1x</span>
|
|
838
|
+
<span class="cline-any cline-yes">1x</span>
|
|
839
|
+
<span class="cline-any cline-yes">1x</span>
|
|
840
|
+
<span class="cline-any cline-yes">30x</span>
|
|
841
|
+
<span class="cline-any cline-yes">2x</span>
|
|
842
|
+
<span class="cline-any cline-yes">2x</span>
|
|
843
|
+
<span class="cline-any cline-yes">2x</span>
|
|
844
|
+
<span class="cline-any cline-yes">2x</span>
|
|
845
|
+
<span class="cline-any cline-yes">2x</span>
|
|
846
|
+
<span class="cline-any cline-neutral"> </span>
|
|
847
|
+
<span class="cline-any cline-yes">30x</span>
|
|
848
|
+
<span class="cline-any cline-neutral"> </span>
|
|
849
|
+
<span class="cline-any cline-yes">6x</span>
|
|
850
|
+
<span class="cline-any cline-yes">6x</span>
|
|
851
|
+
<span class="cline-any cline-yes">6x</span>
|
|
852
|
+
<span class="cline-any cline-yes">6x</span>
|
|
853
|
+
<span class="cline-any cline-yes">6x</span>
|
|
854
|
+
<span class="cline-any cline-yes">1x</span>
|
|
855
|
+
<span class="cline-any cline-yes">1x</span>
|
|
856
|
+
<span class="cline-any cline-yes">6x</span>
|
|
857
|
+
<span class="cline-any cline-yes">2x</span>
|
|
858
|
+
<span class="cline-any cline-yes">1x</span>
|
|
859
|
+
<span class="cline-any cline-yes">1x</span>
|
|
860
|
+
<span class="cline-any cline-yes">1x</span>
|
|
861
|
+
<span class="cline-any cline-yes">1x</span>
|
|
862
|
+
<span class="cline-any cline-yes">1x</span>
|
|
863
|
+
<span class="cline-any cline-yes">1x</span>
|
|
864
|
+
<span class="cline-any cline-yes">1x</span>
|
|
865
|
+
<span class="cline-any cline-yes">1x</span>
|
|
866
|
+
<span class="cline-any cline-yes">1x</span>
|
|
867
|
+
<span class="cline-any cline-yes">1x</span>
|
|
868
|
+
<span class="cline-any cline-yes">1x</span>
|
|
869
|
+
<span class="cline-any cline-yes">2x</span>
|
|
870
|
+
<span class="cline-any cline-yes">2x</span>
|
|
871
|
+
<span class="cline-any cline-yes">2x</span>
|
|
872
|
+
<span class="cline-any cline-yes">2x</span>
|
|
873
|
+
<span class="cline-any cline-yes">2x</span>
|
|
874
|
+
<span class="cline-any cline-neutral"> </span>
|
|
875
|
+
<span class="cline-any cline-yes">6x</span>
|
|
876
|
+
<span class="cline-any cline-yes">1x</span>
|
|
877
|
+
<span class="cline-any cline-yes">1x</span>
|
|
878
|
+
<span class="cline-any cline-yes">2x</span>
|
|
879
|
+
<span class="cline-any cline-yes">2x</span>
|
|
880
|
+
<span class="cline-any cline-yes">2x</span>
|
|
881
|
+
<span class="cline-any cline-yes">2x</span>
|
|
882
|
+
<span class="cline-any cline-yes">2x</span>
|
|
883
|
+
<span class="cline-any cline-yes">2x</span>
|
|
884
|
+
<span class="cline-any cline-yes">2x</span>
|
|
885
|
+
<span class="cline-any cline-yes">2x</span>
|
|
886
|
+
<span class="cline-any cline-yes">2x</span>
|
|
887
|
+
<span class="cline-any cline-yes">2x</span>
|
|
888
|
+
<span class="cline-any cline-yes">1x</span>
|
|
889
|
+
<span class="cline-any cline-yes">1x</span>
|
|
890
|
+
<span class="cline-any cline-yes">1x</span>
|
|
891
|
+
<span class="cline-any cline-yes">6x</span>
|
|
892
|
+
<span class="cline-any cline-yes">2x</span>
|
|
893
|
+
<span class="cline-any cline-yes">2x</span>
|
|
894
|
+
<span class="cline-any cline-yes">2x</span>
|
|
895
|
+
<span class="cline-any cline-yes">2x</span>
|
|
896
|
+
<span class="cline-any cline-yes">2x</span>
|
|
897
|
+
<span class="cline-any cline-yes">2x</span>
|
|
898
|
+
<span class="cline-any cline-yes">2x</span>
|
|
899
|
+
<span class="cline-any cline-yes">2x</span>
|
|
900
|
+
<span class="cline-any cline-yes">1x</span>
|
|
901
|
+
<span class="cline-any cline-yes">1x</span>
|
|
902
|
+
<span class="cline-any cline-yes">1x</span>
|
|
903
|
+
<span class="cline-any cline-yes">1x</span>
|
|
904
|
+
<span class="cline-any cline-yes">1x</span>
|
|
905
|
+
<span class="cline-any cline-yes">2x</span>
|
|
906
|
+
<span class="cline-any cline-yes">2x</span>
|
|
907
|
+
<span class="cline-any cline-neutral"> </span>
|
|
908
|
+
<span class="cline-any cline-yes">30x</span>
|
|
909
|
+
<span class="cline-any cline-yes">3x</span>
|
|
910
|
+
<span class="cline-any cline-yes">3x</span>
|
|
911
|
+
<span class="cline-any cline-yes">3x</span>
|
|
912
|
+
<span class="cline-any cline-yes">3x</span>
|
|
913
|
+
<span class="cline-any cline-yes">3x</span>
|
|
914
|
+
<span class="cline-any cline-yes">3x</span>
|
|
915
|
+
<span class="cline-any cline-yes">3x</span>
|
|
916
|
+
<span class="cline-any cline-yes">3x</span>
|
|
917
|
+
<span class="cline-any cline-yes">3x</span>
|
|
918
|
+
<span class="cline-any cline-yes">3x</span>
|
|
919
|
+
<span class="cline-any cline-yes">3x</span>
|
|
920
|
+
<span class="cline-any cline-neutral"> </span>
|
|
921
|
+
<span class="cline-any cline-yes">14x</span>
|
|
922
|
+
<span class="cline-any cline-yes">14x</span>
|
|
923
|
+
<span class="cline-any cline-yes">30x</span>
|
|
924
|
+
<span class="cline-any cline-yes">30x</span>
|
|
925
|
+
<span class="cline-any cline-neutral"> </span>
|
|
926
|
+
<span class="cline-any cline-yes">1x</span>
|
|
927
|
+
<span class="cline-any cline-yes">12x</span>
|
|
928
|
+
<span class="cline-any cline-yes">12x</span>
|
|
929
|
+
<span class="cline-any cline-yes">12x</span>
|
|
930
|
+
<span class="cline-any cline-yes">12x</span>
|
|
931
|
+
<span class="cline-any cline-yes">12x</span>
|
|
932
|
+
<span class="cline-any cline-yes">12x</span>
|
|
933
|
+
<span class="cline-any cline-yes">12x</span>
|
|
934
|
+
<span class="cline-any cline-yes">12x</span>
|
|
935
|
+
<span class="cline-any cline-yes">12x</span>
|
|
936
|
+
<span class="cline-any cline-yes">12x</span>
|
|
937
|
+
<span class="cline-any cline-yes">12x</span>
|
|
938
|
+
<span class="cline-any cline-yes">12x</span>
|
|
939
|
+
<span class="cline-any cline-yes">15x</span>
|
|
940
|
+
<span class="cline-any cline-yes">15x</span>
|
|
941
|
+
<span class="cline-any cline-yes">1x</span>
|
|
942
|
+
<span class="cline-any cline-yes">1x</span>
|
|
943
|
+
<span class="cline-any cline-yes">15x</span>
|
|
944
|
+
<span class="cline-any cline-yes">15x</span>
|
|
945
|
+
<span class="cline-any cline-yes">15x</span>
|
|
946
|
+
<span class="cline-any cline-yes">15x</span>
|
|
947
|
+
<span class="cline-any cline-yes">15x</span>
|
|
948
|
+
<span class="cline-any cline-yes">15x</span>
|
|
949
|
+
<span class="cline-any cline-yes">15x</span>
|
|
950
|
+
<span class="cline-any cline-yes">15x</span>
|
|
951
|
+
<span class="cline-any cline-yes">15x</span>
|
|
952
|
+
<span class="cline-any cline-yes">15x</span>
|
|
953
|
+
<span class="cline-any cline-yes">15x</span>
|
|
954
|
+
<span class="cline-any cline-yes">15x</span>
|
|
955
|
+
<span class="cline-any cline-yes">15x</span>
|
|
956
|
+
<span class="cline-any cline-yes">3x</span>
|
|
957
|
+
<span class="cline-any cline-yes">3x</span>
|
|
958
|
+
<span class="cline-any cline-yes">12x</span>
|
|
959
|
+
<span class="cline-any cline-yes">15x</span>
|
|
960
|
+
<span class="cline-any cline-yes">15x</span>
|
|
961
|
+
<span class="cline-any cline-yes">15x</span>
|
|
962
|
+
<span class="cline-any cline-yes">15x</span>
|
|
963
|
+
<span class="cline-any cline-yes">15x</span>
|
|
964
|
+
<span class="cline-any cline-yes">15x</span>
|
|
965
|
+
<span class="cline-any cline-yes">15x</span>
|
|
966
|
+
<span class="cline-any cline-yes">12x</span>
|
|
967
|
+
<span class="cline-any cline-yes">12x</span>
|
|
968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
969
|
+
<span class="cline-any cline-yes">1x</span>
|
|
970
|
+
<span class="cline-any cline-yes">5x</span>
|
|
971
|
+
<span class="cline-any cline-yes">5x</span>
|
|
972
|
+
<span class="cline-any cline-yes">5x</span>
|
|
973
|
+
<span class="cline-any cline-yes">5x</span>
|
|
974
|
+
<span class="cline-any cline-yes">5x</span>
|
|
975
|
+
<span class="cline-any cline-yes">5x</span>
|
|
976
|
+
<span class="cline-any cline-yes">7x</span>
|
|
977
|
+
<span class="cline-any cline-yes">7x</span>
|
|
978
|
+
<span class="cline-any cline-yes">7x</span>
|
|
979
|
+
<span class="cline-any cline-yes">5x</span>
|
|
980
|
+
<span class="cline-any cline-yes">5x</span>
|
|
981
|
+
<span class="cline-any cline-yes">5x</span>
|
|
982
|
+
<span class="cline-any cline-yes">5x</span>
|
|
983
|
+
<span class="cline-any cline-neutral"> </span>
|
|
984
|
+
<span class="cline-any cline-yes">1x</span>
|
|
985
|
+
<span class="cline-any cline-yes">7x</span>
|
|
986
|
+
<span class="cline-any cline-yes">7x</span>
|
|
987
|
+
<span class="cline-any cline-yes">7x</span>
|
|
988
|
+
<span class="cline-any cline-yes">7x</span>
|
|
989
|
+
<span class="cline-any cline-yes">7x</span>
|
|
990
|
+
<span class="cline-any cline-neutral"> </span>
|
|
991
|
+
<span class="cline-any cline-yes">7x</span>
|
|
992
|
+
<span class="cline-any cline-yes">3x</span>
|
|
993
|
+
<span class="cline-any cline-yes">3x</span>
|
|
994
|
+
<span class="cline-any cline-yes">3x</span>
|
|
995
|
+
<span class="cline-any cline-yes">3x</span>
|
|
996
|
+
<span class="cline-any cline-yes">3x</span>
|
|
997
|
+
<span class="cline-any cline-yes">4x</span>
|
|
998
|
+
<span class="cline-any cline-yes">4x</span>
|
|
999
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1000
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1001
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1002
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1003
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1004
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1005
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1006
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1008
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1009
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1010
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1011
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1012
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1013
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1014
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1016
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1017
|
+
<span class="cline-any cline-yes">11x</span>
|
|
1018
|
+
<span class="cline-any cline-yes">11x</span>
|
|
1019
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1020
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1021
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1022
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1023
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1024
|
+
<span class="cline-any cline-yes">11x</span>
|
|
1025
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1026
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1027
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1028
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1029
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1030
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1031
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1032
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { Inject, Injectable } from '@nestjs/common';
|
|
1033
|
+
import { ConfigProviderService, GenericObject, PersistanceSelectOperator, RDBType } from '@node-c/core';
|
|
1034
|
+
|
|
1035
|
+
import { getNested } from '@ramster/general-tools';
|
|
1036
|
+
|
|
1037
|
+
import { DeleteQueryBuilder, ObjectLiteral, SelectQueryBuilder, UpdateQueryBuilder } from 'typeorm';
|
|
1038
|
+
import { SoftDeleteQueryBuilder } from 'typeorm/query-builder/SoftDeleteQueryBuilder';
|
|
1039
|
+
|
|
1040
|
+
import { BuildQueryOptions, IncludeItems, OrderBy, ParsedFilter } from './sqlQueryBuilder.definitions';
|
|
1041
|
+
|
|
1042
|
+
import { Constants } from '../common/definitions';
|
|
1043
|
+
|
|
1044
|
+
@Injectable()
|
|
1045
|
+
export class SQLQueryBuilderService {
|
|
1046
|
+
allowedStringOperators: string[] = Object.values(PersistanceSelectOperator);
|
|
1047
|
+
columnQuotesSymbol: string;
|
|
1048
|
+
dbType: RDBType;
|
|
1049
|
+
iLikeSupported: boolean;
|
|
1050
|
+
|
|
1051
|
+
constructor(
|
|
1052
|
+
public configProvider: ConfigProviderService,
|
|
1053
|
+
@Inject(Constants.SQL_BUILDER_DB_CONFIG_PATH)
|
|
1054
|
+
public dbConfigPath: string
|
|
1055
|
+
) {
|
|
1056
|
+
const { type } = getNested(configProvider, dbConfigPath) as { type: RDBType };
|
|
1057
|
+
this.dbType = type;
|
|
1058
|
+
if (type === RDBType.MySQL) {
|
|
1059
|
+
this.columnQuotesSymbol = '`';
|
|
1060
|
+
this.iLikeSupported = false;
|
|
1061
|
+
} else if (type === RDBType.PG) {
|
|
1062
|
+
this.columnQuotesSymbol = '"';
|
|
1063
|
+
this.iLikeSupported = true;
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
buildQuery<Entity extends ObjectLiteral>(
|
|
1068
|
+
queryBuilder:
|
|
1069
|
+
| SelectQueryBuilder<Entity>
|
|
1070
|
+
| UpdateQueryBuilder<Entity>
|
|
1071
|
+
| DeleteQueryBuilder<Entity>
|
|
1072
|
+
| SoftDeleteQueryBuilder<Entity>,
|
|
1073
|
+
options: BuildQueryOptions
|
|
1074
|
+
): void {
|
|
1075
|
+
const { where, include, orderBy, select, withDeleted = false } = options;
|
|
1076
|
+
const cqs = this.columnQuotesSymbol;
|
|
1077
|
+
const deletedColumnName = options.deletedColumnName || 'deletedAt';
|
|
1078
|
+
if (queryBuilder instanceof SelectQueryBuilder) {
|
|
1079
|
+
if (withDeleted) {
|
|
1080
|
+
queryBuilder.withDeleted();
|
|
1081
|
+
}
|
|
1082
|
+
if (include) {
|
|
1083
|
+
for (const relationProperty in include) {
|
|
1084
|
+
if (withDeleted) {
|
|
1085
|
+
queryBuilder.leftJoinAndSelect(relationProperty, include[relationProperty]);
|
|
1086
|
+
} else {
|
|
1087
|
+
queryBuilder.leftJoinAndSelect(
|
|
1088
|
+
relationProperty,
|
|
1089
|
+
include[relationProperty],
|
|
1090
|
+
`${cqs}${include[relationProperty]}${cqs}.${cqs}${deletedColumnName}${cqs} IS NULL`
|
|
1091
|
+
);
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
if (select && select.length) {
|
|
1096
|
+
queryBuilder.select(this.parseSelect(select, include));
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
if (where) {
|
|
1100
|
+
let isFirst = true;
|
|
1101
|
+
for (const fieldName in where) {
|
|
1102
|
+
const whereItem = where[fieldName];
|
|
1103
|
+
if (!whereItem.query.length) {
|
|
1104
|
+
continue;
|
|
1105
|
+
}
|
|
1106
|
+
let methodName = 'where';
|
|
1107
|
+
if (isFirst) {
|
|
1108
|
+
isFirst = false;
|
|
1109
|
+
} else {
|
|
1110
|
+
methodName = fieldName === PersistanceSelectOperator.<span class="branch-0 cbranch-no" title="branch not covered" >Or ? 'orWhere' : '</span>andWhere';
|
|
1111
|
+
// methodName = 'andWhere';
|
|
1112
|
+
}
|
|
1113
|
+
(queryBuilder as unknown as { [methodName: string]: (..._args: unknown[]) => void })[methodName](
|
|
1114
|
+
whereItem.query,
|
|
1115
|
+
whereItem.params
|
|
1116
|
+
);
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
if (orderBy && queryBuilder instanceof SelectQueryBuilder) {
|
|
1120
|
+
let isFirst = true;
|
|
1121
|
+
for (const item of orderBy) {
|
|
1122
|
+
let methodName: 'orderBy' | 'addOrderBy' = 'addOrderBy';
|
|
1123
|
+
if (isFirst) {
|
|
1124
|
+
methodName = 'orderBy';
|
|
1125
|
+
isFirst = false;
|
|
1126
|
+
}
|
|
1127
|
+
queryBuilder[methodName](item.field, item.direction);
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
getValueForFilter(
|
|
1133
|
+
entityName: string,
|
|
1134
|
+
fieldName: string,
|
|
1135
|
+
fieldAlias: string,
|
|
1136
|
+
fieldValue: unknown,
|
|
1137
|
+
isNot: boolean,
|
|
1138
|
+
operator?: PersistanceSelectOperator
|
|
1139
|
+
): ParsedFilter {
|
|
1140
|
+
const { columnQuotesSymbol: cqs, dbType } = this;
|
|
1141
|
+
const escapedFieldAlias = fieldAlias.replace(/\$/, '__ds__');
|
|
1142
|
+
const fieldString = `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}`;
|
|
1143
|
+
const parsedInnerValue = fieldValue instanceof Date ? fieldValue.valueOf() : fieldValue;
|
|
1144
|
+
if (operator === PersistanceSelectOperator.Contains) {
|
|
1145
|
+
let query = '';
|
|
1146
|
+
if (dbType === RDBType.MySQL) {
|
|
1147
|
+
query = `JSON_CONTAINS(${fieldString}, :${escapedFieldAlias})`;
|
|
1148
|
+
} else if (dbType === RDBType.PG) {
|
|
1149
|
+
query = `${fieldString} ? :${escapedFieldAlias}`;
|
|
1150
|
+
}
|
|
1151
|
+
return {
|
|
1152
|
+
params: { [escapedFieldAlias]: parsedInnerValue },
|
|
1153
|
+
query
|
|
1154
|
+
};
|
|
1155
|
+
}
|
|
1156
|
+
if (operator === PersistanceSelectOperator.GreaterThan) {
|
|
1157
|
+
return {
|
|
1158
|
+
params: { [escapedFieldAlias]: parsedInnerValue },
|
|
1159
|
+
query: `${fieldString} > :${escapedFieldAlias}`
|
|
1160
|
+
};
|
|
1161
|
+
}
|
|
1162
|
+
if (operator === PersistanceSelectOperator.GreaterThanOrEqual) {
|
|
1163
|
+
return {
|
|
1164
|
+
params: { [escapedFieldAlias]: parsedInnerValue },
|
|
1165
|
+
query: `${fieldString} >= :${escapedFieldAlias}`
|
|
1166
|
+
};
|
|
1167
|
+
}
|
|
1168
|
+
if (operator === PersistanceSelectOperator.LessThan) {
|
|
1169
|
+
return {
|
|
1170
|
+
params: { [escapedFieldAlias]: parsedInnerValue },
|
|
1171
|
+
query: `${fieldString} < :${escapedFieldAlias}`
|
|
1172
|
+
};
|
|
1173
|
+
}
|
|
1174
|
+
if (operator === PersistanceSelectOperator.LessThanOrEqual) {
|
|
1175
|
+
return {
|
|
1176
|
+
params: { [escapedFieldAlias]: parsedInnerValue },
|
|
1177
|
+
query: `${fieldString} <= :${escapedFieldAlias}`
|
|
1178
|
+
};
|
|
1179
|
+
}
|
|
1180
|
+
if (
|
|
1181
|
+
operator === PersistanceSelectOperator.Like ||
|
|
1182
|
+
(operator === PersistanceSelectOperator.ILike && !this.iLikeSupported)
|
|
1183
|
+
) {
|
|
1184
|
+
return {
|
|
1185
|
+
params: { [escapedFieldAlias]: parsedInnerValue },
|
|
1186
|
+
query: `${fieldString}${isNot ? ' not ' : ' '}` + `like :${escapedFieldAlias}`
|
|
1187
|
+
};
|
|
1188
|
+
}
|
|
1189
|
+
if (operator === PersistanceSelectOperator.ILike) {
|
|
1190
|
+
return {
|
|
1191
|
+
params: { [escapedFieldAlias]: typeof parsedInnerValue },
|
|
1192
|
+
query: `${fieldString}${isNot ? ' not ' : ' '}` + `ilike :${escapedFieldAlias}`
|
|
1193
|
+
};
|
|
1194
|
+
}
|
|
1195
|
+
return {
|
|
1196
|
+
params: { [escapedFieldAlias]: parsedInnerValue },
|
|
1197
|
+
query: `${fieldString} ${isNot ? '!=' : '='} :${escapedFieldAlias}`
|
|
1198
|
+
};
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
parseArrayOfFilters(
|
|
1202
|
+
filtersArray: unknown[],
|
|
1203
|
+
fieldAlias: string
|
|
1204
|
+
): {
|
|
1205
|
+
hasValues: boolean;
|
|
1206
|
+
isSimple: boolean;
|
|
1207
|
+
paramsForQuery: GenericObject;
|
|
1208
|
+
queryTemplateParamNames: string;
|
|
1209
|
+
} {
|
|
1210
|
+
let isSimple = true;
|
|
1211
|
+
let hasValues = false;
|
|
1212
|
+
const paramsForQuery: GenericObject = {};
|
|
1213
|
+
let queryTemplateParamNames = '';
|
|
1214
|
+
for (const i in filtersArray) {
|
|
1215
|
+
const fieldValueItem = filtersArray[i];
|
|
1216
|
+
if (typeof fieldValueItem === 'undefined') {
|
|
1217
|
+
continue;
|
|
1218
|
+
}
|
|
1219
|
+
if (!hasValues) {
|
|
1220
|
+
hasValues = true;
|
|
1221
|
+
}
|
|
1222
|
+
if (
|
|
1223
|
+
fieldValueItem === null ||
|
|
1224
|
+
typeof fieldValueItem === 'string' ||
|
|
1225
|
+
typeof fieldValueItem === 'number' ||
|
|
1226
|
+
typeof fieldValueItem === 'bigint' ||
|
|
1227
|
+
typeof fieldValueItem === 'symbol' ||
|
|
1228
|
+
typeof fieldValueItem === 'boolean'
|
|
1229
|
+
) {
|
|
1230
|
+
const queryParamName = `${fieldAlias}_${i}`;
|
|
1231
|
+
queryTemplateParamNames += `:${queryParamName}, `;
|
|
1232
|
+
paramsForQuery[queryParamName] = fieldValueItem;
|
|
1233
|
+
continue;
|
|
1234
|
+
}
|
|
1235
|
+
if (fieldValueItem instanceof Date) {
|
|
1236
|
+
const queryParamName = `${fieldAlias}_${i}`;
|
|
1237
|
+
queryTemplateParamNames += `:${queryParamName}, `;
|
|
1238
|
+
paramsForQuery[queryParamName] = fieldValueItem.valueOf();
|
|
1239
|
+
continue;
|
|
1240
|
+
}
|
|
1241
|
+
if (isSimple) {
|
|
1242
|
+
isSimple = false;
|
|
1243
|
+
break;
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
return { hasValues, isSimple, paramsForQuery, queryTemplateParamNames };
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
/*
|
|
1250
|
+
* This method is a tid bit complex, so it requires a proper explanation. The idea is that you can pass a deeply nested filters object (example below)
|
|
1251
|
+
* and receive back two objects - a 'where' object containg the where clause partials and their paramters, ready to be fed to the query builder,
|
|
1252
|
+
* and an 'include' object, containing the relations that need to be joined for the parsed where clause partials, provided there are any. This effectively
|
|
1253
|
+
* enables search by deeply nested fields, for example relatedEntity.deepRelatedEntity.deeperRelatedEntity.field = 'test'.
|
|
1254
|
+
* For further low-level details, check these issues: https://github.com/typeorm/typeorm/issues/2707, https://github.com/typeorm/typeorm/issues/3890
|
|
1255
|
+
* Example object:
|
|
1256
|
+
* {
|
|
1257
|
+
* field0: null,
|
|
1258
|
+
* field1: { $not: null },
|
|
1259
|
+
* field2: { $not: [ 1, new Date(), 2, null, 3, true, 'test' ] },
|
|
1260
|
+
* field3: [ 1, 2, 3 ],
|
|
1261
|
+
* field4: 10,
|
|
1262
|
+
* field5: 'test',
|
|
1263
|
+
* field6: false,
|
|
1264
|
+
* field7: new Date(),
|
|
1265
|
+
* field8: [ 1, new Date(), 2, null, 3, true, 'test' ],
|
|
1266
|
+
* field9: { $like: '%test%' },
|
|
1267
|
+
* entityName.innerEntityName.field10: { $between: [ 10, 20 ] },
|
|
1268
|
+
* field11: { $or: [ { $not: null }, 20, [ false, { $ilike: '%test' } ] ] },
|
|
1269
|
+
* field12: undefined,
|
|
1270
|
+
* $or: { ... }
|
|
1271
|
+
* }
|
|
1272
|
+
*/
|
|
1273
|
+
parseFilters(
|
|
1274
|
+
entityName: string,
|
|
1275
|
+
filters: GenericObject,
|
|
1276
|
+
options: {
|
|
1277
|
+
fieldAliases?: { [fieldName: string]: string };
|
|
1278
|
+
isTopLevel: boolean;
|
|
1279
|
+
operator?: PersistanceSelectOperator;
|
|
1280
|
+
} = { isTopLevel: true }
|
|
1281
|
+
): {
|
|
1282
|
+
where: { [fieldName: string]: ParsedFilter };
|
|
1283
|
+
include: IncludeItems;
|
|
1284
|
+
} {
|
|
1285
|
+
const cqs = this.columnQuotesSymbol;
|
|
1286
|
+
const { isTopLevel, operator } = options;
|
|
1287
|
+
const fieldAliases = options.fieldAliases || {};
|
|
1288
|
+
const where: { [fieldName: string]: ParsedFilter } = {};
|
|
1289
|
+
let include: IncludeItems = {};
|
|
1290
|
+
for (const fieldName in filters) {
|
|
1291
|
+
const fieldValue = filters[fieldName];
|
|
1292
|
+
if (typeof fieldValue === 'undefined') {
|
|
1293
|
+
continue;
|
|
1294
|
+
}
|
|
1295
|
+
const fieldAlias = fieldAliases[fieldName] || fieldName;
|
|
1296
|
+
const isNot = operator === PersistanceSelectOperator.Not;
|
|
1297
|
+
// handle relation fields
|
|
1298
|
+
if (fieldName.match(/\./)) {
|
|
1299
|
+
const fieldData = fieldName.split('.');
|
|
1300
|
+
const finalItemIndex = fieldData.length - 1;
|
|
1301
|
+
const actualFieldName = fieldData[finalItemIndex];
|
|
1302
|
+
let entityAlias = `${entityName}`;
|
|
1303
|
+
let previousEntityAlias = `${entityName}`;
|
|
1304
|
+
for (let i = 0; i < finalItemIndex; i++) {
|
|
1305
|
+
const currentEntityName = fieldData[i];
|
|
1306
|
+
entityAlias += `_${currentEntityName}`;
|
|
1307
|
+
include[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
|
|
1308
|
+
previousEntityAlias = `${entityAlias}`;
|
|
1309
|
+
}
|
|
1310
|
+
const itemData = this.parseFilters(
|
|
1311
|
+
entityAlias,
|
|
1312
|
+
{ [actualFieldName]: fieldValue },
|
|
1313
|
+
{
|
|
1314
|
+
fieldAliases: { [actualFieldName]: fieldAlias },
|
|
1315
|
+
isTopLevel: false,
|
|
1316
|
+
operator
|
|
1317
|
+
}
|
|
1318
|
+
);
|
|
1319
|
+
where[fieldName] = itemData.where[actualFieldName];
|
|
1320
|
+
include = { ...include, ...itemData.include };
|
|
1321
|
+
continue;
|
|
1322
|
+
}
|
|
1323
|
+
if (fieldValue === null) {
|
|
1324
|
+
where[fieldName] = {
|
|
1325
|
+
query: `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs} is${isNot ? ' not ' : ' '}null`
|
|
1326
|
+
};
|
|
1327
|
+
continue;
|
|
1328
|
+
}
|
|
1329
|
+
// handle array values
|
|
1330
|
+
if (fieldValue instanceof Array) {
|
|
1331
|
+
// if all values are primitive types and/or dates, then use 'between' (if provided) or 'in'
|
|
1332
|
+
const { hasValues, isSimple, paramsForQuery, queryTemplateParamNames } = this.parseArrayOfFilters(
|
|
1333
|
+
fieldValue,
|
|
1334
|
+
fieldAlias
|
|
1335
|
+
);
|
|
1336
|
+
if (!hasValues) {
|
|
1337
|
+
continue;
|
|
1338
|
+
}
|
|
1339
|
+
if (isSimple) {
|
|
1340
|
+
if (operator === PersistanceSelectOperator.Between) {
|
|
1341
|
+
where[fieldName] = {
|
|
1342
|
+
params: paramsForQuery,
|
|
1343
|
+
query:
|
|
1344
|
+
`${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}${<span class="branch-0 cbranch-no" title="branch not covered" >isNot ? ' not ' : '</span> '}` +
|
|
1345
|
+
`between :${fieldAlias}_0 and :${fieldAlias}_1`
|
|
1346
|
+
};
|
|
1347
|
+
continue;
|
|
1348
|
+
}
|
|
1349
|
+
where[fieldName] = {
|
|
1350
|
+
params: paramsForQuery,
|
|
1351
|
+
query:
|
|
1352
|
+
`${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}${<span class="branch-0 cbranch-no" title="branch not covered" >isNot ? ' not ' : '</span> '}` +
|
|
1353
|
+
`in (${queryTemplateParamNames.replace(/,\s$/, '')})`
|
|
1354
|
+
};
|
|
1355
|
+
continue;
|
|
1356
|
+
}
|
|
1357
|
+
// otherwise, go through the array's items recursively and build the query
|
|
1358
|
+
if (isTopLevel && fieldName === PersistanceSelectOperator.Or) {
|
|
1359
|
+
const finalWhereValue = { params: {}, query: '' };
|
|
1360
|
+
fieldValue.forEach((orFieldValue, orFieldIndex) => {
|
|
1361
|
+
const itemData = this.parseInnerFilters(
|
|
1362
|
+
entityName,
|
|
1363
|
+
orFieldValue,
|
|
1364
|
+
fieldName,
|
|
1365
|
+
`${fieldAlias}_${orFieldIndex}_f`,
|
|
1366
|
+
operator
|
|
1367
|
+
);
|
|
1368
|
+
finalWhereValue.params = { ...finalWhereValue.params, ...(itemData.parsedFilter.<span class="branch-0 cbranch-no" title="branch not covered" >params || {}) }</span>;
|
|
1369
|
+
finalWhereValue.query += `${finalWhereValue.query.length ? ' or ' : '('}${itemData.parsedFilter.query}`;
|
|
1370
|
+
include = { ...include, ...itemData.include };
|
|
1371
|
+
});
|
|
1372
|
+
finalWhereValue.query += ')';
|
|
1373
|
+
where[fieldName] = finalWhereValue;
|
|
1374
|
+
} else {
|
|
1375
|
+
const itemData = this.parseInnerFilters(
|
|
1376
|
+
entityName,
|
|
1377
|
+
fieldValue as unknown as GenericObject,
|
|
1378
|
+
fieldName,
|
|
1379
|
+
fieldAlias,
|
|
1380
|
+
operator
|
|
1381
|
+
);
|
|
1382
|
+
if (itemData.parsedFilter.query === '()') {
|
|
1383
|
+
continue;
|
|
1384
|
+
}
|
|
1385
|
+
where[fieldName] = itemData.parsedFilter;
|
|
1386
|
+
include = { ...include, ...itemData.include };
|
|
1387
|
+
}
|
|
1388
|
+
continue;
|
|
1389
|
+
}
|
|
1390
|
+
// handle non-date object values - go through the object's values recursively and build the query
|
|
1391
|
+
if (typeof fieldValue === 'object' && !(fieldValue instanceof Date)) {
|
|
1392
|
+
const itemData = this.parseInnerFilters(
|
|
1393
|
+
entityName,
|
|
1394
|
+
fieldValue as unknown as GenericObject,
|
|
1395
|
+
fieldName,
|
|
1396
|
+
fieldAlias,
|
|
1397
|
+
operator
|
|
1398
|
+
);
|
|
1399
|
+
where[fieldName] = itemData.parsedFilter;
|
|
1400
|
+
include = { ...include, ...itemData.include };
|
|
1401
|
+
continue;
|
|
1402
|
+
}
|
|
1403
|
+
// handle the rest of the allowed operators and the $not operator, where applicable
|
|
1404
|
+
where[fieldName] = this.getValueForFilter(entityName, fieldName, fieldAlias, fieldValue, isNot, operator);
|
|
1405
|
+
}
|
|
1406
|
+
return { where, include };
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
parseInnerFilters(
|
|
1410
|
+
entityName: string,
|
|
1411
|
+
filtersObject: GenericObject,
|
|
1412
|
+
fieldName: string,
|
|
1413
|
+
fieldAlias: string,
|
|
1414
|
+
operator?: PersistanceSelectOperator
|
|
1415
|
+
): { parsedFilter: ParsedFilter; include: IncludeItems } {
|
|
1416
|
+
const itemsCount = filtersObject instanceof Array ? filtersObject.length : Object.keys(filtersObject).length;
|
|
1417
|
+
const hasBrackets = itemsCount > 1;
|
|
1418
|
+
const parsedFilterItem = { params: {}, query: '' };
|
|
1419
|
+
let parsedValueCount = 0;
|
|
1420
|
+
let include = {};
|
|
1421
|
+
for (const key in filtersObject) {
|
|
1422
|
+
let op = null;
|
|
1423
|
+
if (this.allowedStringOperators.indexOf(key) !== -1) {
|
|
1424
|
+
op = key;
|
|
1425
|
+
}
|
|
1426
|
+
const actualFieldName = fieldName === PersistanceSelectOperator.Or ? key : fieldName;
|
|
1427
|
+
const innerValue = filtersObject[key];
|
|
1428
|
+
const itemData = this.parseFilters(
|
|
1429
|
+
entityName,
|
|
1430
|
+
{ [actualFieldName]: innerValue },
|
|
1431
|
+
{
|
|
1432
|
+
fieldAliases: { [actualFieldName]: `${fieldAlias}_${parsedValueCount}` },
|
|
1433
|
+
isTopLevel: false,
|
|
1434
|
+
operator: op as PersistanceSelectOperator
|
|
1435
|
+
}
|
|
1436
|
+
);
|
|
1437
|
+
const fieldWhereData = itemData.where[actualFieldName];
|
|
1438
|
+
if (!fieldWhereData) {
|
|
1439
|
+
continue;
|
|
1440
|
+
}
|
|
1441
|
+
const innerQuery = itemData.where[actualFieldName].query;
|
|
1442
|
+
parsedFilterItem.params = { ...parsedFilterItem.params, ...(fieldWhereData.<span class="branch-0 cbranch-no" title="branch not covered" >params || {}) }</span>;
|
|
1443
|
+
parsedFilterItem.query +=
|
|
1444
|
+
(parsedValueCount > 0 ? (operator === PersistanceSelectOperator.Or ? ' or ' : ' and ') : '') +
|
|
1445
|
+
(hasBrackets ? `(${innerQuery})` : innerQuery);
|
|
1446
|
+
include = { ...include, ...itemData.include };
|
|
1447
|
+
parsedValueCount++;
|
|
1448
|
+
}
|
|
1449
|
+
return { parsedFilter: parsedFilterItem, include };
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
parseRelations(entityName: string, include: string[], currentInclude?: IncludeItems): IncludeItems {
|
|
1453
|
+
const resultInclude: IncludeItems = { ...(currentInclude || {}) };
|
|
1454
|
+
include.forEach(includeItem => {
|
|
1455
|
+
const includeData = includeItem.split('.');
|
|
1456
|
+
let entityAlias = `${entityName}`;
|
|
1457
|
+
let previousEntityAlias = `${entityName}`;
|
|
1458
|
+
includeData.forEach(currentEntityName => {
|
|
1459
|
+
entityAlias += `_${currentEntityName}`;
|
|
1460
|
+
resultInclude[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
|
|
1461
|
+
previousEntityAlias = `${entityAlias}`;
|
|
1462
|
+
});
|
|
1463
|
+
});
|
|
1464
|
+
return resultInclude;
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
parseOrderBy(entityName: string, orderByData: GenericObject<string>): { include: IncludeItems; orderBy: OrderBy[] } {
|
|
1468
|
+
const orderBy: OrderBy[] = [];
|
|
1469
|
+
let include: IncludeItems = {};
|
|
1470
|
+
for (const fieldName in orderByData) {
|
|
1471
|
+
const direction = orderByData[fieldName].toLowerCase() === 'desc' ? 'DESC' : 'ASC';
|
|
1472
|
+
const item: OrderBy = { field: `${entityName}.${fieldName}`, direction };
|
|
1473
|
+
// handle relation fields
|
|
1474
|
+
if (fieldName.match(/\./)) {
|
|
1475
|
+
const fieldData = fieldName.split('.');
|
|
1476
|
+
const finalItemIndex = fieldData.length - 1;
|
|
1477
|
+
let entityAlias = `${entityName}`;
|
|
1478
|
+
let previousEntityAlias = `${entityName}`;
|
|
1479
|
+
for (let i = 0; i < finalItemIndex; i++) {
|
|
1480
|
+
const currentEntityName = fieldData[i];
|
|
1481
|
+
entityAlias += `_${currentEntityName}`;
|
|
1482
|
+
include[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
|
|
1483
|
+
previousEntityAlias = `${entityAlias}`;
|
|
1484
|
+
}
|
|
1485
|
+
include = { ...include };
|
|
1486
|
+
item.field = `${previousEntityAlias}.${fieldData[finalItemIndex]}`;
|
|
1487
|
+
}
|
|
1488
|
+
orderBy.push(item);
|
|
1489
|
+
}
|
|
1490
|
+
return {
|
|
1491
|
+
include,
|
|
1492
|
+
orderBy
|
|
1493
|
+
};
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
parseSelect(selectFields: string[], include?: IncludeItems): string[] {
|
|
1497
|
+
const actualInclude = include || {};
|
|
1498
|
+
const parsedSelect: string[] = [];
|
|
1499
|
+
selectFields.forEach(item => {
|
|
1500
|
+
const itemData = item.split('.');
|
|
1501
|
+
if (itemData.length === 1) {
|
|
1502
|
+
parsedSelect.push(item);
|
|
1503
|
+
return;
|
|
1504
|
+
}
|
|
1505
|
+
const fieldName = itemData.pop();
|
|
1506
|
+
const entityAlias = actualInclude[itemData.join('.')];
|
|
1507
|
+
if (!entityAlias) {
|
|
1508
|
+
return;
|
|
1509
|
+
}
|
|
1510
|
+
parsedSelect.push(`${entityAlias}.${fieldName}`);
|
|
1511
|
+
});
|
|
1512
|
+
return parsedSelect;
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
</pre></td></tr></table></pre>
|
|
1516
|
+
|
|
1517
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1518
|
+
</div><!-- /wrapper -->
|
|
1519
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1520
|
+
Code coverage generated by
|
|
1521
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1522
|
+
at 2025-03-20T21:05:41.984Z
|
|
1523
|
+
</div>
|
|
1524
|
+
<script src="../prettify.js"></script>
|
|
1525
|
+
<script>
|
|
1526
|
+
window.onload = function () {
|
|
1527
|
+
prettyPrint();
|
|
1528
|
+
};
|
|
1529
|
+
</script>
|
|
1530
|
+
<script src="../sorter.js"></script>
|
|
1531
|
+
<script src="../block-navigation.js"></script>
|
|
1532
|
+
</body>
|
|
1533
|
+
</html>
|
|
1534
|
+
|