@strapi/database 4.10.1 → 4.10.2

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.
Files changed (86) hide show
  1. package/jest.config.js +1 -0
  2. package/lib/schema/diff.js +4 -1
  3. package/package.json +2 -2
  4. package/coverage/clover.xml +0 -2669
  5. package/coverage/coverage-final.json +0 -56
  6. package/coverage/lcov-report/base.css +0 -224
  7. package/coverage/lcov-report/block-navigation.js +0 -87
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/index.html +0 -356
  10. package/coverage/lcov-report/lib/entity-manager/entity-repository.js.html +0 -532
  11. package/coverage/lcov-report/lib/entity-manager/index.html +0 -176
  12. package/coverage/lcov-report/lib/entity-manager/index.js.html +0 -3832
  13. package/coverage/lcov-report/lib/entity-manager/morph-relations.js.html +0 -274
  14. package/coverage/lcov-report/lib/entity-manager/regular-relations.js.html +0 -1246
  15. package/coverage/lcov-report/lib/entity-manager/relations-orderer.js.html +0 -760
  16. package/coverage/lcov-report/lib/errors/database.js.html +0 -121
  17. package/coverage/lcov-report/lib/errors/index.html +0 -206
  18. package/coverage/lcov-report/lib/errors/index.js.html +0 -136
  19. package/coverage/lcov-report/lib/errors/invalid-date.js.html +0 -127
  20. package/coverage/lcov-report/lib/errors/invalid-datetime.js.html +0 -127
  21. package/coverage/lcov-report/lib/errors/invalid-relation.js.html +0 -127
  22. package/coverage/lcov-report/lib/errors/invalid-time.js.html +0 -127
  23. package/coverage/lcov-report/lib/errors/not-null.js.html +0 -130
  24. package/coverage/lcov-report/lib/fields/biginteger.js.html +0 -136
  25. package/coverage/lcov-report/lib/fields/boolean.js.html +0 -202
  26. package/coverage/lcov-report/lib/fields/date.js.html +0 -133
  27. package/coverage/lcov-report/lib/fields/datetime.js.html +0 -142
  28. package/coverage/lcov-report/lib/fields/field.js.html +0 -136
  29. package/coverage/lcov-report/lib/fields/index.html +0 -266
  30. package/coverage/lcov-report/lib/fields/index.js.html +0 -232
  31. package/coverage/lcov-report/lib/fields/json.js.html +0 -133
  32. package/coverage/lcov-report/lib/fields/number.js.html +0 -154
  33. package/coverage/lcov-report/lib/fields/shared/index.html +0 -116
  34. package/coverage/lcov-report/lib/fields/shared/parsers.js.html +0 -292
  35. package/coverage/lcov-report/lib/fields/string.js.html +0 -136
  36. package/coverage/lcov-report/lib/fields/time.js.html +0 -136
  37. package/coverage/lcov-report/lib/fields/timestamp.js.html +0 -142
  38. package/coverage/lcov-report/lib/index.html +0 -131
  39. package/coverage/lcov-report/lib/index.js.html +0 -457
  40. package/coverage/lcov-report/lib/lifecycles/index.html +0 -116
  41. package/coverage/lcov-report/lib/lifecycles/index.js.html +0 -355
  42. package/coverage/lcov-report/lib/lifecycles/subscribers/index.html +0 -131
  43. package/coverage/lcov-report/lib/lifecycles/subscribers/models-lifecycles.js.html +0 -142
  44. package/coverage/lcov-report/lib/lifecycles/subscribers/timestamps.js.html +0 -280
  45. package/coverage/lcov-report/lib/metadata/index.html +0 -131
  46. package/coverage/lcov-report/lib/metadata/index.js.html +0 -817
  47. package/coverage/lcov-report/lib/metadata/relations.js.html +0 -1783
  48. package/coverage/lcov-report/lib/query/helpers/index.html +0 -191
  49. package/coverage/lcov-report/lib/query/helpers/index.js.html +0 -118
  50. package/coverage/lcov-report/lib/query/helpers/join.js.html +0 -373
  51. package/coverage/lcov-report/lib/query/helpers/order-by.js.html +0 -295
  52. package/coverage/lcov-report/lib/query/helpers/populate/apply.js.html +0 -2077
  53. package/coverage/lcov-report/lib/query/helpers/populate/index.html +0 -146
  54. package/coverage/lcov-report/lib/query/helpers/populate/index.js.html +0 -112
  55. package/coverage/lcov-report/lib/query/helpers/populate/process.js.html +0 -391
  56. package/coverage/lcov-report/lib/query/helpers/search.js.html +0 -337
  57. package/coverage/lcov-report/lib/query/helpers/streams/index.html +0 -131
  58. package/coverage/lcov-report/lib/query/helpers/streams/index.js.html +0 -100
  59. package/coverage/lcov-report/lib/query/helpers/streams/readable.js.html +0 -607
  60. package/coverage/lcov-report/lib/query/helpers/transform.js.html +0 -337
  61. package/coverage/lcov-report/lib/query/helpers/where.js.html +0 -1255
  62. package/coverage/lcov-report/lib/query/index.html +0 -131
  63. package/coverage/lcov-report/lib/query/index.js.html +0 -106
  64. package/coverage/lcov-report/lib/query/query-builder.js.html +0 -1627
  65. package/coverage/lcov-report/lib/schema/builder.js.html +0 -1243
  66. package/coverage/lcov-report/lib/schema/diff.js.html +0 -1207
  67. package/coverage/lcov-report/lib/schema/index.html +0 -176
  68. package/coverage/lcov-report/lib/schema/index.js.html +0 -367
  69. package/coverage/lcov-report/lib/schema/schema.js.html +0 -688
  70. package/coverage/lcov-report/lib/schema/storage.js.html +0 -313
  71. package/coverage/lcov-report/lib/transaction-context.js.html +0 -136
  72. package/coverage/lcov-report/lib/types/index.html +0 -116
  73. package/coverage/lcov-report/lib/types/index.js.html +0 -187
  74. package/coverage/lcov-report/lib/utils/content-types.js.html +0 -205
  75. package/coverage/lcov-report/lib/utils/index.html +0 -131
  76. package/coverage/lcov-report/lib/utils/knex.js.html +0 -151
  77. package/coverage/lcov-report/lib/validations/index.html +0 -116
  78. package/coverage/lcov-report/lib/validations/index.js.html +0 -145
  79. package/coverage/lcov-report/lib/validations/relations/bidirectional.js.html +0 -352
  80. package/coverage/lcov-report/lib/validations/relations/index.html +0 -131
  81. package/coverage/lcov-report/lib/validations/relations/index.js.html +0 -127
  82. package/coverage/lcov-report/prettify.css +0 -1
  83. package/coverage/lcov-report/prettify.js +0 -2
  84. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  85. package/coverage/lcov-report/sorter.js +0 -196
  86. package/coverage/lcov.info +0 -5179
@@ -1,1207 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for lib/schema/diff.js</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">lib/schema</a> diff.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">48.71% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>76/156</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">19.14% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>18/94</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">51.61% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>16/31</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">48.61% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>70/144</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 oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line low'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-yes">2x</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-yes">2x</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-yes">2x</span>
447
- <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-neutral">&nbsp;</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-yes">2x</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-yes">6x</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-yes">2x</span>
460
- <span class="cline-any cline-neutral">&nbsp;</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-yes">1x</span>
464
- <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-neutral">&nbsp;</span>
468
- <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-no">&nbsp;</span>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-no">&nbsp;</span>
474
- <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-no">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-no">&nbsp;</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-yes">2x</span>
485
- <span class="cline-any cline-yes">8x</span>
486
- <span class="cline-any cline-neutral">&nbsp;</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-neutral">&nbsp;</span>
492
- <span class="cline-any cline-yes">8x</span>
493
- <span class="cline-any cline-no">&nbsp;</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
496
- <span class="cline-any cline-no">&nbsp;</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-no">&nbsp;</span>
500
- <span class="cline-any cline-no">&nbsp;</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-no">&nbsp;</span>
504
- <span class="cline-any cline-neutral">&nbsp;</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-yes">8x</span>
518
- <span class="cline-any cline-no">&nbsp;</span>
519
- <span class="cline-any cline-neutral">&nbsp;</span>
520
- <span class="cline-any cline-no">&nbsp;</span>
521
- <span class="cline-any cline-no">&nbsp;</span>
522
- <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-no">&nbsp;</span>
525
- <span class="cline-any cline-no">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-no">&nbsp;</span>
529
- <span class="cline-any cline-no">&nbsp;</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-no">&nbsp;</span>
533
- <span class="cline-any cline-no">&nbsp;</span>
534
- <span class="cline-any cline-no">&nbsp;</span>
535
- <span class="cline-any cline-neutral">&nbsp;</span>
536
- <span class="cline-any cline-no">&nbsp;</span>
537
- <span class="cline-any cline-no">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-no">&nbsp;</span>
541
- <span class="cline-any cline-no">&nbsp;</span>
542
- <span class="cline-any cline-no">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-no">&nbsp;</span>
545
- <span class="cline-any cline-no">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-no">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-yes">8x</span>
558
- <span class="cline-any cline-no">&nbsp;</span>
559
- <span class="cline-any cline-no">&nbsp;</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-no">&nbsp;</span>
562
- <span class="cline-any cline-no">&nbsp;</span>
563
- <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-no">&nbsp;</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-neutral">&nbsp;</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-neutral">&nbsp;</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-neutral">&nbsp;</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">8x</span>
577
- <span class="cline-any cline-no">&nbsp;</span>
578
- <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-no">&nbsp;</span>
580
- <span class="cline-any cline-no">&nbsp;</span>
581
- <span class="cline-any cline-no">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-no">&nbsp;</span>
584
- <span class="cline-any cline-no">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-no">&nbsp;</span>
590
- <span class="cline-any cline-no">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-no">&nbsp;</span>
594
- <span class="cline-any cline-no">&nbsp;</span>
595
- <span class="cline-any cline-no">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-no">&nbsp;</span>
599
- <span class="cline-any cline-no">&nbsp;</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-no">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-yes">8x</span>
612
- <span class="cline-any cline-yes">2x</span>
613
- <span class="cline-any cline-yes">2x</span>
614
- <span class="cline-any cline-yes">2x</span>
615
- <span class="cline-any cline-yes">2x</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-yes">2x</span>
618
- <span class="cline-any cline-yes">1x</span>
619
- <span class="cline-any cline-yes">1x</span>
620
- <span class="cline-any cline-yes">1x</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-no">&nbsp;</span>
624
- <span class="cline-any cline-no">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-no">&nbsp;</span>
627
- <span class="cline-any cline-no">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-no">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-yes">2x</span>
634
- <span class="cline-any cline-no">&nbsp;</span>
635
- <span class="cline-any cline-no">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-yes">4x</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-yes">2x</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-yes">8x</span>
653
- <span class="cline-any cline-yes">2x</span>
654
- <span class="cline-any cline-yes">2x</span>
655
- <span class="cline-any cline-yes">2x</span>
656
- <span class="cline-any cline-yes">2x</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-yes">2x</span>
659
- <span class="cline-any cline-no">&nbsp;</span>
660
- <span class="cline-any cline-no">&nbsp;</span>
661
- <span class="cline-any cline-no">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-no">&nbsp;</span>
664
- <span class="cline-any cline-no">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-no">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-no">&nbsp;</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-yes">2x</span>
674
- <span class="cline-any cline-no">&nbsp;</span>
675
- <span class="cline-any cline-no">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-yes">6x</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-yes">2x</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-yes">8x</span>
693
- <span class="cline-any cline-yes">2x</span>
694
- <span class="cline-any cline-yes">2x</span>
695
- <span class="cline-any cline-yes">2x</span>
696
- <span class="cline-any cline-yes">2x</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-yes">2x</span>
699
- <span class="cline-any cline-no">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-neutral">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-yes">2x</span>
711
- <span class="cline-any cline-no">&nbsp;</span>
712
- <span class="cline-any cline-no">&nbsp;</span>
713
- <span class="cline-any cline-no">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-no">&nbsp;</span>
716
- <span class="cline-any cline-no">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-no">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-no">&nbsp;</span>
722
- <span class="cline-any cline-neutral">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-yes">2x</span>
726
- <span class="cline-any cline-no">&nbsp;</span>
727
- <span class="cline-any cline-no">&nbsp;</span>
728
- <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-yes">2x</span>
732
- <span class="cline-any cline-yes">6x</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-yes">2x</span>
736
- <span class="cline-any cline-neutral">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-yes">8x</span>
747
- <span class="cline-any cline-yes">2x</span>
748
- <span class="cline-any cline-yes">2x</span>
749
- <span class="cline-any cline-yes">2x</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-yes">2x</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-yes">2x</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-yes">8x</span>
765
- <span class="cline-any cline-yes">4x</span>
766
- <span class="cline-any cline-yes">4x</span>
767
- <span class="cline-any cline-yes">4x</span>
768
- <span class="cline-any cline-yes">4x</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-yes">4x</span>
771
- <span class="cline-any cline-yes">3x</span>
772
- <span class="cline-any cline-yes">2x</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-yes">2x</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-yes">2x</span>
777
- <span class="cline-any cline-yes">1x</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-yes">1x</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-neutral">&nbsp;</span>
782
- <span class="cline-any cline-yes">1x</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-yes">4x</span>
787
- <span class="cline-any cline-yes">3x</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-yes">1x</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-yes">9x</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-yes">4x</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-neutral">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-yes">8x</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict';
815
- &nbsp;
816
- const _ = require('lodash/fp');
817
- &nbsp;
818
- const RESERVED_TABLE_NAMES = ['strapi_migrations', 'strapi_database_schema'];
819
- &nbsp;
820
- const statuses = {
821
- CHANGED: 'CHANGED',
822
- UNCHANGED: 'UNCHANGED',
823
- };
824
- &nbsp;
825
- // NOTE:We could move the schema to use maps of tables &amp; columns instead of arrays to make it easier to diff
826
- // =&gt; this will make the creation a bit more complicated (ordering, Object.values(tables | columns)) -&gt; not a big pbl
827
- &nbsp;
828
- const helpers = {
829
- hasTable(schema, tableName) {
830
- return schema.tables.findIndex((table) =&gt; table.name === tableName) !== -1;
831
- },
832
- findTable(schema, tableName) {
833
- return schema.tables.find((table) =&gt; table.name === tableName);
834
- },
835
- &nbsp;
836
- hasColumn(table, columnName) {
837
- return table.columns.findIndex(<span class="fstat-no" title="function not covered" >(c</span>olumn) =&gt; <span class="cstat-no" title="statement not covered" >column.name === columnName)</span> !== -1;
838
- },
839
- <span class="fstat-no" title="function not covered" > fi</span>ndColumn(table, columnName) {
840
- <span class="cstat-no" title="statement not covered" > return table.columns.find(<span class="fstat-no" title="function not covered" >(c</span>olumn) =&gt; <span class="cstat-no" title="statement not covered" >column.name === columnName)</span>;</span>
841
- },
842
- &nbsp;
843
- <span class="fstat-no" title="function not covered" > ha</span>sIndex(table, columnName) {
844
- <span class="cstat-no" title="statement not covered" > return table.indexes.findIndex(<span class="fstat-no" title="function not covered" >(c</span>olumn) =&gt; <span class="cstat-no" title="statement not covered" >column.name === columnName)</span> !== -1;</span>
845
- },
846
- <span class="fstat-no" title="function not covered" > fi</span>ndIndex(table, columnName) {
847
- <span class="cstat-no" title="statement not covered" > return table.indexes.find(<span class="fstat-no" title="function not covered" >(c</span>olumn) =&gt; <span class="cstat-no" title="statement not covered" >column.name === columnName)</span>;</span>
848
- },
849
- &nbsp;
850
- <span class="fstat-no" title="function not covered" > ha</span>sForeignKey(table, columnName) {
851
- <span class="cstat-no" title="statement not covered" > return table.foreignKeys.findIndex(<span class="fstat-no" title="function not covered" >(c</span>olumn) =&gt; <span class="cstat-no" title="statement not covered" >column.name === columnName)</span> !== -1;</span>
852
- },
853
- <span class="fstat-no" title="function not covered" > fi</span>ndForeignKey(table, columnName) {
854
- <span class="cstat-no" title="statement not covered" > return table.foreignKeys.find(<span class="fstat-no" title="function not covered" >(c</span>olumn) =&gt; <span class="cstat-no" title="statement not covered" >column.name === columnName)</span>;</span>
855
- },
856
- };
857
- &nbsp;
858
- module.exports = (db) =&gt; {
859
- const hasChangedStatus = (diff) =&gt; diff.status === statuses.CHANGED;
860
- &nbsp;
861
- /**
862
- * Compares two indexes info
863
- * @param {Object} oldIndex - index info read from DB
864
- * @param {Object} index - newly generate index info
865
- */
866
- const diffIndexes = <span class="fstat-no" title="function not covered" >(o</span>ldIndex, index) =&gt; {
867
- const changes = <span class="cstat-no" title="statement not covered" >[];</span>
868
- &nbsp;
869
- <span class="cstat-no" title="statement not covered" > if (!_.isEqual(oldIndex.columns, index.columns)) {</span>
870
- <span class="cstat-no" title="statement not covered" > changes.push('columns');</span>
871
- }
872
- &nbsp;
873
- <span class="cstat-no" title="statement not covered" > if (_.toLower(oldIndex.type) !== _.toLower(index.type)) {</span>
874
- <span class="cstat-no" title="statement not covered" > changes.push('type');</span>
875
- }
876
- &nbsp;
877
- <span class="cstat-no" title="statement not covered" > return {</span>
878
- status: changes.length &gt; 0 ? statuses.CHANGED : statuses.UNCHANGED,
879
- diff: {
880
- name: index.name,
881
- object: index,
882
- },
883
- };
884
- };
885
- &nbsp;
886
- /**
887
- * Compares two foreign keys info
888
- * @param {Object} oldForeignKey - foreignKey info read from DB
889
- * @param {Object} foreignKey - newly generate foreignKey info
890
- */
891
- const diffForeignKeys = <span class="fstat-no" title="function not covered" >(o</span>ldForeignKey, foreignKey) =&gt; {
892
- const changes = <span class="cstat-no" title="statement not covered" >[];</span>
893
- &nbsp;
894
- <span class="cstat-no" title="statement not covered" > if (_.difference(oldForeignKey.columns, foreignKey.columns).length &gt; 0) {</span>
895
- <span class="cstat-no" title="statement not covered" > changes.push('columns');</span>
896
- }
897
- &nbsp;
898
- <span class="cstat-no" title="statement not covered" > if (_.difference(oldForeignKey.referencedColumns, foreignKey.referencedColumns).length &gt; 0) {</span>
899
- <span class="cstat-no" title="statement not covered" > changes.push('referencedColumns');</span>
900
- }
901
- &nbsp;
902
- <span class="cstat-no" title="statement not covered" > if (oldForeignKey.referencedTable !== foreignKey.referencedTable) {</span>
903
- <span class="cstat-no" title="statement not covered" > changes.push('referencedTable');</span>
904
- }
905
- &nbsp;
906
- <span class="cstat-no" title="statement not covered" > if (_.isNil(oldForeignKey.onDelete) || _.toUpper(oldForeignKey.onDelete) === 'NO ACTION') {</span>
907
- <span class="cstat-no" title="statement not covered" > if (!_.isNil(foreignKey.onDelete) &amp;&amp; _.toUpper(oldForeignKey.onDelete) !== 'NO ACTION') {</span>
908
- <span class="cstat-no" title="statement not covered" > changes.push('onDelete');</span>
909
- }
910
- } else <span class="cstat-no" title="statement not covered" >if (_.toUpper(oldForeignKey.onDelete) !== _.toUpper(foreignKey.onDelete)) {</span>
911
- <span class="cstat-no" title="statement not covered" > changes.push('onDelete');</span>
912
- }
913
- &nbsp;
914
- <span class="cstat-no" title="statement not covered" > if (_.isNil(oldForeignKey.onUpdate) || _.toUpper(oldForeignKey.onUpdate) === 'NO ACTION') {</span>
915
- <span class="cstat-no" title="statement not covered" > if (!_.isNil(foreignKey.onUpdate) &amp;&amp; _.toUpper(oldForeignKey.onUpdate) !== 'NO ACTION') {</span>
916
- <span class="cstat-no" title="statement not covered" > changes.push('onUpdate');</span>
917
- }
918
- } else <span class="cstat-no" title="statement not covered" >if (_.toUpper(oldForeignKey.onUpdate) !== _.toUpper(foreignKey.onUpdate)) {</span>
919
- <span class="cstat-no" title="statement not covered" > changes.push('onUpdate');</span>
920
- }
921
- &nbsp;
922
- <span class="cstat-no" title="statement not covered" > return {</span>
923
- status: changes.length &gt; 0 ? statuses.CHANGED : statuses.UNCHANGED,
924
- diff: {
925
- name: foreignKey.name,
926
- object: foreignKey,
927
- },
928
- };
929
- };
930
- &nbsp;
931
- const diffDefault = <span class="fstat-no" title="function not covered" >(o</span>ldColumn, column) =&gt; {
932
- const oldDefaultTo = <span class="cstat-no" title="statement not covered" >oldColumn.defaultTo;</span>
933
- const { defaultTo } = <span class="cstat-no" title="statement not covered" >column;</span>
934
- &nbsp;
935
- <span class="cstat-no" title="statement not covered" > if (oldDefaultTo === null || _.toLower(oldDefaultTo) === 'null') {</span>
936
- <span class="cstat-no" title="statement not covered" > return _.isNil(defaultTo) || _.toLower(defaultTo) === 'null';</span>
937
- }
938
- &nbsp;
939
- <span class="cstat-no" title="statement not covered" > return (</span>
940
- _.toLower(oldDefaultTo) === _.toLower(column.defaultTo) ||
941
- _.toLower(oldDefaultTo) === _.toLower(`'${column.defaultTo}'`)
942
- );
943
- };
944
- &nbsp;
945
- /**
946
- * Compares two columns info
947
- * @param {Object} oldColumn - column info read from DB
948
- * @param {Object} column - newly generate column info
949
- */
950
- const diffColumns = <span class="fstat-no" title="function not covered" >(o</span>ldColumn, column) =&gt; {
951
- const changes = <span class="cstat-no" title="statement not covered" >[];</span>
952
- &nbsp;
953
- const isIgnoredType = <span class="cstat-no" title="statement not covered" >['increments'].includes(column.type);</span>
954
- const oldType = <span class="cstat-no" title="statement not covered" >oldColumn.type;</span>
955
- const type = <span class="cstat-no" title="statement not covered" >db.dialect.getSqlType(column.type);</span>
956
- &nbsp;
957
- <span class="cstat-no" title="statement not covered" > if (oldType !== type &amp;&amp; !isIgnoredType) {</span>
958
- <span class="cstat-no" title="statement not covered" > changes.push('type');</span>
959
- }
960
- &nbsp;
961
- // NOTE: compare args at some point and split them into specific properties instead
962
- &nbsp;
963
- <span class="cstat-no" title="statement not covered" > if (oldColumn.notNullable !== column.notNullable) {</span>
964
- <span class="cstat-no" title="statement not covered" > changes.push('notNullable');</span>
965
- }
966
- &nbsp;
967
- const hasSameDefault = <span class="cstat-no" title="statement not covered" >diffDefault(oldColumn, column);</span>
968
- <span class="cstat-no" title="statement not covered" > if (!hasSameDefault) {</span>
969
- <span class="cstat-no" title="statement not covered" > changes.push('defaultTo');</span>
970
- }
971
- &nbsp;
972
- <span class="cstat-no" title="statement not covered" > if (oldColumn.unsigned !== column.unsigned &amp;&amp; db.dialect.supportsUnsigned()) {</span>
973
- <span class="cstat-no" title="statement not covered" > changes.push('unsigned');</span>
974
- }
975
- &nbsp;
976
- <span class="cstat-no" title="statement not covered" > return {</span>
977
- status: changes.length &gt; 0 ? statuses.CHANGED : statuses.UNCHANGED,
978
- diff: {
979
- name: column.name,
980
- object: column,
981
- },
982
- };
983
- };
984
- &nbsp;
985
- const diffTableColumns = (srcTable, destTable) =&gt; {
986
- const addedColumns = [];
987
- const updatedColumns = [];
988
- const unchangedColumns = [];
989
- const removedColumns = [];
990
- &nbsp;
991
- for (const destColumn of destTable.columns) {
992
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!helpers.hasColumn(srcTable, destColumn.name)) {
993
- addedColumns.push(destColumn);
994
- continue;
995
- }
996
- &nbsp;
997
- const srcColumn = <span class="cstat-no" title="statement not covered" >helpers.findColumn(srcTable, destColumn.name);</span>
998
- const { status, diff } = <span class="cstat-no" title="statement not covered" >diffColumns(srcColumn, destColumn);</span>
999
- &nbsp;
1000
- <span class="cstat-no" title="statement not covered" > if (status === statuses.CHANGED) {</span>
1001
- <span class="cstat-no" title="statement not covered" > updatedColumns.push(diff);</span>
1002
- } else {
1003
- <span class="cstat-no" title="statement not covered" > unchangedColumns.push(srcColumn);</span>
1004
- }
1005
- }
1006
- &nbsp;
1007
- for (const srcColumn of srcTable.columns) {
1008
- <span class="cstat-no" title="statement not covered" > if (!helpers.hasColumn(destTable, srcColumn.name)) {</span>
1009
- <span class="cstat-no" title="statement not covered" > removedColumns.push(srcColumn);</span>
1010
- }
1011
- }
1012
- &nbsp;
1013
- const hasChanged = [addedColumns, updatedColumns, removedColumns].some((arr) =&gt; arr.length &gt; 0);
1014
- &nbsp;
1015
- return {
1016
- status: hasChanged ? statuses.CHANGED : statuses.UNCHANGED,
1017
- diff: {
1018
- added: addedColumns,
1019
- updated: updatedColumns,
1020
- unchanged: unchangedColumns,
1021
- removed: removedColumns,
1022
- },
1023
- };
1024
- };
1025
- &nbsp;
1026
- const diffTableIndexes = (srcTable, destTable) =&gt; {
1027
- const addedIndexes = [];
1028
- const updatedIndexes = [];
1029
- const unchangedIndexes = [];
1030
- const removedIndexes = [];
1031
- &nbsp;
1032
- for (const destIndex of destTable.indexes) {
1033
- <span class="cstat-no" title="statement not covered" > if (helpers.hasIndex(srcTable, destIndex.name)) {</span>
1034
- const srcIndex = <span class="cstat-no" title="statement not covered" >helpers.findIndex(srcTable, destIndex.name);</span>
1035
- const { status, diff } = <span class="cstat-no" title="statement not covered" >diffIndexes(srcIndex, destIndex);</span>
1036
- &nbsp;
1037
- <span class="cstat-no" title="statement not covered" > if (status === statuses.CHANGED) {</span>
1038
- <span class="cstat-no" title="statement not covered" > updatedIndexes.push(diff);</span>
1039
- } else {
1040
- <span class="cstat-no" title="statement not covered" > unchangedIndexes.push(srcIndex);</span>
1041
- }
1042
- } else {
1043
- <span class="cstat-no" title="statement not covered" > addedIndexes.push(destIndex);</span>
1044
- }
1045
- }
1046
- &nbsp;
1047
- for (const srcIndex of srcTable.indexes) {
1048
- <span class="cstat-no" title="statement not covered" > if (!helpers.hasIndex(destTable, srcIndex.name)) {</span>
1049
- <span class="cstat-no" title="statement not covered" > removedIndexes.push(srcIndex);</span>
1050
- }
1051
- }
1052
- &nbsp;
1053
- const hasChanged = [addedIndexes, updatedIndexes, removedIndexes].some((arr) =&gt; arr.length &gt; 0);
1054
- &nbsp;
1055
- return {
1056
- status: hasChanged ? <span class="branch-0 cbranch-no" title="branch not covered" >statuses.CHANGED </span>: statuses.UNCHANGED,
1057
- diff: {
1058
- added: addedIndexes,
1059
- updated: updatedIndexes,
1060
- unchanged: unchangedIndexes,
1061
- removed: removedIndexes,
1062
- },
1063
- };
1064
- };
1065
- &nbsp;
1066
- const diffTableForeignKeys = (srcTable, destTable) =&gt; {
1067
- const addedForeignKeys = [];
1068
- const updatedForeignKeys = [];
1069
- const unchangedForeignKeys = [];
1070
- const removedForeignKeys = [];
1071
- &nbsp;
1072
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!db.dialect.usesForeignKeys()) {
1073
- <span class="cstat-no" title="statement not covered" > return {</span>
1074
- status: statuses.UNCHANGED,
1075
- diff: {
1076
- added: addedForeignKeys,
1077
- updated: updatedForeignKeys,
1078
- unchanged: unchangedForeignKeys,
1079
- removed: removedForeignKeys,
1080
- },
1081
- };
1082
- }
1083
- &nbsp;
1084
- for (const destForeignKey of destTable.foreignKeys) {
1085
- <span class="cstat-no" title="statement not covered" > if (helpers.hasForeignKey(srcTable, destForeignKey.name)) {</span>
1086
- const srcForeignKey = <span class="cstat-no" title="statement not covered" >helpers.findForeignKey(srcTable, destForeignKey.name);</span>
1087
- const { status, diff } = <span class="cstat-no" title="statement not covered" >diffForeignKeys(srcForeignKey, destForeignKey);</span>
1088
- &nbsp;
1089
- <span class="cstat-no" title="statement not covered" > if (status === statuses.CHANGED) {</span>
1090
- <span class="cstat-no" title="statement not covered" > updatedForeignKeys.push(diff);</span>
1091
- } else {
1092
- <span class="cstat-no" title="statement not covered" > unchangedForeignKeys.push(srcForeignKey);</span>
1093
- }
1094
- } else {
1095
- <span class="cstat-no" title="statement not covered" > addedForeignKeys.push(destForeignKey);</span>
1096
- }
1097
- }
1098
- &nbsp;
1099
- for (const srcForeignKey of srcTable.foreignKeys) {
1100
- <span class="cstat-no" title="statement not covered" > if (!helpers.hasForeignKey(destTable, srcForeignKey.name)) {</span>
1101
- <span class="cstat-no" title="statement not covered" > removedForeignKeys.push(srcForeignKey);</span>
1102
- }
1103
- }
1104
- &nbsp;
1105
- const hasChanged = [addedForeignKeys, updatedForeignKeys, removedForeignKeys].some(
1106
- (arr) =&gt; arr.length &gt; 0
1107
- );
1108
- &nbsp;
1109
- return {
1110
- status: hasChanged ? <span class="branch-0 cbranch-no" title="branch not covered" >statuses.CHANGED </span>: statuses.UNCHANGED,
1111
- diff: {
1112
- added: addedForeignKeys,
1113
- updated: updatedForeignKeys,
1114
- unchanged: unchangedForeignKeys,
1115
- removed: removedForeignKeys,
1116
- },
1117
- };
1118
- };
1119
- &nbsp;
1120
- const diffTables = (srcTable, destTable) =&gt; {
1121
- const columnsDiff = diffTableColumns(srcTable, destTable);
1122
- const indexesDiff = diffTableIndexes(srcTable, destTable);
1123
- const foreignKeysDiff = diffTableForeignKeys(srcTable, destTable);
1124
- &nbsp;
1125
- const hasChanged = [columnsDiff, indexesDiff, foreignKeysDiff].some(hasChangedStatus);
1126
- &nbsp;
1127
- return {
1128
- status: hasChanged ? statuses.CHANGED : statuses.UNCHANGED,
1129
- diff: {
1130
- name: srcTable.name,
1131
- indexes: indexesDiff.diff,
1132
- foreignKeys: foreignKeysDiff.diff,
1133
- columns: columnsDiff.diff,
1134
- },
1135
- };
1136
- };
1137
- &nbsp;
1138
- const diffSchemas = (srcSchema, destSchema) =&gt; {
1139
- const addedTables = [];
1140
- const updatedTables = [];
1141
- const unchangedTables = [];
1142
- const removedTables = [];
1143
- &nbsp;
1144
- for (const destTable of destSchema.tables) {
1145
- if (helpers.hasTable(srcSchema, destTable.name)) {
1146
- const srcTable = helpers.findTable(srcSchema, destTable.name);
1147
- &nbsp;
1148
- const { status, diff } = diffTables(srcTable, destTable);
1149
- &nbsp;
1150
- if (status === statuses.CHANGED) {
1151
- updatedTables.push(diff);
1152
- } else {
1153
- unchangedTables.push(srcTable);
1154
- }
1155
- } else {
1156
- addedTables.push(destTable);
1157
- }
1158
- }
1159
- &nbsp;
1160
- for (const srcTable of srcSchema.tables) {
1161
- if (
1162
- !helpers.hasTable(destSchema, srcTable.name) &amp;&amp;
1163
- !RESERVED_TABLE_NAMES.includes(srcTable.name)
1164
- ) {
1165
- removedTables.push(srcTable);
1166
- }
1167
- }
1168
- &nbsp;
1169
- const hasChanged = [addedTables, updatedTables, removedTables].some((arr) =&gt; arr.length &gt; 0);
1170
- &nbsp;
1171
- return {
1172
- status: hasChanged ? statuses.CHANGED : statuses.UNCHANGED,
1173
- diff: {
1174
- tables: {
1175
- added: addedTables,
1176
- updated: updatedTables,
1177
- unchanged: unchangedTables,
1178
- removed: removedTables,
1179
- },
1180
- },
1181
- };
1182
- };
1183
- &nbsp;
1184
- return {
1185
- diff: diffSchemas,
1186
- };
1187
- };
1188
- &nbsp;</pre></td></tr></table></pre>
1189
-
1190
- <div class='push'></div><!-- for sticky footer -->
1191
- </div><!-- /wrapper -->
1192
- <div class='footer quiet pad2 space-top1 center small'>
1193
- Code coverage generated by
1194
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1195
- at 2023-03-15T08:52:46.420Z
1196
- </div>
1197
- <script src="../../prettify.js"></script>
1198
- <script>
1199
- window.onload = function () {
1200
- prettyPrint();
1201
- };
1202
- </script>
1203
- <script src="../../sorter.js"></script>
1204
- <script src="../../block-navigation.js"></script>
1205
- </body>
1206
- </html>
1207
-