Compare commits
3332 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18896bf56d | ||
|
|
098c9041a0 | ||
|
|
61a41d8eb2 | ||
|
|
e76073d5c8 | ||
|
|
8c34added7 | ||
|
|
66fc6b93ae | ||
|
|
881d5a8008 | ||
|
|
5d263de954 | ||
|
|
c8d0494000 | ||
|
|
a9b48b5aa5 | ||
|
|
f08a951eef | ||
|
|
8758a4bc86 | ||
|
|
aae328f8c8 | ||
|
|
1953578a33 | ||
|
|
543bdd79d9 | ||
|
|
e0e1a3c8e4 | ||
|
|
f1d84f448e | ||
|
|
7c5c21f15d | ||
|
|
41ffaeebe3 | ||
|
|
5d9b44b647 | ||
|
|
a18d2c5650 | ||
|
|
e0379bcf12 | ||
|
|
e91242d5a2 | ||
|
|
8177187b3a | ||
|
|
6b3e1144bc | ||
|
|
dfec88f52d | ||
|
|
b8df67659a | ||
|
|
861da64581 | ||
|
|
ab147a2cc9 | ||
|
|
e13191e894 | ||
|
|
7f69ea8dc0 | ||
|
|
ef2140696b | ||
|
|
4607900c3b | ||
|
|
3258d55796 | ||
|
|
35e6966c39 | ||
|
|
885756b259 | ||
|
|
5fbc1b937c | ||
|
|
7e444e9fc2 | ||
|
|
c051237914 | ||
|
|
3855b0dd28 | ||
|
|
afcc9e096a | ||
|
|
f4df1fbff4 | ||
|
|
45b3a5af91 | ||
|
|
f54b18e652 | ||
|
|
b1210d19ad | ||
|
|
21cbcc79c6 | ||
|
|
a7d0c8fb0f | ||
|
|
1e3dc54d81 | ||
|
|
48f294fd83 | ||
|
|
298ad0de4b | ||
|
|
c7953f9231 | ||
|
|
afd97eae7d | ||
|
|
f4e558b7e8 | ||
|
|
12c99c646e | ||
|
|
6c1a2eedbe | ||
|
|
8a73216035 | ||
|
|
c6a93f12f7 | ||
|
|
09f44d94b3 | ||
|
|
c26748154a | ||
|
|
2474f915d4 | ||
|
|
53f940cd23 | ||
|
|
991b648854 | ||
|
|
663f057a9a | ||
|
|
61963fb824 | ||
|
|
bdf3cf5b36 | ||
|
|
5cc459594b | ||
|
|
8d315e52df | ||
|
|
48a24a8704 | ||
|
|
cdce52f0e5 | ||
|
|
d12ccbeac4 | ||
|
|
0b1620105a | ||
|
|
2ae9c98acb | ||
|
|
ed00848a1e | ||
|
|
06f7741dbf | ||
|
|
8d3b7cace8 | ||
|
|
8f0775e337 | ||
|
|
444cb6aa0c | ||
|
|
b4acc19ea2 | ||
|
|
1ef17cd861 | ||
|
|
e564e930e5 | ||
|
|
a30badbbe0 | ||
|
|
b33d21fdb3 | ||
|
|
78da83f7db | ||
|
|
8f6313d4ec | ||
|
|
14962a5622 | ||
|
|
b8048e7592 | ||
|
|
cf9823e123 | ||
|
|
1667dbfde0 | ||
|
|
416436a612 | ||
|
|
dc1b724d8d | ||
|
|
080dc44175 | ||
|
|
be148297a2 | ||
|
|
6cf6d8c876 | ||
|
|
3921f50feb | ||
|
|
6fc63be56a | ||
|
|
6a03f9a6fe | ||
|
|
721fdf09b3 | ||
|
|
bd4a52318b | ||
|
|
3978865902 | ||
|
|
c1228ee426 | ||
|
|
d0c39dc932 | ||
|
|
63a8586d7c | ||
|
|
e0a79c033e | ||
|
|
fa12f127ce | ||
|
|
10916eadd5 | ||
|
|
7f4e8e9c8f | ||
|
|
d06840f934 | ||
|
|
75f4df8b51 | ||
|
|
e9ea6d27ae | ||
|
|
48019d43c3 | ||
|
|
04dbeb633d | ||
|
|
71631865c4 | ||
|
|
d4a39cf481 | ||
|
|
3a71dfff64 | ||
|
|
d8c865b3ce | ||
|
|
71356b798c | ||
|
|
66ddd1741f | ||
|
|
8a60f3c8a7 | ||
|
|
25d2a40c50 | ||
|
|
17b389146c | ||
|
|
bd1f609b39 | ||
|
|
01e1831d57 | ||
|
|
c341baa781 | ||
|
|
995a0c33c3 | ||
|
|
75845cb42d | ||
|
|
822d6acfb0 | ||
|
|
2c4510a717 | ||
|
|
ac2391c91a | ||
|
|
e805563ce5 | ||
|
|
88fb1d920e | ||
|
|
dca60fad7a | ||
|
|
8226b05e7e | ||
|
|
0106331978 | ||
|
|
f5c0e7d2e9 | ||
|
|
4568b24351 | ||
|
|
042502f41f | ||
|
|
d342d73818 | ||
|
|
3b922216c1 | ||
|
|
10fa9b6812 | ||
|
|
33ccbf790b | ||
|
|
50b4baee4b | ||
|
|
be57a56095 | ||
|
|
f351453b9c | ||
|
|
dda67d3351 | ||
|
|
23e1e744e8 | ||
|
|
4b0affe182 | ||
|
|
ab836bc747 | ||
|
|
cf86d7e352 | ||
|
|
05a36d3878 | ||
|
|
0417084a39 | ||
|
|
cdfe39f226 | ||
|
|
b73dde3a48 | ||
|
|
0dea597226 | ||
|
|
2f38928c89 | ||
|
|
35c7b5e952 | ||
|
|
ba28b17263 | ||
|
|
51b0e004fa | ||
|
|
8cb59b02a8 | ||
|
|
38bfd130a3 | ||
|
|
369d90e057 | ||
|
|
c27cdd1734 | ||
|
|
e7e4f39311 | ||
|
|
0443a21e05 | ||
|
|
50c01886ec | ||
|
|
a9e1219f6c | ||
|
|
7bc31dde70 | ||
|
|
65f2f1d08f | ||
|
|
684027eaab | ||
|
|
1c3ec9c3bb | ||
|
|
3a8ff2c05d | ||
|
|
d5bd179c68 | ||
|
|
8b938a39cf | ||
|
|
c9610cbc39 | ||
|
|
931733d605 | ||
|
|
44e5d0e195 | ||
|
|
08b83dc3fd | ||
|
|
b7f261a836 | ||
|
|
d0b4ca33c2 | ||
|
|
160391f5a9 | ||
|
|
dfe4a96b02 | ||
|
|
a3f67eb519 | ||
|
|
0f9d52552b | ||
|
|
a217de4c39 | ||
|
|
d2d85e63f6 | ||
|
|
7a6077b5ff | ||
|
|
d48c4d9729 | ||
|
|
6d677401bf | ||
|
|
a3d4fa2f86 | ||
|
|
59e19b6a22 | ||
|
|
1a76da40d1 | ||
|
|
cb15ba01f0 | ||
|
|
78af7f136e | ||
|
|
cc6a95b579 | ||
|
|
4b3f723bdc | ||
|
|
d372e2ff76 | ||
|
|
4201d1cb1e | ||
|
|
afed70ba63 | ||
|
|
be488346c5 | ||
|
|
eeeb688439 | ||
|
|
b84ce77326 | ||
|
|
30fca423dc | ||
|
|
fabbb31572 | ||
|
|
ac76ac004e | ||
|
|
9d2051183a | ||
|
|
942fdb51d5 | ||
|
|
d2600a3168 | ||
|
|
c4248cce22 | ||
|
|
16f16f9fed | ||
|
|
d49cb976bc | ||
|
|
6fae6a9865 | ||
|
|
06f3730756 | ||
|
|
30e1333f75 | ||
|
|
0d6fa98767 | ||
|
|
ae6c9edd0d | ||
|
|
35de1f1c4e | ||
|
|
57142f4afb | ||
|
|
cd72d65b89 | ||
|
|
2199ab0513 | ||
|
|
e93f058109 | ||
|
|
b68de49cbd | ||
|
|
3f05934b6b | ||
|
|
3a5713dbb7 | ||
|
|
4c43158285 | ||
|
|
daa743b3b3 | ||
|
|
41f0ae18c4 | ||
|
|
e6b8aefe5b | ||
|
|
8b2437cb16 | ||
|
|
292495ab0d | ||
|
|
017b137d7f | ||
|
|
7969030313 | ||
|
|
c8efad4c3f | ||
|
|
7bf9d8f675 | ||
|
|
e275f15f00 | ||
|
|
30017a5217 | ||
|
|
64c5cbe8c3 | ||
|
|
b2b226573c | ||
|
|
69f796998f | ||
|
|
4d64be3ac7 | ||
|
|
4408b794d6 | ||
|
|
666da8a879 | ||
|
|
b166342579 | ||
|
|
433f5bf7d2 | ||
|
|
b8ae153ef5 | ||
|
|
bb59c2bab7 | ||
|
|
ab7c6c5118 | ||
|
|
85c1ea449e | ||
|
|
b51d679b78 | ||
|
|
2a2bc9e625 | ||
|
|
d00f059567 | ||
|
|
81a840347c | ||
|
|
e691675bf9 | ||
|
|
9cd57c3ae1 | ||
|
|
0e3310a39b | ||
|
|
447818ac2a | ||
|
|
dd0eb846b0 | ||
|
|
1b62ca4b21 | ||
|
|
97ece03853 | ||
|
|
33a72a0d9d | ||
|
|
62e61829b4 | ||
|
|
ad9d12260e | ||
|
|
fe54c9495f | ||
|
|
456afce6ca | ||
|
|
8ecbb4d4a4 | ||
|
|
92564397f4 | ||
|
|
62b2805c9d | ||
|
|
985af8b0bb | ||
|
|
58c3b180dc | ||
|
|
d260959b96 | ||
|
|
6e11197348 | ||
|
|
04d5bef4d2 | ||
|
|
1ccc5ce4e1 | ||
|
|
a94ef1db80 | ||
|
|
5513c624c3 | ||
|
|
1c493a8dc0 | ||
|
|
3fa051a6c3 | ||
|
|
876171b83d | ||
|
|
68521298ff | ||
|
|
c648926e49 | ||
|
|
1cd259a261 | ||
|
|
ef1fe07157 | ||
|
|
9ae8f7f406 | ||
|
|
363cbaac32 | ||
|
|
435b2cf23c | ||
|
|
bd1a87f5f0 | ||
|
|
c57218adb2 | ||
|
|
a56d2a3eca | ||
|
|
b324130e30 | ||
|
|
566a6e5836 | ||
|
|
bcca407a5e | ||
|
|
10c6832718 | ||
|
|
1ad8db20b4 | ||
|
|
43233747be | ||
|
|
56354afa9b | ||
|
|
7f686a817b | ||
|
|
10534ff75a | ||
|
|
da39be79a4 | ||
|
|
8a1ca80e28 | ||
|
|
ca29a3a272 | ||
|
|
1a115bda82 | ||
|
|
130e49bf1d | ||
|
|
552c84f910 | ||
|
|
d1a0111705 | ||
|
|
5bc285041b | ||
|
|
c96a522a1b | ||
|
|
def2dadca1 | ||
|
|
46a52e2b2f | ||
|
|
1835776200 | ||
|
|
efaa4893bf | ||
|
|
be8580cc4b | ||
|
|
e43bb3123b | ||
|
|
3078e3584c | ||
|
|
6689849f97 | ||
|
|
7281ee1565 | ||
|
|
4c12ee3b14 | ||
|
|
dc0ae69f65 | ||
|
|
0dba4ba653 | ||
|
|
758d8689ab | ||
|
|
f119ccf5a0 | ||
|
|
c86c6486b9 | ||
|
|
6ed5c163ba | ||
|
|
2c14530e3c | ||
|
|
6d30e1921e | ||
|
|
7ff84a9932 | ||
|
|
bcff01b0bf | ||
|
|
8cd09342e1 | ||
|
|
802e78d3b7 | ||
|
|
e6c938e5d0 | ||
|
|
7b6595124f | ||
|
|
c33408a1f7 | ||
|
|
160d53701b | ||
|
|
1f19d1925a | ||
|
|
50680a4f2e | ||
|
|
18307b2e03 | ||
|
|
b03ad80451 | ||
|
|
dedfe1f421 | ||
|
|
1cf583d197 | ||
|
|
1deaa4c30d | ||
|
|
90316f106a | ||
|
|
63693f908d | ||
|
|
6905e4a2a1 | ||
|
|
4489a54e82 | ||
|
|
6d48915945 | ||
|
|
00f3a7f4db | ||
|
|
f9c47ab233 | ||
|
|
28712b205f | ||
|
|
69b1fb1bfd | ||
|
|
8a22f9215f | ||
|
|
c5ebc01978 | ||
|
|
f29b468fc1 | ||
|
|
e796fbb990 | ||
|
|
37a122c981 | ||
|
|
4f426a73f6 | ||
|
|
1bcb74cd85 | ||
|
|
cd88c8de78 | ||
|
|
eee288b45b | ||
|
|
797cb7615d | ||
|
|
ca4667ff1e | ||
|
|
66d1143ca0 | ||
|
|
f310916c76 | ||
|
|
5d3d8ab932 | ||
|
|
07117c90d1 | ||
|
|
fd91c18460 | ||
|
|
5d92c0e85e | ||
|
|
2a12c04518 | ||
|
|
d08cae6fa3 | ||
|
|
d7f9de1881 | ||
|
|
962190cc57 | ||
|
|
4527866276 | ||
|
|
088dfcd4dc | ||
|
|
6c317b6e64 | ||
|
|
6b66c273b4 | ||
|
|
60f31008c0 | ||
|
|
078f74db97 | ||
|
|
a0b025cf59 | ||
|
|
bc695f5af9 | ||
|
|
9685e63b09 | ||
|
|
142791360c | ||
|
|
e004ed2f4b | ||
|
|
23ed487252 | ||
|
|
efefec3c20 | ||
|
|
3d2ad1cb9b | ||
|
|
90d3016938 | ||
|
|
438f9fc94d | ||
|
|
82ec88cc2f | ||
|
|
149611041e | ||
|
|
b12c79462e | ||
|
|
fbf34fb730 | ||
|
|
e1fe3eb710 | ||
|
|
76ae2e0e5a | ||
|
|
a57063adf7 | ||
|
|
ff0157e624 | ||
|
|
af9701feb8 | ||
|
|
93c1f31588 | ||
|
|
1964e54476 | ||
|
|
4682255d5f | ||
|
|
a503898b21 | ||
|
|
21352dae07 | ||
|
|
8470c7ac6b | ||
|
|
28aa86f0aa | ||
|
|
3ed214269a | ||
|
|
37b5183be2 | ||
|
|
a79896aa2e | ||
|
|
d5bd40873e | ||
|
|
52f1809d22 | ||
|
|
51d8fa7268 | ||
|
|
4d1167a6d6 | ||
|
|
8fa1459e5b | ||
|
|
baf3914be8 | ||
|
|
bd2721d3ec | ||
|
|
f30b96b360 | ||
|
|
4772c0e110 | ||
|
|
4a0af08ae5 | ||
|
|
a71129df4b | ||
|
|
de6acfa1ce | ||
|
|
ccf075dc65 | ||
|
|
1d8ac3cf86 | ||
|
|
623a23492f | ||
|
|
7a8ff89c5c | ||
|
|
eda70def2a | ||
|
|
08fd75edc7 | ||
|
|
15ea53864f | ||
|
|
056ee0d58e | ||
|
|
377cd64556 | ||
|
|
b37744d574 | ||
|
|
a7f21fe0c6 | ||
|
|
955ca99cf3 | ||
|
|
98f5bb4124 | ||
|
|
b3943f005d | ||
|
|
8d4178b984 | ||
|
|
2a88ed38c4 | ||
|
|
52dce7dfd3 | ||
|
|
6ebee92542 | ||
|
|
1b5646f526 | ||
|
|
7024e4b40d | ||
|
|
bc2e27d7da | ||
|
|
189da2bfe2 | ||
|
|
12e6afbaad | ||
|
|
142ebe3d27 | ||
|
|
7579f6e42a | ||
|
|
38c25cae74 | ||
|
|
408496eb7c | ||
|
|
4d61c74a8b | ||
|
|
190c610466 | ||
|
|
85b7e3ebe3 | ||
|
|
c6d3fc06a3 | ||
|
|
d220525ac7 | ||
|
|
5e4a631ff2 | ||
|
|
9099ce42b9 | ||
|
|
df226fea22 | ||
|
|
851d2e9151 | ||
|
|
e67ee4ffdb | ||
|
|
2baf975847 | ||
|
|
c1672ebc8e | ||
|
|
bbbd291065 | ||
|
|
0a3c1efdd4 | ||
|
|
89121a2608 | ||
|
|
23cf264d4d | ||
|
|
b3130225b5 | ||
|
|
65512defed | ||
|
|
3b1c8748f1 | ||
|
|
aba660eddb | ||
|
|
137eac7dbf | ||
|
|
fdbd08f511 | ||
|
|
ace1cec1f6 | ||
|
|
0c15e524d7 | ||
|
|
b0b5b1c30d | ||
|
|
30b4c85c5a | ||
|
|
910f9cadfe | ||
|
|
6de37ebd16 | ||
|
|
de57c4e87e | ||
|
|
b85cf66490 | ||
|
|
8e638ea9a6 | ||
|
|
b4849ec495 | ||
|
|
09c12d52ac | ||
|
|
db6a2ddd7e | ||
|
|
12ef9463ab | ||
|
|
fa5fda0c3b | ||
|
|
251609e274 | ||
|
|
a557ad177e | ||
|
|
c0287e49d8 | ||
|
|
78e838f2f0 | ||
|
|
c1f216c7c7 | ||
|
|
b75ff99e4c | ||
|
|
780dd8ade9 | ||
|
|
e1c10b7653 | ||
|
|
be9505f8fe | ||
|
|
d6bcd4f94f | ||
|
|
7d2196f4c3 | ||
|
|
0539174317 | ||
|
|
b4b52e12d5 | ||
|
|
f2e0b1cfa2 | ||
|
|
8020e2a263 | ||
|
|
6112d9b1b0 | ||
|
|
4a1fbcbd31 | ||
|
|
a02a3230f1 | ||
|
|
0218bb4990 | ||
|
|
3769c03565 | ||
|
|
d96cb10476 | ||
|
|
b6b6123434 | ||
|
|
b40877fcc1 | ||
|
|
af5ae29b73 | ||
|
|
082fceebbe | ||
|
|
f1dab80a06 | ||
|
|
cbf2fac2cf | ||
|
|
4564bd7180 | ||
|
|
d12ad7b882 | ||
|
|
f8e9f07a00 | ||
|
|
4ac3891e07 | ||
|
|
a2d55d3fdd | ||
|
|
d015a24300 | ||
|
|
be38acbede | ||
|
|
34d0cb4dc7 | ||
|
|
18d0558b19 | ||
|
|
d4469f3a2d | ||
|
|
43b760b4bf | ||
|
|
3d47932c09 | ||
|
|
7196d6e1bf | ||
|
|
ec06a7d861 | ||
|
|
ef23f0d18e | ||
|
|
e9abc5f07f | ||
|
|
6f9d6ff849 | ||
|
|
eab18d3c11 | ||
|
|
3a509a6a97 | ||
|
|
615c6f4e24 | ||
|
|
96660b4539 | ||
|
|
1be284974b | ||
|
|
790b6478dc | ||
|
|
106344b33e | ||
|
|
85a2a4b873 | ||
|
|
4ab694de0c | ||
|
|
5e193c1725 | ||
|
|
2b055c028c | ||
|
|
b341749e45 | ||
|
|
6ae381b1fd | ||
|
|
352b6cbe04 | ||
|
|
e5e6d2701e | ||
|
|
9ad1924488 | ||
|
|
2aadbfc64a | ||
|
|
1c5d652f93 | ||
|
|
b2355a3b2d | ||
|
|
4ee6d089d5 | ||
|
|
6bd81cbff5 | ||
|
|
b912190c5e | ||
|
|
43a826e2e5 | ||
|
|
8ae64a9dcf | ||
|
|
4ce9faf39b | ||
|
|
d94a67d0af | ||
|
|
d650d91d82 | ||
|
|
e14f59256d | ||
|
|
d3322a4a15 | ||
|
|
a65842e31f | ||
|
|
74fde66b51 | ||
|
|
c3ea155a7b | ||
|
|
c4b81e3d2c | ||
|
|
6f6ed1a741 | ||
|
|
311680c090 | ||
|
|
5e54aa553a | ||
|
|
6913970830 | ||
|
|
014e453e57 | ||
|
|
25b5341f76 | ||
|
|
1df51f9609 | ||
|
|
65d13189b3 | ||
|
|
0913011120 | ||
|
|
30ddc18eb1 | ||
|
|
697d755744 | ||
|
|
e3f23ddc79 | ||
|
|
094acc40e8 | ||
|
|
ebd4991de8 | ||
|
|
d04a8fad4c | ||
|
|
cb14bffc5a | ||
|
|
a4c4d17381 | ||
|
|
21eb27f6e3 | ||
|
|
abf0fc7942 | ||
|
|
c2703edfde | ||
|
|
d14b90ab20 | ||
|
|
48f4924932 | ||
|
|
765551988a | ||
|
|
4883eb0d1b | ||
|
|
06a9a93d1c | ||
|
|
c92a0e1d43 | ||
|
|
c6b5ee164b | ||
|
|
c65075f887 | ||
|
|
a1f678a3a1 | ||
|
|
fe3fefaa4e | ||
|
|
3ccebcb0d1 | ||
|
|
dbbae0eef2 | ||
|
|
f11c4881f3 | ||
|
|
6398c6d7ce | ||
|
|
973ce8c3a7 | ||
|
|
d971869283 | ||
|
|
987002b8f3 | ||
|
|
f73fe495a5 | ||
|
|
fe7b0e2bc7 | ||
|
|
23937c54e0 | ||
|
|
b3d0fd9d2f | ||
|
|
497aaf6143 | ||
|
|
9d6db3a93b | ||
|
|
8a6f3e6809 | ||
|
|
6c419716a4 | ||
|
|
d1a769205c | ||
|
|
b784e342c9 | ||
|
|
0d82fd51c7 | ||
|
|
3b4d905485 | ||
|
|
53c63f0f4b | ||
|
|
5553e3cd8d | ||
|
|
1e195e07e0 | ||
|
|
b6f0e15951 | ||
|
|
da224303fe | ||
|
|
67ee130a9e | ||
|
|
18d908fa63 | ||
|
|
c61f58854e | ||
|
|
f789ecd2f1 | ||
|
|
1fdc30804a | ||
|
|
5ba10d0acb | ||
|
|
12803d8154 | ||
|
|
36c391ccff | ||
|
|
765fb6297c | ||
|
|
66255769ad | ||
|
|
04a8d38641 | ||
|
|
859d020031 | ||
|
|
3c541117d0 | ||
|
|
80ca2e5215 | ||
|
|
19f2aa2997 | ||
|
|
ec657f30c7 | ||
|
|
7e84d495f5 | ||
|
|
c3baedd93c | ||
|
|
ae9676f744 | ||
|
|
7ec156a5d1 | ||
|
|
b80cbea1bc | ||
|
|
4600fa9f32 | ||
|
|
6e0b3e5cdc | ||
|
|
519ff87f5d | ||
|
|
d4a363e37e | ||
|
|
a3cfc45fef | ||
|
|
60602e02d9 | ||
|
|
44366f7872 | ||
|
|
2f18d8c204 | ||
|
|
08efbee52b | ||
|
|
eac8d78c5d | ||
|
|
db73673374 | ||
|
|
281cdb7264 | ||
|
|
101c80d820 | ||
|
|
1e06f65d9e | ||
|
|
eea85709ed | ||
|
|
cbca974529 | ||
|
|
fc27f57580 | ||
|
|
e50dd6606e | ||
|
|
8c9e232d65 | ||
|
|
ef98888394 | ||
|
|
e4b9ba34df | ||
|
|
169e0ec9df | ||
|
|
2779353a32 | ||
|
|
35aabb987c | ||
|
|
06f02070c7 | ||
|
|
d138d3e786 | ||
|
|
dbea68d33a | ||
|
|
72bcabf615 | ||
|
|
5db68eac24 | ||
|
|
7d9d88860e | ||
|
|
06c80ad982 | ||
|
|
c4335527f8 | ||
|
|
90d27a2ad8 | ||
|
|
93fd0a9af0 | ||
|
|
987b0aeb41 | ||
|
|
8dc5ac0b25 | ||
|
|
d310a47523 | ||
|
|
bd8fa3776d | ||
|
|
305796af53 | ||
|
|
60c10a69a3 | ||
|
|
c8aad9839f | ||
|
|
64016a1326 | ||
|
|
a489c7ad8e | ||
|
|
afb9ba7ad6 | ||
|
|
b1de5b1120 | ||
|
|
144a23e89b | ||
|
|
a6763a3e5d | ||
|
|
f047ec787a | ||
|
|
d80c368ccb | ||
|
|
9b60173b8c | ||
|
|
8556974ef1 | ||
|
|
edf9f3a2be | ||
|
|
7bb9414be8 | ||
|
|
6e439adb51 | ||
|
|
f6b783e74a | ||
|
|
171b81461c | ||
|
|
83db76aed8 | ||
|
|
e6d1bb7e5c | ||
|
|
a3d9fe76d6 | ||
|
|
0f4f154637 | ||
|
|
7d112a208f | ||
|
|
c867d39d8d | ||
|
|
83b6c939f7 | ||
|
|
e1e4eb5d6f | ||
|
|
a14c08f122 | ||
|
|
5fd50dcf45 | ||
|
|
b2ac4ee245 | ||
|
|
0ad7c0546b | ||
|
|
748381fef3 | ||
|
|
7eb9e42210 | ||
|
|
36a4b67ef4 | ||
|
|
94b35e3d5f | ||
|
|
c5aa82b76a | ||
|
|
c2920e195f | ||
|
|
92a78a419e | ||
|
|
4f27c2b852 | ||
|
|
ece5779b41 | ||
|
|
167aaa8491 | ||
|
|
de622b055b | ||
|
|
7e88b930ec | ||
|
|
c9adc2b852 | ||
|
|
91d3aba611 | ||
|
|
48bc11dcb5 | ||
|
|
9ee0b32cac | ||
|
|
4b6b74604b | ||
|
|
7ad3fc4751 | ||
|
|
e604450cfb | ||
|
|
9cfbc83896 | ||
|
|
98b2f4ec35 | ||
|
|
47e30f2daf | ||
|
|
6c21da6959 | ||
|
|
c5fe71d390 | ||
|
|
d14ffcb736 | ||
|
|
e694aca70b | ||
|
|
3c58cb1b9c | ||
|
|
dc452cdadf | ||
|
|
e855365cbb | ||
|
|
cffa288227 | ||
|
|
89ddced342 | ||
|
|
7457328b59 | ||
|
|
44ff413810 | ||
|
|
d174c2c2d8 | ||
|
|
480f4c9a8c | ||
|
|
7474cc5d8a | ||
|
|
bda5c4f5dd | ||
|
|
4f5034c167 | ||
|
|
9470db1f4d | ||
|
|
dfeb910ac9 | ||
|
|
a5745795be | ||
|
|
98f2b5dd08 | ||
|
|
f642c7570e | ||
|
|
dca9ea24d7 | ||
|
|
43fd7b6000 | ||
|
|
1553ec3bd4 | ||
|
|
37d54811e0 | ||
|
|
0f2af6eb37 | ||
|
|
91546228fa | ||
|
|
5488ff06e0 | ||
|
|
ef7f050bc5 | ||
|
|
e5c94d9698 | ||
|
|
4d3e0ac5d9 | ||
|
|
0a2f0372be | ||
|
|
e378fc3cfb | ||
|
|
75a1d74d9c | ||
|
|
1404685296 | ||
|
|
0ebed9b46f | ||
|
|
af69352361 | ||
|
|
840e3b861f | ||
|
|
a7cfe7fe04 | ||
|
|
a324cf0fcd | ||
|
|
0919f4c85b | ||
|
|
fd4cc6a1e8 | ||
|
|
d6ae3d4f16 | ||
|
|
9c1819467a | ||
|
|
08410ef209 | ||
|
|
6cd3242454 | ||
|
|
986c1a7bc8 | ||
|
|
a7703ec996 | ||
|
|
52d2eb3f59 | ||
|
|
b19fed41ef | ||
|
|
82a4b2c769 | ||
|
|
1d52cde3b3 | ||
|
|
aca4cc0ace | ||
|
|
8f9a78feb9 | ||
|
|
45484a43f1 | ||
|
|
63665e6e9c | ||
|
|
151665c880 | ||
|
|
15e475873e | ||
|
|
f846af75e8 | ||
|
|
5c7ab3793f | ||
|
|
a501f0cdef | ||
|
|
4b4c2606cd | ||
|
|
901e7581fe | ||
|
|
55fb233ce4 | ||
|
|
dd77ee4a8e | ||
|
|
a7ae6d7b47 | ||
|
|
34dfac8bb2 | ||
|
|
599f783c04 | ||
|
|
c7f82d3d46 | ||
|
|
8b346c6b44 | ||
|
|
e386764151 | ||
|
|
c0acecc6e9 | ||
|
|
a1724134ec | ||
|
|
530b830586 | ||
|
|
363a72c3ad | ||
|
|
c1a6daf9d2 | ||
|
|
8a7a73678c | ||
|
|
6cc8c7cb9d | ||
|
|
e2d1771a7a | ||
|
|
23f7dd6ee3 | ||
|
|
9884ace309 | ||
|
|
70284ac440 | ||
|
|
f24caad997 | ||
|
|
32729350f6 | ||
|
|
4929d190a5 | ||
|
|
0e211dc91b | ||
|
|
8663ab2d28 | ||
|
|
ba0ecaf70f | ||
|
|
acb4f5924e | ||
|
|
46553a80ad | ||
|
|
417334d140 | ||
|
|
e254657813 | ||
|
|
b087df8d97 | ||
|
|
47eb74d5ba | ||
|
|
f0ac047978 | ||
|
|
e57e246991 | ||
|
|
6934cdd122 | ||
|
|
aa7fb74312 | ||
|
|
0e2a77ced7 | ||
|
|
2d135d708e | ||
|
|
26d34f896b | ||
|
|
87c58cae83 | ||
|
|
8429067ae5 | ||
|
|
4d6957a6fa | ||
|
|
70c53248ae | ||
|
|
6e645cb054 | ||
|
|
28fecc6834 | ||
|
|
64c2faf538 | ||
|
|
c514a4d503 | ||
|
|
391d04b45c | ||
|
|
f974c00a63 | ||
|
|
9f0107c002 | ||
|
|
6ce82e915e | ||
|
|
864797fc99 | ||
|
|
c741434e3c | ||
|
|
60fcb1a862 | ||
|
|
18dc6a3ff5 | ||
|
|
da52dd006b | ||
|
|
ed1655ed8f | ||
|
|
516c4e32be | ||
|
|
1e222d806e | ||
|
|
bfb35b198d | ||
|
|
3a5f36155f | ||
|
|
82092fab76 | ||
|
|
a432cb886d | ||
|
|
5fff8c6ba2 | ||
|
|
e1de4f5c5f | ||
|
|
b6145d6f1e | ||
|
|
3804a87cef | ||
|
|
a7a6c664c8 | ||
|
|
f075515607 | ||
|
|
84c15bbc69 | ||
|
|
54e70d490d | ||
|
|
67c3de1f5d | ||
|
|
7281b5b1d7 | ||
|
|
966eb01f1c | ||
|
|
5bdf072cdf | ||
|
|
59c3381962 | ||
|
|
1fa4216b18 | ||
|
|
a98c953876 | ||
|
|
bf995e5861 | ||
|
|
1b8470df38 | ||
|
|
98ded8ea30 | ||
|
|
b72a50eb7e | ||
|
|
9c3f4fbb9d | ||
|
|
28c68308a9 | ||
|
|
ea3b0c15ac | ||
|
|
38ce46adb0 | ||
|
|
0a9a0103dd | ||
|
|
b7b370ff62 | ||
|
|
7b0c98ad2c | ||
|
|
bfe25e70d6 | ||
|
|
b2409df369 | ||
|
|
e1d8549730 | ||
|
|
865cc081ce | ||
|
|
867d5a9eb5 | ||
|
|
ac84b7604b | ||
|
|
8f860ad93e | ||
|
|
f3b65700d7 | ||
|
|
8ec1856206 | ||
|
|
811d2162fc | ||
|
|
5e2cdca103 | ||
|
|
23fb5852ba | ||
|
|
75cbc0d29a | ||
|
|
d08cd684c5 | ||
|
|
529b297ba6 | ||
|
|
32193eef49 | ||
|
|
1f97b90b2d | ||
|
|
0dd36260e9 | ||
|
|
3571d49987 | ||
|
|
ad3489c491 | ||
|
|
2461fa2e25 | ||
|
|
60e49ba343 | ||
|
|
a709381980 | ||
|
|
c2805c8c1c | ||
|
|
0346cbe911 | ||
|
|
74a4d4455b | ||
|
|
3659e1c91f | ||
|
|
09da5c6968 | ||
|
|
2575efd28d | ||
|
|
78c1c8d2b1 | ||
|
|
d5147f3dbb | ||
|
|
593580fbc1 | ||
|
|
67ca1cb638 | ||
|
|
bcf5b64545 | ||
|
|
e37ad663b3 | ||
|
|
4ce7582a46 | ||
|
|
1c371bb7bf | ||
|
|
17fdeb0734 | ||
|
|
5c6f0c32b3 | ||
|
|
e630280673 | ||
|
|
7c87961adf | ||
|
|
0df5ceb7d2 | ||
|
|
54342f2592 | ||
|
|
fbad558c37 | ||
|
|
b27dfb290c | ||
|
|
063c930349 | ||
|
|
c1f1e489a7 | ||
|
|
62960ed8de | ||
|
|
03305e04a7 | ||
|
|
4b294b1125 | ||
|
|
7122a21591 | ||
|
|
9682e571a2 | ||
|
|
2cefbfb8aa | ||
|
|
084062488c | ||
|
|
4dbe2b5297 | ||
|
|
0391e5bc3d | ||
|
|
bcbd96c608 | ||
|
|
6a6633e151 | ||
|
|
5c4546a54c | ||
|
|
255e328340 | ||
|
|
aaf9b085d7 | ||
|
|
c7b14c9fab | ||
|
|
0436ba78e2 | ||
|
|
1085a1c221 | ||
|
|
494b33bd7a | ||
|
|
925e3a67da | ||
|
|
78026f7fa5 | ||
|
|
9d77cac4bb | ||
|
|
6747280964 | ||
|
|
d7dbd79f7c | ||
|
|
aec692c402 | ||
|
|
113bbead4a | ||
|
|
1361c196da | ||
|
|
987995ad68 | ||
|
|
d24db7c053 | ||
|
|
25a9d52d86 | ||
|
|
946c632920 | ||
|
|
94bcbb80fd | ||
|
|
ba58965770 | ||
|
|
e50ddbf348 | ||
|
|
e95f21fa9c | ||
|
|
7026b765bd | ||
|
|
53eedd2701 | ||
|
|
9886c58681 | ||
|
|
953f6da7d7 | ||
|
|
da1efe880d | ||
|
|
bd0b6dd4d2 | ||
|
|
1c049fe1fb | ||
|
|
10b1b87d55 | ||
|
|
3ec6a3b3f2 | ||
|
|
8da919d4cd | ||
|
|
5cd59b795b | ||
|
|
e4dc30d1fb | ||
|
|
2013cee298 | ||
|
|
1f89a6304b | ||
|
|
580e0f9df7 | ||
|
|
2221c4548e | ||
|
|
e06c226e84 | ||
|
|
11a4f0ef32 | ||
|
|
ef15f299d2 | ||
|
|
1d333b9322 | ||
|
|
5302ed8653 | ||
|
|
2cf26a10c4 | ||
|
|
deda1e4251 | ||
|
|
c042bf2d15 | ||
|
|
8ced6aa205 | ||
|
|
3ca514c85b | ||
|
|
27b8e7d5ec | ||
|
|
a2d77a3917 | ||
|
|
c0549fe422 | ||
|
|
0dc8d6fd68 | ||
|
|
cd97647818 | ||
|
|
fcb5811f37 | ||
|
|
a239ba2211 | ||
|
|
e8dc96bcda | ||
|
|
096ad97a73 | ||
|
|
a5a5517555 | ||
|
|
d9b88a5d8d | ||
|
|
8493ea22eb | ||
|
|
aebb87aa20 | ||
|
|
14e97cb24f | ||
|
|
26cc15b4a2 | ||
|
|
50ce606e12 | ||
|
|
b052320f98 | ||
|
|
ecb3cebc9f | ||
|
|
4a32dfc71b | ||
|
|
c913929ff9 | ||
|
|
d7d5b29b07 | ||
|
|
111a7f72f8 | ||
|
|
149abdef9b | ||
|
|
980848f35a | ||
|
|
d1e0c86a71 | ||
|
|
d3872ca8a3 | ||
|
|
003dec269a | ||
|
|
e88092cde7 | ||
|
|
98422bd355 | ||
|
|
af83b89812 | ||
|
|
cffb1b8713 | ||
|
|
0b4895addf | ||
|
|
08646ea12a | ||
|
|
40beb7ceeb | ||
|
|
e7963aa324 | ||
|
|
d5894b9fb7 | ||
|
|
75c47a1113 | ||
|
|
97923b19bf | ||
|
|
879c89a285 | ||
|
|
718727462b | ||
|
|
63f2fd864a | ||
|
|
556dda5790 | ||
|
|
aeaa8549e3 | ||
|
|
1a8a757912 | ||
|
|
c69bb8acc9 | ||
|
|
4989d67b92 | ||
|
|
b272d342b0 | ||
|
|
251b2853e0 | ||
|
|
d381c9505f | ||
|
|
eeb3b8f939 | ||
|
|
ee40f32b0c | ||
|
|
02a69ea6d9 | ||
|
|
d47bb5ecd4 | ||
|
|
d2d6e2f554 | ||
|
|
f48b4a6c62 | ||
|
|
07f7b7df1b | ||
|
|
26486f9d63 | ||
|
|
428aa970b9 | ||
|
|
2a8c532786 | ||
|
|
4381829d16 | ||
|
|
176d75768f | ||
|
|
e28e363bd0 | ||
|
|
114ce1ea3a | ||
|
|
78215552bf | ||
|
|
fc9677f419 | ||
|
|
975a551728 | ||
|
|
be4fe6ab77 | ||
|
|
ab924f6b48 | ||
|
|
e4bf2b4c9b | ||
|
|
c49b1a46f8 | ||
|
|
6a56726734 | ||
|
|
8f6783792f | ||
|
|
b5ab1d6b33 | ||
|
|
25fe1d03a7 | ||
|
|
90546ad4a7 | ||
|
|
939bbc3f2c | ||
|
|
02ee327595 | ||
|
|
d8081277ee | ||
|
|
164a112e0c | ||
|
|
697bde7b53 | ||
|
|
2fd5244f85 | ||
|
|
354d925f94 | ||
|
|
88c74f020c | ||
|
|
9b7021b1cd | ||
|
|
30dbb23330 | ||
|
|
b1696ed1cd | ||
|
|
61f1c99791 | ||
|
|
bb9a559b80 | ||
|
|
5e20ea4975 | ||
|
|
c5d7e30bed | ||
|
|
de5f3a31ed | ||
|
|
7913c4135f | ||
|
|
d49345de9c | ||
|
|
1dbfa71bde | ||
|
|
d46b84f0d6 | ||
|
|
9d456992cf | ||
|
|
5dd62ad2aa | ||
|
|
a293eeb398 | ||
|
|
a6b6b5eb70 | ||
|
|
971af1df5f | ||
|
|
21641da0bf | ||
|
|
a8d9c145e6 | ||
|
|
bfafcb76ba | ||
|
|
52f74f1204 | ||
|
|
00c212ecb2 | ||
|
|
e77d302a49 | ||
|
|
5183f3729c | ||
|
|
e93102f105 | ||
|
|
a4652689ec | ||
|
|
ede1005087 | ||
|
|
e97c7ed32e | ||
|
|
9230a2ab73 | ||
|
|
01ee66ec4f | ||
|
|
4c12cbd3cc | ||
|
|
d8eeeaaef6 | ||
|
|
994dae2a7d | ||
|
|
51da6e928d | ||
|
|
a328ad030e | ||
|
|
ed7605eccd | ||
|
|
de43880a1c | ||
|
|
32b1a5b22d | ||
|
|
795992fb42 | ||
|
|
339eab33c8 | ||
|
|
489f3aa19d | ||
|
|
888e284f84 | ||
|
|
d151114f08 | ||
|
|
4f6a3c23ad | ||
|
|
4ed437fd4e | ||
|
|
fa0b21ba81 | ||
|
|
a96f1d0b49 | ||
|
|
ac0aebd751 | ||
|
|
781cbb4668 | ||
|
|
56ca1911a1 | ||
|
|
c20aec23a2 | ||
|
|
a9cff01579 | ||
|
|
6af56a61b8 | ||
|
|
252db191a6 | ||
|
|
5e2776f264 | ||
|
|
7ec9fb2c44 | ||
|
|
34facb6b3b | ||
|
|
5bb2a1368e | ||
|
|
85a7bbca66 | ||
|
|
2b7f27bf8f | ||
|
|
dd57945e7d | ||
|
|
fa02b4fd56 | ||
|
|
c8715eead5 | ||
|
|
37aae8c10e | ||
|
|
a97ed02e15 | ||
|
|
38ebb2d06a | ||
|
|
c765bfc946 | ||
|
|
b00ac75f33 | ||
|
|
36730168c0 | ||
|
|
4339ece6f6 | ||
|
|
041c997e59 | ||
|
|
098ebb38dc | ||
|
|
b99c38a070 | ||
|
|
07b42d8e74 | ||
|
|
062d168c97 | ||
|
|
c9be5fb125 | ||
|
|
06c6716ee1 | ||
|
|
e856d8fddf | ||
|
|
20339f70c1 | ||
|
|
c2e6cf1eb0 | ||
|
|
8dfdca97cd | ||
|
|
6e8cdc24a3 | ||
|
|
461f1e39fa | ||
|
|
4892dbce5e | ||
|
|
9da32a13de | ||
|
|
9c6908da77 | ||
|
|
ac081e6c86 | ||
|
|
cc9744156c | ||
|
|
72a874c7f4 | ||
|
|
2809324b35 | ||
|
|
58e6c45c73 | ||
|
|
43aaf192a2 | ||
|
|
c0574bc738 | ||
|
|
27e5d639ef | ||
|
|
aa9fdd4fc9 | ||
|
|
7af6d9b2ce | ||
|
|
0e06d28335 | ||
|
|
e3b86e4d41 | ||
|
|
5b1bfe7379 | ||
|
|
76d07b967e | ||
|
|
4b1932fe52 | ||
|
|
a56de91b1e | ||
|
|
6b4fb616bc | ||
|
|
d24670e14e | ||
|
|
13b3ae35ed | ||
|
|
6860e1f085 | ||
|
|
74fa1c6628 | ||
|
|
85f847a4f3 | ||
|
|
39df72d163 | ||
|
|
5ca8786802 | ||
|
|
ca145967dc | ||
|
|
06a3ce7486 | ||
|
|
9f85b6154d | ||
|
|
732763689a | ||
|
|
0ea75f25f1 | ||
|
|
eab27ce0bb | ||
|
|
29fd381989 | ||
|
|
06a845697a | ||
|
|
b12587626d | ||
|
|
b49988032e | ||
|
|
a9b4152553 | ||
|
|
63720045f1 | ||
|
|
aa7529192e | ||
|
|
a162a15a27 | ||
|
|
457a73efae | ||
|
|
91c3dd982b | ||
|
|
c171f93c93 | ||
|
|
0cf9ddb1cd | ||
|
|
2322537350 | ||
|
|
6ce50109da | ||
|
|
abe7fdf34d | ||
|
|
ecf2f5ed8c | ||
|
|
98b4934dd5 | ||
|
|
0bc7c544ad | ||
|
|
1f7ad9d418 | ||
|
|
4b9d3b3dbc | ||
|
|
571e332ed5 | ||
|
|
d78d22b188 | ||
|
|
d37638240a | ||
|
|
ae7fd3f87b | ||
|
|
e82e63b288 | ||
|
|
0149d4e27b | ||
|
|
9fc9c71b6f | ||
|
|
b264f690d1 | ||
|
|
c07e19c898 | ||
|
|
b8e50737d2 | ||
|
|
082d0aa02f | ||
|
|
ca26d0e450 | ||
|
|
8cbe021ffc | ||
|
|
7b39d8025b | ||
|
|
47bd35b151 | ||
|
|
d7add54a3c | ||
|
|
d3c937569b | ||
|
|
94ca613201 | ||
|
|
30f2f635be | ||
|
|
57f4d31c21 | ||
|
|
90e4fd7ff5 | ||
|
|
17835832f2 | ||
|
|
949817f597 | ||
|
|
23065f2c4b | ||
|
|
b623b06cf0 | ||
|
|
55c86d8ec7 | ||
|
|
e955617aa1 | ||
|
|
6304610713 | ||
|
|
47d20928e0 | ||
|
|
c9a4d02e0d | ||
|
|
6513dfb42a | ||
|
|
3f0412453f | ||
|
|
dcba319071 | ||
|
|
d19851fc0c | ||
|
|
d6eb06cb72 | ||
|
|
473080d7ee | ||
|
|
c98a6adb09 | ||
|
|
2cd56d5041 | ||
|
|
982098672e | ||
|
|
445ecea3e6 | ||
|
|
db977dfba4 | ||
|
|
a3c12ab9f5 | ||
|
|
0f7e152650 | ||
|
|
b55c7ba9a1 | ||
|
|
8256c9f7ad | ||
|
|
59727d7b0b | ||
|
|
2dd2210a73 | ||
|
|
25aafdbebc | ||
|
|
cd5717169c | ||
|
|
a38ad5a11e | ||
|
|
66d9b56976 | ||
|
|
ac40bd1e17 | ||
|
|
16d2a9bf99 | ||
|
|
b7e6838d26 | ||
|
|
21d23b5baa | ||
|
|
69a2941d57 | ||
|
|
3cc2abf8b9 | ||
|
|
6f4173650a | ||
|
|
0fcb8bdc0a | ||
|
|
c0937cf412 | ||
|
|
d9ab3aab0f | ||
|
|
c8652de78b | ||
|
|
86dc4e2bd5 | ||
|
|
1b9c56a9b9 | ||
|
|
08ab504fac | ||
|
|
21c0842fae | ||
|
|
8d10feaa68 | ||
|
|
df2171f253 | ||
|
|
f5fcd94faf | ||
|
|
15c5dbef00 | ||
|
|
79df56c096 | ||
|
|
d3fffd9530 | ||
|
|
527c9c8e6e | ||
|
|
d285be45cb | ||
|
|
0dda9c73f6 | ||
|
|
d07bf270e7 | ||
|
|
eb24dd5d9e | ||
|
|
ce693c7cd5 | ||
|
|
3198890269 | ||
|
|
eacc93de43 | ||
|
|
9795740257 | ||
|
|
4548f5d8aa | ||
|
|
8dfd2fb519 | ||
|
|
83a40f83e1 | ||
|
|
5b2fcb3c6c | ||
|
|
bcd9adb66d | ||
|
|
5e2dc114ab | ||
|
|
1ced4531be | ||
|
|
05fe39c0ae | ||
|
|
3769b2b3ea | ||
|
|
f4d5480f6f | ||
|
|
ddf3c0810b | ||
|
|
6afd6d0aa0 | ||
|
|
59fe92eb04 | ||
|
|
0550f32434 | ||
|
|
b702cad549 | ||
|
|
aa5c4d3c5e | ||
|
|
6a99445d97 | ||
|
|
c9880ef47d | ||
|
|
c16452dfcb | ||
|
|
af802c02fc | ||
|
|
8028aafeff | ||
|
|
b7469062a1 | ||
|
|
33b707aa68 | ||
|
|
cd3a1bebff | ||
|
|
794dd5a797 | ||
|
|
a1465432e8 | ||
|
|
e1f8af0909 | ||
|
|
88918be329 | ||
|
|
a3fc1dbff0 | ||
|
|
626c9825cc | ||
|
|
c10a84fc79 | ||
|
|
f14e4fe197 | ||
|
|
6eb218db5e | ||
|
|
0e77e053b0 | ||
|
|
b9a4128a3d | ||
|
|
16f480e1f3 | ||
|
|
7c42511133 | ||
|
|
1b252a84c2 | ||
|
|
bf833cadff | ||
|
|
b6f872882a | ||
|
|
a18d6fb441 | ||
|
|
922e703e81 | ||
|
|
d7f5817b8b | ||
|
|
92a8a4bfa6 | ||
|
|
b480151fc3 | ||
|
|
37bdbc1bd5 | ||
|
|
8eb669139b | ||
|
|
b485e8cacc | ||
|
|
c4bab61c47 | ||
|
|
72be417ff1 | ||
|
|
9be483d7a6 | ||
|
|
910f2cee2c | ||
|
|
1e47ace527 | ||
|
|
912b06b145 | ||
|
|
87d878e287 | ||
|
|
be886d6bce | ||
|
|
0683deb47e | ||
|
|
114bb22e27 | ||
|
|
c327ebc3df | ||
|
|
92cbd1c69c | ||
|
|
7242515e48 | ||
|
|
401d1a0ac2 | ||
|
|
863e042a37 | ||
|
|
39e6c45ec6 | ||
|
|
0d364d18c7 | ||
|
|
61444ea390 | ||
|
|
106a935efb | ||
|
|
d175d8a853 | ||
|
|
ce6d19a77a | ||
|
|
0a29273924 | ||
|
|
5ede64de58 | ||
|
|
224c6ad798 | ||
|
|
57b3a0dbe7 | ||
|
|
f381f708e0 | ||
|
|
63bf149546 | ||
|
|
cb5e671259 | ||
|
|
3e38173c4e | ||
|
|
efacb643fc | ||
|
|
1bd153ea0b | ||
|
|
bac3dc5f4c | ||
|
|
959a853d77 | ||
|
|
90bbdd563b | ||
|
|
e3c6d05a0a | ||
|
|
930b3d4538 | ||
|
|
74b78141b4 | ||
|
|
aa1108cd5b | ||
|
|
f24b1a9db3 | ||
|
|
71b191e740 | ||
|
|
8f6341b903 | ||
|
|
161586db7e | ||
|
|
052262bef9 | ||
|
|
a5a7144707 | ||
|
|
d945e0426d | ||
|
|
926970c4eb | ||
|
|
cce36e0f28 | ||
|
|
48c6dc5be5 | ||
|
|
c641830825 | ||
|
|
eba16cc15d | ||
|
|
bd88b8411e | ||
|
|
fc121e8750 | ||
|
|
d4142fe56a | ||
|
|
f76a3e72bb | ||
|
|
2d400ae7eb | ||
|
|
edf1632cab | ||
|
|
a648f1ee67 | ||
|
|
d004e6e86c | ||
|
|
fa321d3e8d | ||
|
|
e1e53d323f | ||
|
|
ccb18ca302 | ||
|
|
e170f36bc6 | ||
|
|
4bd9cc51ee | ||
|
|
43ffbda1a4 | ||
|
|
8240485fd1 | ||
|
|
7f053c0567 | ||
|
|
d2922eb0b7 | ||
|
|
fec10d453f | ||
|
|
162040545d | ||
|
|
f14577f8bf | ||
|
|
e5720bd1be | ||
|
|
6d4959bac8 | ||
|
|
d668128a34 | ||
|
|
f2af38da4c | ||
|
|
4776d18fd7 | ||
|
|
cdd0be7b78 | ||
|
|
cd505abb22 | ||
|
|
28439c010f | ||
|
|
e85f43beb1 | ||
|
|
a06cbc0840 | ||
|
|
adef9728f8 | ||
|
|
ff1b688b6e | ||
|
|
3e7574a927 | ||
|
|
f852ea90ad | ||
|
|
d8f6247c32 | ||
|
|
9dc28393a5 | ||
|
|
c442c98ecf | ||
|
|
71e0109927 | ||
|
|
9c7dd5ed1c | ||
|
|
83620848f2 | ||
|
|
d548a5b4f3 | ||
|
|
b6e5307755 | ||
|
|
4c5dc5a145 | ||
|
|
69ed9172b8 | ||
|
|
68551ae176 | ||
|
|
c97d9d35ba | ||
|
|
e86cc97cdf | ||
|
|
9bff8608c1 | ||
|
|
a10fe6994a | ||
|
|
67e6a37b59 | ||
|
|
3075a56735 | ||
|
|
7e4a862cc3 | ||
|
|
ed2078ee3b | ||
|
|
f99c23a622 | ||
|
|
41e7317764 | ||
|
|
e0a78c2399 | ||
|
|
95ad39d2d4 | ||
|
|
b831f827b1 | ||
|
|
c5d8413d9c | ||
|
|
4648ea3424 | ||
|
|
e05bd6f231 | ||
|
|
caadee7901 | ||
|
|
18c524117d | ||
|
|
ad30fb8b04 | ||
|
|
a8077965a9 | ||
|
|
532ab85ebb | ||
|
|
546227eb37 | ||
|
|
7ec3b262d3 | ||
|
|
c435000d24 | ||
|
|
eaa60c281e | ||
|
|
cd7cf63144 | ||
|
|
6a704aa079 | ||
|
|
d6b5a1cec8 | ||
|
|
9a24ad31cc | ||
|
|
9331630b54 | ||
|
|
904e869d7f | ||
|
|
307fa4f5e6 | ||
|
|
131d16d3ea | ||
|
|
dbc54c45dd | ||
|
|
a96a84d509 | ||
|
|
3eb8863f67 | ||
|
|
8737ab077b | ||
|
|
50bb6a1d19 | ||
|
|
4181b75af7 | ||
|
|
620705c87a | ||
|
|
50b7b93529 | ||
|
|
6f18f6bd5c | ||
|
|
01d256eeee | ||
|
|
a1405412a8 | ||
|
|
58589b3a15 | ||
|
|
2983266fdf | ||
|
|
e33df8f12d | ||
|
|
0e0e8e9d18 | ||
|
|
37f8b54752 | ||
|
|
e9a086ad23 | ||
|
|
7c06a8ac41 | ||
|
|
70801d958e | ||
|
|
cf3f95c952 | ||
|
|
d708616a6a | ||
|
|
17711bc5c9 | ||
|
|
1e2474921b | ||
|
|
3f37b2b728 | ||
|
|
18b11df672 | ||
|
|
c34f2d4da7 | ||
|
|
d61792581a | ||
|
|
76d9a511b8 | ||
|
|
4248326697 | ||
|
|
a540b38151 | ||
|
|
8fb5ef0c1d | ||
|
|
2da4979e59 | ||
|
|
0146e4a1dd | ||
|
|
34bdb72ffd | ||
|
|
2ef7c63047 | ||
|
|
95f5417761 | ||
|
|
4922ec4499 | ||
|
|
20d947a199 | ||
|
|
c9444c5318 | ||
|
|
871dc90ee4 | ||
|
|
d1925945b4 | ||
|
|
6625080fde | ||
|
|
1110609e39 | ||
|
|
f21d2c7253 | ||
|
|
9c1d330945 | ||
|
|
cd7800056c | ||
|
|
7ff4bec3bc | ||
|
|
d305cf2167 | ||
|
|
e77b83bd92 | ||
|
|
171d58658a | ||
|
|
a6f6bc4c0a | ||
|
|
f03cffe3f8 | ||
|
|
809dca184e | ||
|
|
ecda226949 | ||
|
|
ff1b58ebd8 | ||
|
|
5760ada3b4 | ||
|
|
b74b6b3284 | ||
|
|
e4cc4b6f58 | ||
|
|
dd90851477 | ||
|
|
da9b127468 | ||
|
|
d6b05e44cb | ||
|
|
58c1b5b98d | ||
|
|
c270cba8d6 | ||
|
|
58f1f749fc | ||
|
|
38d87a7c8f | ||
|
|
4e13598708 | ||
|
|
4177448d32 | ||
|
|
e4911a6f82 | ||
|
|
159224700f | ||
|
|
696d4e7342 | ||
|
|
ffb6cfaa4a | ||
|
|
b8899fcafa | ||
|
|
aba829c991 | ||
|
|
8f4c61c259 | ||
|
|
a19648a6e8 | ||
|
|
d5c0f7045e | ||
|
|
6f69205818 | ||
|
|
8166da548c | ||
|
|
d54f7293b7 | ||
|
|
225520a765 | ||
|
|
af1eccde8e | ||
|
|
5d37280643 | ||
|
|
80597039f5 | ||
|
|
2766aedc01 | ||
|
|
da3e12cb7e | ||
|
|
8baff1b0d2 | ||
|
|
4ff5f9204e | ||
|
|
515339bbd8 | ||
|
|
943634b0e2 | ||
|
|
212b26b960 | ||
|
|
c0b41987aa | ||
|
|
b4ef640052 | ||
|
|
db6b7f52eb | ||
|
|
55b4b9e02a | ||
|
|
4e6ae93b13 | ||
|
|
c9a5fe5676 | ||
|
|
a5adfb7c7f | ||
|
|
1794b86041 | ||
|
|
f405124ce4 | ||
|
|
25060c1477 | ||
|
|
6ad218f354 | ||
|
|
d1c52548b0 | ||
|
|
9dc847b72f | ||
|
|
5b04adb21f | ||
|
|
356d25e548 | ||
|
|
a9958af818 | ||
|
|
fb359b7f87 | ||
|
|
7f087819a6 | ||
|
|
e836fa3d38 | ||
|
|
9a69f1108d | ||
|
|
2c5c58dc90 | ||
|
|
cb50d2838a | ||
|
|
aff7125914 | ||
|
|
45d82dce04 | ||
|
|
7a3b27227a | ||
|
|
7b50a19b2c | ||
|
|
741b942dea | ||
|
|
f7ca64a49d | ||
|
|
2f7b3455e5 | ||
|
|
1568dfc183 | ||
|
|
d3a5df0007 | ||
|
|
c20cac621a | ||
|
|
74560c3289 | ||
|
|
f94bf3f8ce | ||
|
|
d26db7096d | ||
|
|
afde0a7423 | ||
|
|
cc930a3ff9 | ||
|
|
60ecdadc74 | ||
|
|
82fc1850cf | ||
|
|
88f937f73e | ||
|
|
b3497c7306 | ||
|
|
366ab2e0cd | ||
|
|
98e4fabd2e | ||
|
|
716c3573fd | ||
|
|
842d8dd780 | ||
|
|
c767dfb22e | ||
|
|
f94901c3b2 | ||
|
|
c9638aefe9 | ||
|
|
8bd4721686 | ||
|
|
808f7504c3 | ||
|
|
8ea7d3d5e8 | ||
|
|
d4931890ae | ||
|
|
f4a879a452 | ||
|
|
78521ffdb4 | ||
|
|
8ea3f80b97 | ||
|
|
0d8d87857c | ||
|
|
3a3a261d9c | ||
|
|
2e00daf63c | ||
|
|
1b8bb0c1fd | ||
|
|
5c33579544 | ||
|
|
f8081ff09e | ||
|
|
01b7eeeecf | ||
|
|
d2f4c374a9 | ||
|
|
07073eebe9 | ||
|
|
590a4ae476 | ||
|
|
b553a81d47 | ||
|
|
7d4e53e413 | ||
|
|
839b0f6f5e | ||
|
|
893c5da4ef | ||
|
|
f9b893edfa | ||
|
|
b4fadb39bf | ||
|
|
310f8bf6f7 | ||
|
|
903a26a330 | ||
|
|
41ebd39810 | ||
|
|
281de5196e | ||
|
|
a9ab864cbb | ||
|
|
f3ff910821 | ||
|
|
ba5179f1e8 | ||
|
|
05e8f6ed78 | ||
|
|
23150815a0 | ||
|
|
a50f223fe3 | ||
|
|
9329345d98 | ||
|
|
c71c32b363 | ||
|
|
5590aa7234 | ||
|
|
4a3491e0b5 | ||
|
|
e8cb87ae3d | ||
|
|
2f6427af32 | ||
|
|
5564047001 | ||
|
|
22577c5f87 | ||
|
|
4dc2627da2 | ||
|
|
05aaf0de9f | ||
|
|
951bfa23f3 | ||
|
|
7ac6cfcf25 | ||
|
|
06055a7c4c | ||
|
|
b33198d1bf | ||
|
|
f826b9eb6e | ||
|
|
2b58121552 | ||
|
|
762547d0e9 | ||
|
|
727523eb3f | ||
|
|
5bbdb66eb2 | ||
|
|
c6eff4f90d | ||
|
|
2559173c2c | ||
|
|
8adea132ef | ||
|
|
9d924f8d1c | ||
|
|
1b297fed90 | ||
|
|
2c2a93c440 | ||
|
|
bb076cce5d | ||
|
|
b16b02c3f1 | ||
|
|
3e0f834796 | ||
|
|
0af38c6e0e | ||
|
|
85f7011e03 | ||
|
|
e8d5412e14 | ||
|
|
170cf4753e | ||
|
|
660e76145e | ||
|
|
31a6f7b621 | ||
|
|
f6699ad93b | ||
|
|
6e508e4454 | ||
|
|
2b101844e9 | ||
|
|
fb036935e6 | ||
|
|
c3e09ddab0 | ||
|
|
36ae07074d | ||
|
|
a4518ce261 | ||
|
|
861ea7ef94 | ||
|
|
541af0b77e | ||
|
|
3fd3de1828 | ||
|
|
3e2840ca15 | ||
|
|
839ec9a456 | ||
|
|
bac8bd0006 | ||
|
|
8c1b51b7e9 | ||
|
|
a71c4fe7ec | ||
|
|
b9d4197b5c | ||
|
|
ce7559087e | ||
|
|
110d87e512 | ||
|
|
cd817714cd | ||
|
|
23db345756 | ||
|
|
16990bd0c3 | ||
|
|
2e3b770bea | ||
|
|
28f62623bf | ||
|
|
c9f3e8cb9f | ||
|
|
6b751eb715 | ||
|
|
5d953da267 | ||
|
|
e87ae31a51 | ||
|
|
9f029b892b | ||
|
|
40a9ced0f7 | ||
|
|
87fbd7e5da | ||
|
|
bca5514a76 | ||
|
|
62ddbb20ac | ||
|
|
9d376961f4 | ||
|
|
e77aa00bcd | ||
|
|
465330820d | ||
|
|
ec9cbba67e | ||
|
|
8961ea6fc9 | ||
|
|
ca7ca9da81 | ||
|
|
2a234f14df | ||
|
|
3ff97bf628 | ||
|
|
416d6f2aef | ||
|
|
ecaafaca69 | ||
|
|
fdb14cd49b | ||
|
|
070e955b89 | ||
|
|
9390ab3c6c | ||
|
|
f67221ee01 | ||
|
|
e09294d9aa | ||
|
|
5675acb71a | ||
|
|
0305a5dcef | ||
|
|
5f03340454 | ||
|
|
0f69ba46c5 | ||
|
|
71ecb6bd4e | ||
|
|
2b712cc808 | ||
|
|
3a68b7b554 | ||
|
|
e41727a1fc | ||
|
|
857d0f3316 | ||
|
|
1f68f62689 | ||
|
|
09b43a8e95 | ||
|
|
b8d765d229 | ||
|
|
06a919ff8d | ||
|
|
ea1e7769b1 | ||
|
|
d5e6f99819 | ||
|
|
a5ab9726dd | ||
|
|
6464fc56d8 | ||
|
|
156e1b928c | ||
|
|
edf17b8100 | ||
|
|
5ab980ce1a | ||
|
|
f1d80fadc4 | ||
|
|
d331d48ca2 | ||
|
|
e740db11ed | ||
|
|
6cff7b3c30 | ||
|
|
88cdd2fcbf | ||
|
|
55896be694 | ||
|
|
c4f17e42e1 | ||
|
|
e8b11bd42a | ||
|
|
a566fb3988 | ||
|
|
de071b37eb | ||
|
|
7b4d408733 | ||
|
|
06478d89ea | ||
|
|
7cedf4c620 | ||
|
|
ef1ea5eeee | ||
|
|
96f222db94 | ||
|
|
065eb9b878 | ||
|
|
ed583d80a3 | ||
|
|
7752db3916 | ||
|
|
e18254e4d8 | ||
|
|
555fc97e8f | ||
|
|
f135adfdba | ||
|
|
72b766f32a | ||
|
|
5278861ccd | ||
|
|
ebcf88070c | ||
|
|
273811bbb8 | ||
|
|
26b53e725d | ||
|
|
5434ec85e2 | ||
|
|
91f438aeff | ||
|
|
501f67ebe7 | ||
|
|
be52fef0bb | ||
|
|
2c0cf40a15 | ||
|
|
8566070d9b | ||
|
|
8f4118a6b8 | ||
|
|
54c53f0b56 | ||
|
|
eafcee8c67 | ||
|
|
5c8e1e0f4a | ||
|
|
76043d5876 | ||
|
|
936f3b0752 | ||
|
|
9380608781 | ||
|
|
544b75bcd5 | ||
|
|
2ae63d2323 | ||
|
|
f24717a3a3 | ||
|
|
f0f5558f3e | ||
|
|
3d8c732258 | ||
|
|
f312237bd5 | ||
|
|
952dde3fef | ||
|
|
e5387f6d06 | ||
|
|
93d6697b4e | ||
|
|
bad2f3415a | ||
|
|
d2f5d97282 | ||
|
|
f8c3fef839 | ||
|
|
14b47a929f | ||
|
|
4b3c0466eb | ||
|
|
041397b137 | ||
|
|
6548c286a6 | ||
|
|
ccf78285b6 | ||
|
|
5e9366fa92 | ||
|
|
0e30cb1439 | ||
|
|
b8d86518e7 | ||
|
|
725399ac7c | ||
|
|
ca18994092 | ||
|
|
caefc438b9 | ||
|
|
0ece8c7dec | ||
|
|
e7c42f3623 | ||
|
|
18faf89b89 | ||
|
|
3a750ae6a2 | ||
|
|
48c614d8c3 | ||
|
|
c37d502c27 | ||
|
|
3fed7a081d | ||
|
|
e75497d03b | ||
|
|
6d1421f1b7 | ||
|
|
dd210be037 | ||
|
|
7c7d6ad548 | ||
|
|
2f471c0e3f | ||
|
|
cff219674f | ||
|
|
e35f9eb75b | ||
|
|
ef1eff2ecb | ||
|
|
244ff61fb3 | ||
|
|
50e2623f19 | ||
|
|
fd0b997c13 | ||
|
|
13d057e4f7 | ||
|
|
d1a6be6ca6 | ||
|
|
edece02c13 | ||
|
|
d68cf4e44d | ||
|
|
9d85a58634 | ||
|
|
c4a4cd0957 | ||
|
|
5af7615054 | ||
|
|
a68a1334fc | ||
|
|
dd3e38355c | ||
|
|
890461bcf8 | ||
|
|
750265cb79 | ||
|
|
004de824ba | ||
|
|
fc43b35628 | ||
|
|
696653f945 | ||
|
|
157dca50e9 | ||
|
|
7d2130b229 | ||
|
|
2cc81211af | ||
|
|
ea9a5b0eb0 | ||
|
|
e60cee6a73 | ||
|
|
a3ee60a464 | ||
|
|
28595cbeb3 | ||
|
|
dbdbf5210e | ||
|
|
a4876f6f14 | ||
|
|
9835ae7e50 | ||
|
|
59f763162c | ||
|
|
a9412b418f | ||
|
|
742c5b76fe | ||
|
|
7a85fc0179 | ||
|
|
73e73ffe58 | ||
|
|
3c5523894d | ||
|
|
4b9c76d3db | ||
|
|
0a694eea8a | ||
|
|
87f48dad79 | ||
|
|
68ef50ca46 | ||
|
|
8b1da33ffe | ||
|
|
9a9b18a3ef | ||
|
|
83f69d89ff | ||
|
|
0bd7d23114 | ||
|
|
9b860a6aa6 | ||
|
|
4812519a4c | ||
|
|
f3ce6ad467 | ||
|
|
78d9b48854 | ||
|
|
b37d0eba04 | ||
|
|
5289b3f54c | ||
|
|
5c08fe0611 | ||
|
|
4bc9b70882 | ||
|
|
3f98f9ff39 | ||
|
|
e78a7bfbf1 | ||
|
|
b8b1412bf8 | ||
|
|
a81d66ace3 | ||
|
|
dcfd72b7e7 | ||
|
|
6467db4a21 | ||
|
|
f2570c97f3 | ||
|
|
98ad518b5d | ||
|
|
7a5e17a345 | ||
|
|
fde257c722 | ||
|
|
97357f082d | ||
|
|
6875bd82fc | ||
|
|
b1f6cad741 | ||
|
|
fb28fec60d | ||
|
|
500130be59 | ||
|
|
101173c87c | ||
|
|
4fb1b0dbd1 | ||
|
|
4270d5e8ec | ||
|
|
fe9f1146ce | ||
|
|
6fce43a122 | ||
|
|
a8a8f9b3e5 | ||
|
|
0dd0125e9f | ||
|
|
d3d97b5924 | ||
|
|
c8462fb50b | ||
|
|
c99ca9edcc | ||
|
|
fc7e96feb9 | ||
|
|
31dd7be296 | ||
|
|
2899373e42 | ||
|
|
7640c3d0ef | ||
|
|
af7772f617 | ||
|
|
a1670caf06 | ||
|
|
61e35b9773 | ||
|
|
e4671ffdb3 | ||
|
|
3035f923cb | ||
|
|
97e83def48 | ||
|
|
ba31deaebf | ||
|
|
bd571dc93d | ||
|
|
c1da8321ac | ||
|
|
0a1972b854 | ||
|
|
96f387e90b | ||
|
|
e034fc1019 | ||
|
|
d539912762 | ||
|
|
85b72af3bb | ||
|
|
3004f4b583 | ||
|
|
78dbd7eacd | ||
|
|
add73e6f16 | ||
|
|
2c5a7d103d | ||
|
|
f8f855d5d2 | ||
|
|
f2c109116c | ||
|
|
41c63fab96 | ||
|
|
de94651fca | ||
|
|
611c468b70 | ||
|
|
fd2207e39e | ||
|
|
10564442e2 | ||
|
|
a44307ca2d | ||
|
|
cfea2ed954 | ||
|
|
62e59605ed | ||
|
|
2644b1b7ac | ||
|
|
6e4c6d0c54 | ||
|
|
2b7d950a9f | ||
|
|
5ece8d67f9 | ||
|
|
8511b67811 | ||
|
|
a0a444e476 | ||
|
|
6fec92926d | ||
|
|
2cbefb261b | ||
|
|
4bebbb158c | ||
|
|
8fe2172c0a | ||
|
|
f52ef2d57e | ||
|
|
3f1c005548 | ||
|
|
821bd2b2d8 | ||
|
|
d8405feab3 | ||
|
|
bd94437c05 | ||
|
|
b290bdb473 | ||
|
|
f8e2af4fd4 | ||
|
|
97c8dfa5b9 | ||
|
|
37cce68e2e | ||
|
|
1f87a71b98 | ||
|
|
5511ea1887 | ||
|
|
e371081a1d | ||
|
|
70816b48e8 | ||
|
|
2c9fc7b4a7 | ||
|
|
3bb4652a49 | ||
|
|
d5f8e01dd8 | ||
|
|
27e0517f9a | ||
|
|
f59aeda28e | ||
|
|
a8a69f8c36 | ||
|
|
4ae6b8328e | ||
|
|
6d4337e4ce | ||
|
|
3df928caf4 | ||
|
|
faeb33fdc0 | ||
|
|
bacdeb20eb | ||
|
|
781c426b2f | ||
|
|
d5c9fb8dec | ||
|
|
78c372b9d8 | ||
|
|
ea31069609 | ||
|
|
3f9a3e8f64 | ||
|
|
2f02715efd | ||
|
|
c94fa64a33 | ||
|
|
e2cb666b3c | ||
|
|
9f24e0145b | ||
|
|
41413471aa | ||
|
|
f8a11166f0 | ||
|
|
27517b3b47 | ||
|
|
834c0d92b4 | ||
|
|
e04215f0e1 | ||
|
|
9fa8d98ae8 | ||
|
|
31621f273b | ||
|
|
41f158dac1 | ||
|
|
e5687f3a7c | ||
|
|
1a5b684e1f | ||
|
|
bf70c487ca | ||
|
|
4e1d34ba77 | ||
|
|
3a75ad61f3 | ||
|
|
c7db9ef481 | ||
|
|
fb709c9eb0 | ||
|
|
dfe4d2811a | ||
|
|
6e4d16749b | ||
|
|
75b2debf0a | ||
|
|
ba9e124527 | ||
|
|
d684ab0e5e | ||
|
|
2e8205f458 | ||
|
|
35855297eb | ||
|
|
d365ecce46 | ||
|
|
f4edc45507 | ||
|
|
d165d81df0 | ||
|
|
ba0eba7132 | ||
|
|
2b7f4281c2 | ||
|
|
0046575a4f | ||
|
|
58b88d66be | ||
|
|
57f1019e51 | ||
|
|
b40168182a | ||
|
|
0ece662d8c | ||
|
|
9265e52d68 | ||
|
|
3a04166747 | ||
|
|
75bf58359c | ||
|
|
e7f63e0460 | ||
|
|
1fdd1c6e88 | ||
|
|
391b9e91e9 | ||
|
|
1e67ca3794 | ||
|
|
ceebf6dbe1 | ||
|
|
8d4f9fd953 | ||
|
|
1c3032068e | ||
|
|
7b4b72166f | ||
|
|
707e5bb8b0 | ||
|
|
ad5d364c57 | ||
|
|
138fadf672 | ||
|
|
82eabc41fe | ||
|
|
3e6aab6b00 | ||
|
|
5396b3f1fb | ||
|
|
b1ba887922 | ||
|
|
93a1c593fe | ||
|
|
b7044248cb | ||
|
|
ea5e2f660b | ||
|
|
e9779a3d2f | ||
|
|
1c6ec0f8e3 | ||
|
|
84bd81e525 | ||
|
|
a84cbee9db | ||
|
|
97b16c8c0c | ||
|
|
0a6a35b022 | ||
|
|
6565b4101b | ||
|
|
fbbcc1172d | ||
|
|
53dc50c0dd | ||
|
|
7b56485c74 | ||
|
|
cfc9b809fc | ||
|
|
4015e2566e | ||
|
|
1d474a967c | ||
|
|
bffc34485a | ||
|
|
3bf22a8606 | ||
|
|
257ffa3cc4 | ||
|
|
0c104d5d29 | ||
|
|
2a59faec17 | ||
|
|
00534f7edd | ||
|
|
4006f03444 | ||
|
|
beca5c6e45 | ||
|
|
69f781d3de | ||
|
|
3f3160406f | ||
|
|
8067cff9bd | ||
|
|
7d776bb2af | ||
|
|
880bb0d7cb | ||
|
|
3aea01fb78 | ||
|
|
7025f4701d | ||
|
|
9d98b06132 | ||
|
|
47cb83c1ff | ||
|
|
6ff8847251 | ||
|
|
9d9367d127 | ||
|
|
ae7c1ae666 | ||
|
|
44fe3cb7bd | ||
|
|
bc783eb511 | ||
|
|
0491bd5364 | ||
|
|
cf47cccc97 | ||
|
|
c65ab35107 | ||
|
|
b8ea16f4d4 | ||
|
|
b40b5f0c1c | ||
|
|
b193e29fdb | ||
|
|
1b602c134f | ||
|
|
e462c6d412 | ||
|
|
d0c83f3c96 | ||
|
|
0547aa2095 | ||
|
|
322907b972 | ||
|
|
189b9a7ad6 | ||
|
|
1d02927f6b | ||
|
|
2ad739419a | ||
|
|
093ace1a89 | ||
|
|
4c982a762b | ||
|
|
a30efd6e81 | ||
|
|
1c0fc0bff2 | ||
|
|
7da0c204df | ||
|
|
a35421d8ab | ||
|
|
450ce53dcf | ||
|
|
e80ccfcb19 | ||
|
|
9ad612bd78 | ||
|
|
288857999f | ||
|
|
217823652c | ||
|
|
268e1670c7 | ||
|
|
ce7b155f72 | ||
|
|
2a71d84580 | ||
|
|
8f73dce934 | ||
|
|
5953e32988 | ||
|
|
df74322b05 | ||
|
|
22d941ae45 | ||
|
|
4fd7c1c4e9 | ||
|
|
ee1aa6d42c | ||
|
|
1343aba26e | ||
|
|
1483d84d8c | ||
|
|
02d58d66c9 | ||
|
|
2eb6ca28f7 | ||
|
|
7575a9ce02 | ||
|
|
039b832be2 | ||
|
|
e0ed025507 | ||
|
|
f2bd08f02a | ||
|
|
63314b54bc | ||
|
|
65165cd15f | ||
|
|
d5ddbca067 | ||
|
|
517027e1fe | ||
|
|
b843ccc898 | ||
|
|
fffd81267d | ||
|
|
7d26dd5348 | ||
|
|
a4d3189dac | ||
|
|
ec02743f83 | ||
|
|
10e807751a | ||
|
|
a8e827b5e2 | ||
|
|
f0eaba5857 | ||
|
|
7516b056a5 | ||
|
|
312c3b8295 | ||
|
|
0a777dc909 | ||
|
|
ec24376608 | ||
|
|
c9f45da217 | ||
|
|
34cfbabf51 | ||
|
|
f7e7a4c99c | ||
|
|
58c318b5cf | ||
|
|
10b1644d8d | ||
|
|
599f59fc39 | ||
|
|
da4b8f6cb9 | ||
|
|
5f2e882ed9 | ||
|
|
f20abe8878 | ||
|
|
a6ab37f21c | ||
|
|
13fc3ee25e | ||
|
|
2268086eac | ||
|
|
9e9dec5389 | ||
|
|
11d193a6dd | ||
|
|
f81207737c | ||
|
|
191c25a26b | ||
|
|
9c7727b7f3 | ||
|
|
8bea9b8312 | ||
|
|
805a063fa1 | ||
|
|
20a1cc89ae | ||
|
|
963994b1e5 | ||
|
|
afcb226111 | ||
|
|
5b246fe44c | ||
|
|
d79f82e9b8 | ||
|
|
bdd9dc8c9d | ||
|
|
8bdd24aa1e | ||
|
|
13c0da5c8a | ||
|
|
d31cfb15db | ||
|
|
8453bd3c26 | ||
|
|
457bf311c3 | ||
|
|
ea2ec9ef54 | ||
|
|
d0c84ea469 | ||
|
|
cdec56b661 | ||
|
|
8bc2d7cb05 | ||
|
|
21f3de0a18 | ||
|
|
65b497c9f1 | ||
|
|
f37f1e794e | ||
|
|
0096a40132 | ||
|
|
b6b9b67836 | ||
|
|
2b80a98a96 | ||
|
|
8c5d47bfa0 | ||
|
|
00c0a0505f | ||
|
|
01ba8b4f3f | ||
|
|
919249215b | ||
|
|
a62394a67c | ||
|
|
332fff279b | ||
|
|
27df4c435f | ||
|
|
a9998ebca7 | ||
|
|
82a8baabef | ||
|
|
2af6d4ef29 | ||
|
|
c2526c1e2d | ||
|
|
6021fa721e | ||
|
|
0bd59dc0f8 | ||
|
|
1af0c34ac0 | ||
|
|
77f5b6d0c8 | ||
|
|
cb3fdf1112 | ||
|
|
482d3d9188 | ||
|
|
bb4c64f478 | ||
|
|
a9d6e42add | ||
|
|
5fa6cf8eca | ||
|
|
7c0de7b634 | ||
|
|
691f3238c5 | ||
|
|
43163c787d | ||
|
|
a86693d950 | ||
|
|
6388129e27 | ||
|
|
7788806a8d | ||
|
|
30037dad83 | ||
|
|
d49c7d5e45 | ||
|
|
502109cdcb | ||
|
|
3de775a163 | ||
|
|
d4de917895 | ||
|
|
35cb718f1f | ||
|
|
60a72f4d45 | ||
|
|
6ae536d035 | ||
|
|
23daa7a91c | ||
|
|
771f93b5fa | ||
|
|
19826636c7 | ||
|
|
57ba9b52ba | ||
|
|
38c0d9bbc3 | ||
|
|
5fb3e0b941 | ||
|
|
9aa09d138a | ||
|
|
f48efcc02d | ||
|
|
1703e9e8c6 | ||
|
|
940cf02935 | ||
|
|
355aefc62a | ||
|
|
0c0c9b2dad | ||
|
|
d3df844917 | ||
|
|
e227f1f182 | ||
|
|
f97b49bc53 | ||
|
|
788b6def6c | ||
|
|
8550707485 | ||
|
|
aa8dfa1c87 | ||
|
|
7b68dd0f47 | ||
|
|
f4c9c880bc | ||
|
|
cac3e6efec | ||
|
|
d76786e344 | ||
|
|
171b967cc4 | ||
|
|
b5766494e1 | ||
|
|
b72af50a85 | ||
|
|
63b66fe301 | ||
|
|
244cb79774 | ||
|
|
8d20b7d19f | ||
|
|
dc9da0b866 | ||
|
|
3b72a9751c | ||
|
|
bb3cb23ee0 | ||
|
|
737436d7e7 | ||
|
|
bccfa79bb6 | ||
|
|
6bf5c58ec1 | ||
|
|
151230098c | ||
|
|
5debd8e115 | ||
|
|
83633536db | ||
|
|
c187d902d2 | ||
|
|
cf4cc37f66 | ||
|
|
5205839e18 | ||
|
|
1e05b0a659 | ||
|
|
f6b52592fd | ||
|
|
ae8e46e024 | ||
|
|
89df96ffd5 | ||
|
|
a8a3cf729f | ||
|
|
3d14ca302f | ||
|
|
0ba040a28c | ||
|
|
69b775a49d | ||
|
|
93895f3d6f | ||
|
|
8103c26ca8 | ||
|
|
825abf82e6 | ||
|
|
e2547c7295 | ||
|
|
359557e321 | ||
|
|
94cccf9e17 | ||
|
|
13e4c2de03 | ||
|
|
844d7025fa | ||
|
|
0f01f35d19 | ||
|
|
505c219cfd | ||
|
|
c40d745a3a | ||
|
|
13ee14c752 | ||
|
|
1d1e488755 | ||
|
|
d9537e5fd4 | ||
|
|
5fc5497a9e | ||
|
|
fd70df0f43 | ||
|
|
c16d47473d | ||
|
|
f5e2300460 | ||
|
|
73a3e8d498 | ||
|
|
bb38b93927 | ||
|
|
979f2c7dac | ||
|
|
808b774ad1 | ||
|
|
38ce62185e | ||
|
|
ac4e411d41 | ||
|
|
fdc784f42d | ||
|
|
edcaf585ea | ||
|
|
cdafe7e5f2 | ||
|
|
40cfe63b6f | ||
|
|
2fee584da9 | ||
|
|
8b1d8d6d71 | ||
|
|
f63b61681f | ||
|
|
de4cea86da | ||
|
|
c0ca84f347 | ||
|
|
9c5a2c79f5 | ||
|
|
8359746f47 | ||
|
|
516393856d | ||
|
|
e7e57414b5 | ||
|
|
687669330d | ||
|
|
d3147d3969 | ||
|
|
ca8b7911a6 | ||
|
|
3d23a13c34 | ||
|
|
cf8a104183 | ||
|
|
bd7aa7884a | ||
|
|
f2db514e45 | ||
|
|
d35801dcc7 | ||
|
|
50f9e025c4 | ||
|
|
09fa3ce438 | ||
|
|
bcf89b1f09 | ||
|
|
645a1d35e8 | ||
|
|
1154eff459 | ||
|
|
f6dcc4bb1f | ||
|
|
babfcb6108 | ||
|
|
07a2e2fa26 | ||
|
|
d6ffafb640 | ||
|
|
3cc0be7e72 | ||
|
|
a6bd3eed52 | ||
|
|
ac2128dcde | ||
|
|
6c8cf8e327 | ||
|
|
920788febb | ||
|
|
07a803a687 | ||
|
|
1f1d84d7c8 | ||
|
|
a093fc1285 | ||
|
|
e76c563471 | ||
|
|
fa6388ee6b | ||
|
|
fe2e5bc82e | ||
|
|
e361cb0113 | ||
|
|
a12875fde3 | ||
|
|
fed8b1be3e | ||
|
|
b3b94bfb3f | ||
|
|
8e4308bea8 | ||
|
|
86736c289b | ||
|
|
49149643ef | ||
|
|
c21cd4b18f | ||
|
|
d3dd1c3afc | ||
|
|
969876e87b | ||
|
|
846f63a708 | ||
|
|
91fcf4bd72 | ||
|
|
f62462fcc5 | ||
|
|
d2192c4772 | ||
|
|
4d8952d3ee | ||
|
|
0f36ea7b58 | ||
|
|
4556f81ed8 | ||
|
|
d59e8ea2df | ||
|
|
eec3a679aa | ||
|
|
098a6025a8 | ||
|
|
cdd1c34bc2 | ||
|
|
cd90b53627 | ||
|
|
d16de0d2fb | ||
|
|
1406e54894 | ||
|
|
0618694220 | ||
|
|
56c86bde30 | ||
|
|
93dc48c22c | ||
|
|
9309f25126 | ||
|
|
f22adf3cc8 | ||
|
|
bee7ec0cc7 | ||
|
|
8d19fae16a | ||
|
|
b8a51083f8 | ||
|
|
9baecaba86 | ||
|
|
d8de4da059 | ||
|
|
302fc2c832 | ||
|
|
e552be8634 | ||
|
|
425ed5a3f4 | ||
|
|
07021ae760 | ||
|
|
9e06944fe7 | ||
|
|
707ccf2d21 | ||
|
|
569b3f5e56 | ||
|
|
f0812d74d6 | ||
|
|
13a5addc43 | ||
|
|
2fc926861f | ||
|
|
b6f76c5194 | ||
|
|
51cd639671 | ||
|
|
35362fbc9b | ||
|
|
2b5858f81a | ||
|
|
8290100b80 | ||
|
|
578e2d3928 | ||
|
|
4e5f320777 | ||
|
|
6b64928a4c | ||
|
|
7f95674113 | ||
|
|
f47d082a0d | ||
|
|
a68a81b339 | ||
|
|
e0cf8026ef | ||
|
|
a1db648318 | ||
|
|
81ad7eac62 | ||
|
|
6c9913abaa | ||
|
|
e84af5af96 | ||
|
|
e574667651 | ||
|
|
4944bc4bca | ||
|
|
c09c5e588a | ||
|
|
893b072454 | ||
|
|
ba971e4a67 | ||
|
|
82be1df5bf | ||
|
|
abf5227b47 | ||
|
|
0d3e39c479 | ||
|
|
d16bc83af0 | ||
|
|
79a246217a | ||
|
|
4ea718b662 | ||
|
|
41e5089ab3 | ||
|
|
db86ae627f | ||
|
|
576fa40c1a | ||
|
|
8287d5e400 | ||
|
|
2e030f87a5 | ||
|
|
4793bad92f | ||
|
|
0c35aefbe2 | ||
|
|
7a2390c025 | ||
|
|
bf3dd2ae88 | ||
|
|
e5b0cb724b | ||
|
|
f7b520eb30 | ||
|
|
4ad0782e59 | ||
|
|
0755f171ad | ||
|
|
48796ec970 | ||
|
|
e8d32835d8 | ||
|
|
56b6864b2c | ||
|
|
06be55514c | ||
|
|
183438d2b5 | ||
|
|
5208a912a2 | ||
|
|
9f0d8e91ba | ||
|
|
5dbbfe4612 | ||
|
|
f0eb8945e0 | ||
|
|
d14a1449a3 | ||
|
|
b5d0ba1220 | ||
|
|
436fb24e9f | ||
|
|
df64bd1e84 | ||
|
|
9457df9378 | ||
|
|
f7ed9c3eda | ||
|
|
de1a1c923a | ||
|
|
dec02f2456 | ||
|
|
98ba5c7d9a | ||
|
|
defc92ee23 | ||
|
|
e9c435c892 | ||
|
|
de90a314d6 | ||
|
|
007eb84d22 | ||
|
|
c640fd6df8 | ||
|
|
1b41b44a15 | ||
|
|
9316e68302 | ||
|
|
89fce420fa | ||
|
|
a47b060478 | ||
|
|
811935f1cd | ||
|
|
6712c8136f | ||
|
|
2501cb170f | ||
|
|
3179f2d72c | ||
|
|
9692c0c683 | ||
|
|
2deff70218 | ||
|
|
5aee12f543 | ||
|
|
8a4ec82c4c | ||
|
|
11201326fd | ||
|
|
328c772d35 | ||
|
|
3f9fd6596d | ||
|
|
0253b2795e | ||
|
|
b25376a790 | ||
|
|
01f3f44369 | ||
|
|
a3e8d64d4e | ||
|
|
2ee1250ccc | ||
|
|
86b1c82384 | ||
|
|
a156ec942b | ||
|
|
48eb8badec | ||
|
|
2521f05526 | ||
|
|
618db79f6b | ||
|
|
3089ce8ad6 | ||
|
|
dd6021e96a | ||
|
|
79bf9016a3 | ||
|
|
202716e28c | ||
|
|
8c5e23f773 | ||
|
|
bf9374bf6e | ||
|
|
2087574363 | ||
|
|
4765cbcfd4 | ||
|
|
a48c23d169 | ||
|
|
03982d4ad2 | ||
|
|
e531a35f37 | ||
|
|
a8a5864ff0 | ||
|
|
ee9ce66293 | ||
|
|
a11b87a923 | ||
|
|
e3cd01aa2e | ||
|
|
bf92943a6a | ||
|
|
8d2c2cd62d | ||
|
|
029f24b079 | ||
|
|
d9ca29b602 | ||
|
|
ddcfc127b7 | ||
|
|
0659691a72 | ||
|
|
4e7c8d8b1e | ||
|
|
f477c03281 | ||
|
|
362d4a5a0d | ||
|
|
42ad78df58 | ||
|
|
fef3ffd996 | ||
|
|
a5f824c778 | ||
|
|
4f5bb563e8 | ||
|
|
053ba471a6 | ||
|
|
066cd407a9 | ||
|
|
b418dd8d12 | ||
|
|
1be73d8a4c | ||
|
|
aff282d31e | ||
|
|
576a4fc2e5 | ||
|
|
e73356c8da | ||
|
|
0ffe2d8811 | ||
|
|
c90011fc27 | ||
|
|
891fb15290 | ||
|
|
903297a1e9 | ||
|
|
59788faefd | ||
|
|
f5a6ca18f0 | ||
|
|
30690304bb | ||
|
|
144777da58 | ||
|
|
28a206c7ed | ||
|
|
72d29a293c | ||
|
|
561b43fa13 | ||
|
|
1e9dc89da1 | ||
|
|
b4d1b9aa05 | ||
|
|
77be448b41 | ||
|
|
1ff2749c9b | ||
|
|
e5fb21daf6 | ||
|
|
c1ceea084b | ||
|
|
9f4b55ce07 | ||
|
|
01b7c42851 | ||
|
|
f0221f6e43 | ||
|
|
30bbdb0f1d | ||
|
|
a6f0bc78d4 | ||
|
|
ceb6a88964 | ||
|
|
a39fff8b3a | ||
|
|
0cf3d5993c | ||
|
|
2966484cda | ||
|
|
ac3bb58106 | ||
|
|
36e2f1bdee | ||
|
|
70083bd870 | ||
|
|
f7b39fca26 | ||
|
|
70873e83bd | ||
|
|
2858bba8b2 | ||
|
|
bd0404fbaf | ||
|
|
317f6256f6 | ||
|
|
6c9b738717 | ||
|
|
2f8c584af5 | ||
|
|
d3b417679e | ||
|
|
00dd8bfc72 | ||
|
|
e1eea4adf3 | ||
|
|
fd2d2e90d4 | ||
|
|
f97b70ce45 | ||
|
|
45d79478fb | ||
|
|
a59f42bd62 | ||
|
|
a189fa7b6d | ||
|
|
794bc97207 | ||
|
|
24f7def7ab | ||
|
|
01071c236e | ||
|
|
a6326ac9fa | ||
|
|
4c6d409be8 | ||
|
|
44ad8e51a5 | ||
|
|
e82578adfb | ||
|
|
24f28b559e | ||
|
|
b086a5d3d2 | ||
|
|
bb0b87b770 | ||
|
|
aa4f82fa98 | ||
|
|
873ace4170 | ||
|
|
5a9d8ba0a7 | ||
|
|
07f0fdcc1c | ||
|
|
ff7ee4fb98 | ||
|
|
b1f5b62757 | ||
|
|
a67c857204 | ||
|
|
4032c53a30 | ||
|
|
0a37ed74d9 | ||
|
|
f07efe440a | ||
|
|
2d5e67802d | ||
|
|
7b8e013084 | ||
|
|
b69fc04b5c | ||
|
|
b6dfdd4741 | ||
|
|
ff3985a542 | ||
|
|
9c7e1dcaf1 | ||
|
|
48eb09687c | ||
|
|
86b339535d | ||
|
|
576b6dc774 | ||
|
|
18ca971f67 | ||
|
|
3916a5e6e8 | ||
|
|
1446fdad5e | ||
|
|
1478886e04 | ||
|
|
54d61790a9 | ||
|
|
bb638fd8db | ||
|
|
e3a2589517 | ||
|
|
6f557a6463 | ||
|
|
323f27f6e4 | ||
|
|
8d4a38dccb | ||
|
|
54a3b30e83 | ||
|
|
6251bcd8fd | ||
|
|
e42099c1a9 | ||
|
|
b07ee91cf9 | ||
|
|
62c028fc3c | ||
|
|
07ea575b0f | ||
|
|
ee78786974 | ||
|
|
e1814663cd | ||
|
|
6ae3e019ff | ||
|
|
cadf539c3d | ||
|
|
51929d7ef7 | ||
|
|
0edc7f077f | ||
|
|
2488cee7ea | ||
|
|
edf64db69a | ||
|
|
c65bf51dcd | ||
|
|
effe235a95 | ||
|
|
583d1494c2 | ||
|
|
983daf0d1c | ||
|
|
756ddf1a8b | ||
|
|
9ccd647d97 | ||
|
|
dc9bfdc553 | ||
|
|
af4e91faba | ||
|
|
394020157b | ||
|
|
f16aab12e1 | ||
|
|
e08216d6dd | ||
|
|
ebb4f8e73e | ||
|
|
b9939e5d5f | ||
|
|
9eb3bca8d6 | ||
|
|
022f263bf9 | ||
|
|
56972652d5 | ||
|
|
d75b9e2688 | ||
|
|
d2c5440e39 | ||
|
|
8ff30e426e | ||
|
|
7cdbef609e | ||
|
|
f6195a468d | ||
|
|
c23bf72d55 | ||
|
|
c02441402b | ||
|
|
b9a8764b55 | ||
|
|
a2374c1981 | ||
|
|
9cfd5af704 | ||
|
|
a6f473b8ed | ||
|
|
e0a74402cb | ||
|
|
c6e57b278e | ||
|
|
e63f1f8f09 | ||
|
|
e866c019f0 | ||
|
|
5f4bd6d3e3 | ||
|
|
57da9c9885 | ||
|
|
e6a3acf4c2 | ||
|
|
537869e862 | ||
|
|
ae2ff7b3b1 | ||
|
|
1db01dbdb1 | ||
|
|
7988438dc7 | ||
|
|
3b32823f94 | ||
|
|
3370c754f2 | ||
|
|
2d84e5a611 | ||
|
|
8d5f73849e | ||
|
|
7a5019164a | ||
|
|
f5733ea2d7 | ||
|
|
413287c691 | ||
|
|
9e941dfce2 | ||
|
|
d32af771dc | ||
|
|
1c84f40bcf | ||
|
|
671eba22e0 | ||
|
|
c00cb3076c | ||
|
|
62daa13e54 | ||
|
|
4cc0a66a7d | ||
|
|
92e13220d8 | ||
|
|
2a5fdd852a | ||
|
|
7759fd862f | ||
|
|
ca5dd0ac30 | ||
|
|
18be29fd88 | ||
|
|
6ea54a5b0a | ||
|
|
5d294f6236 | ||
|
|
5544b6291b | ||
|
|
bf4841bca4 | ||
|
|
358a641449 | ||
|
|
7e1ceb69ae | ||
|
|
939f04ae62 | ||
|
|
2fc2ac491c | ||
|
|
20a5a50516 | ||
|
|
0932f4c537 | ||
|
|
c46c9a4e16 | ||
|
|
a20b4b3339 | ||
|
|
dc302f89c7 | ||
|
|
f5a2d142e2 | ||
|
|
1020a5820b | ||
|
|
deb13505b8 | ||
|
|
71c06e31f7 | ||
|
|
a203480a72 | ||
|
|
c0fcd681be | ||
|
|
7402bb6823 | ||
|
|
35d791bee4 | ||
|
|
ad4a599800 | ||
|
|
33db85f03b | ||
|
|
ec5d05fc26 | ||
|
|
face7ecdb5 | ||
|
|
6035319035 | ||
|
|
e698da71fb | ||
|
|
b466de781a | ||
|
|
e5d583310d | ||
|
|
f72dbf19c2 | ||
|
|
10538a04b4 | ||
|
|
d71452a397 | ||
|
|
3f45bfcdd0 | ||
|
|
545e9863b6 | ||
|
|
a37f2a5240 | ||
|
|
d6b4c0a96b | ||
|
|
d56e917b3f | ||
|
|
860c811504 | ||
|
|
c93e8c35ec | ||
|
|
5278e5da0c | ||
|
|
e7e3c307fc | ||
|
|
e9af85038e | ||
|
|
bf04721e36 | ||
|
|
a810dc4204 | ||
|
|
faad82fc34 | ||
|
|
b8ae53db7d | ||
|
|
1571295ab6 | ||
|
|
d3cc3a92c1 | ||
|
|
381dc6a535 | ||
|
|
6b9df571af | ||
|
|
897547371e | ||
|
|
bf85a922ca | ||
|
|
00525f6b81 | ||
|
|
6dd27eb34f | ||
|
|
0b30386fee | ||
|
|
1f7f0ea8a2 | ||
|
|
0ae0cee766 | ||
|
|
4cbc7f3ae5 | ||
|
|
f1cd0ab689 | ||
|
|
7f367a1f84 | ||
|
|
5405b9bf72 | ||
|
|
75f75d95a6 | ||
|
|
ae5c539e31 | ||
|
|
e7797cedc1 | ||
|
|
f3c3ddd73a | ||
|
|
c201f06103 | ||
|
|
111a3a678f | ||
|
|
51c4964003 | ||
|
|
5fac064a48 | ||
|
|
e84f45ae39 | ||
|
|
7e119d40a4 | ||
|
|
22b47d1066 | ||
|
|
ac0ea6a937 | ||
|
|
ed7bfe0c21 | ||
|
|
55cac14ecf | ||
|
|
691635c5d1 | ||
|
|
9209a2d7d3 | ||
|
|
05b044d965 | ||
|
|
e231a3a41a | ||
|
|
216614a4b1 | ||
|
|
ae19d14951 | ||
|
|
7f639361b8 | ||
|
|
ba706b85d3 | ||
|
|
3b91d921e8 | ||
|
|
660555d664 | ||
|
|
3550710f23 | ||
|
|
1429c29537 | ||
|
|
95113490f1 | ||
|
|
1eafdb944a | ||
|
|
a32cd0b2ae | ||
|
|
249fbf3f96 | ||
|
|
64877af64a | ||
|
|
ff94e46179 | ||
|
|
921bd4613a | ||
|
|
6f4a49ea97 | ||
|
|
9029fccad4 | ||
|
|
edf3a072c5 | ||
|
|
0fde8c49a7 | ||
|
|
767c835a8e | ||
|
|
38f0223dc0 | ||
|
|
ec707b5af3 | ||
|
|
462d5e3187 | ||
|
|
5cc4c07941 | ||
|
|
20de78f88a | ||
|
|
a63d70ca7e | ||
|
|
672d6b88b2 | ||
|
|
add1612c92 | ||
|
|
96b964e609 | ||
|
|
6b40190097 | ||
|
|
f5b0bc5605 | ||
|
|
64a58252e5 | ||
|
|
46571684f6 | ||
|
|
710022539b | ||
|
|
bc75d559b0 | ||
|
|
a82ee5cc65 | ||
|
|
6647dd16f8 | ||
|
|
6f4e1e07f7 | ||
|
|
5cd951a9c1 | ||
|
|
f492a215b4 | ||
|
|
bbd2d74a28 | ||
|
|
2b697e21ba | ||
|
|
3a4e4ecbdc | ||
|
|
05cbb915d6 | ||
|
|
26a2bb75fa | ||
|
|
71b0bb78ec | ||
|
|
4e4eb39a19 | ||
|
|
b6399c8271 | ||
|
|
eb4a764407 | ||
|
|
27188eb2c5 | ||
|
|
57a997adc3 | ||
|
|
a72a03cc3a | ||
|
|
bb185d9e9f | ||
|
|
0298660714 | ||
|
|
8bf1dbb10d | ||
|
|
8e5ef98a7c | ||
|
|
72bd536aec | ||
|
|
1a4009a6b2 | ||
|
|
e40357c052 | ||
|
|
222ea07cf2 | ||
|
|
6b3f398de3 | ||
|
|
d796fa7ff4 | ||
|
|
6fdfd8717f | ||
|
|
81cea4c0f2 | ||
|
|
6a64633650 | ||
|
|
21702f1593 | ||
|
|
32ddb9c4c7 | ||
|
|
10fc62ceb7 | ||
|
|
d3018a3136 | ||
|
|
f9bcbd588b | ||
|
|
5c7d2bfd85 | ||
|
|
788f0ebf77 | ||
|
|
0eca5dd95d | ||
|
|
47322b0bbb | ||
|
|
518a05a6f0 | ||
|
|
352e426e17 | ||
|
|
666122f265 | ||
|
|
61e32f6d95 | ||
|
|
7aabc8f0be | ||
|
|
a66dc03b99 | ||
|
|
cf5ecb3150 | ||
|
|
46c365c5cd | ||
|
|
ea76751e4a | ||
|
|
0bef3f8e71 | ||
|
|
c26c9fae12 | ||
|
|
446c615bb8 | ||
|
|
c516873541 | ||
|
|
d4326de087 | ||
|
|
eca966bb90 | ||
|
|
262b4732e3 | ||
|
|
7f9a30f568 | ||
|
|
a89d2e1365 | ||
|
|
fcd6f6c8fc | ||
|
|
8313d7f9f1 | ||
|
|
3a12601103 | ||
|
|
926949dc89 | ||
|
|
6b155083ef | ||
|
|
2b2ecac3ab | ||
|
|
35e9ff607d | ||
|
|
ae037834f2 | ||
|
|
3ac24436ba | ||
|
|
2ca17e826c | ||
|
|
4fb6128499 | ||
|
|
c359332746 | ||
|
|
1cd8e8e376 | ||
|
|
48ec2bdac8 | ||
|
|
2283e91532 | ||
|
|
647894ad60 | ||
|
|
574573abbb | ||
|
|
a735a03cd7 | ||
|
|
83881a0dac | ||
|
|
c04c6bbd2c | ||
|
|
42bbbc7ff4 | ||
|
|
1ecffeda71 | ||
|
|
92992d1e95 | ||
|
|
bc9df9750f | ||
|
|
27e70e8031 | ||
|
|
c823b8d19a | ||
|
|
170ff77eec | ||
|
|
c241f5c562 | ||
|
|
e06d964de4 | ||
|
|
dfdb86de6f | ||
|
|
a37b74f693 | ||
|
|
398d9f15df | ||
|
|
ab7c2d7a31 | ||
|
|
090549ff91 | ||
|
|
10330c6597 | ||
|
|
da2fe6a891 | ||
|
|
01b88221c5 | ||
|
|
46d25710b8 | ||
|
|
a40ec7e66b | ||
|
|
c8d2031d24 | ||
|
|
4f838e0ae3 | ||
|
|
c7cc1b7611 | ||
|
|
bf67a5f13d | ||
|
|
e6bbe66873 | ||
|
|
1a930acf0a | ||
|
|
a497467137 | ||
|
|
b463416633 | ||
|
|
ccf6240d65 | ||
|
|
5ccc12019d | ||
|
|
f57fa9aee9 | ||
|
|
80e841a43d | ||
|
|
e1d759041d | ||
|
|
fd6df055c0 | ||
|
|
669d0b9dac | ||
|
|
b9f9501e67 | ||
|
|
4b1c021871 | ||
|
|
1f79627dbe | ||
|
|
dc18be07ce | ||
|
|
83ac45f8cf | ||
|
|
c6cd865663 | ||
|
|
477636e0d7 | ||
|
|
77414ba934 | ||
|
|
86186072ed | ||
|
|
1216bcf9bf | ||
|
|
788ea70d32 | ||
|
|
18de37c4e4 | ||
|
|
aeb81bd97f | ||
|
|
a68660f1ab | ||
|
|
5abfa85a0e | ||
|
|
794f43d9ae | ||
|
|
4b2f762200 | ||
|
|
fc3664571b | ||
|
|
5db8f11fd6 | ||
|
|
598674a7e0 | ||
|
|
af17eceb27 | ||
|
|
90946c582d | ||
|
|
d619e0f961 | ||
|
|
08311145c8 | ||
|
|
a80e37a208 | ||
|
|
c88114cabe | ||
|
|
e33f3a1492 | ||
|
|
8328fdad33 | ||
|
|
8035380e7b | ||
|
|
b4ea528643 | ||
|
|
b0012872fa | ||
|
|
274fb595a2 | ||
|
|
c7ef4b9231 | ||
|
|
e64cfce423 | ||
|
|
c0c9c7be20 | ||
|
|
2ae98d0c2d | ||
|
|
a129834c16 | ||
|
|
71a9d6c5c0 | ||
|
|
1ce8f6bd1f | ||
|
|
85c4821606 | ||
|
|
06ed9d7dfc | ||
|
|
90de5edc99 | ||
|
|
72786e5dbb | ||
|
|
d92c08548b | ||
|
|
b1893234c7 | ||
|
|
534deff274 | ||
|
|
bdeffea79c | ||
|
|
ab2fdf26d2 | ||
|
|
0c902f037b | ||
|
|
c0595aec0a | ||
|
|
6fdb20fc34 | ||
|
|
8e74031fb1 | ||
|
|
81e4b947b6 | ||
|
|
c5d23410f4 | ||
|
|
f23575c405 | ||
|
|
8cb98cf643 | ||
|
|
b09a558670 | ||
|
|
abc3c5f880 | ||
|
|
1c0d966c3c | ||
|
|
20d7264aab | ||
|
|
4cf987b89a | ||
|
|
5bcd3f807d | ||
|
|
9e04f2b9c6 | ||
|
|
a7ceb8951c | ||
|
|
7392b223f4 | ||
|
|
51ce4f1bb5 | ||
|
|
059c310aaf | ||
|
|
11dad8ced3 | ||
|
|
18ed0fc020 | ||
|
|
eaa1b73851 | ||
|
|
5c2c24e009 | ||
|
|
1957531600 | ||
|
|
e47a165e11 | ||
|
|
3ca1adcb48 | ||
|
|
66bf1c847a | ||
|
|
47eea9b9b3 | ||
|
|
5c5a5f3b53 | ||
|
|
1c7729a797 | ||
|
|
cd06f13fcb | ||
|
|
632870d448 | ||
|
|
762055379a | ||
|
|
7374749340 | ||
|
|
e379be0107 | ||
|
|
2784053b83 | ||
|
|
12c4a0d498 | ||
|
|
35b5ea138d | ||
|
|
d75e1fc660 | ||
|
|
3ab6df5da2 | ||
|
|
8d4fc391a4 | ||
|
|
35f9fc3741 | ||
|
|
b465f3eb99 | ||
|
|
c4e6a90722 | ||
|
|
9cc4af2b56 | ||
|
|
5ccdd7633b | ||
|
|
880f4403cb | ||
|
|
cba391904a | ||
|
|
0fc397ace5 | ||
|
|
56a241b7f4 | ||
|
|
97eb999e4c | ||
|
|
9deaa89f21 | ||
|
|
74bae65e32 | ||
|
|
7091917578 | ||
|
|
bbf72d9ed7 | ||
|
|
552d10ef48 | ||
|
|
7c5479157a | ||
|
|
2463dba380 | ||
|
|
2f9209a92d | ||
|
|
370bd92518 | ||
|
|
ec083924fc | ||
|
|
22b450f7e0 | ||
|
|
1dd73e7319 | ||
|
|
c4fe4b40dd | ||
|
|
251137ac60 | ||
|
|
0ad7c99274 | ||
|
|
f53142d98a | ||
|
|
1f868523b0 | ||
|
|
94db02db2e | ||
|
|
9f0e06e663 | ||
|
|
c6dab85fc2 | ||
|
|
59aa2e3f33 | ||
|
|
21b26773e6 | ||
|
|
f308c5f6b0 | ||
|
|
2763b6028a | ||
|
|
a3df6d6e7d | ||
|
|
473bfcbec5 | ||
|
|
8976c9e653 | ||
|
|
86795dcc63 | ||
|
|
9b90f15621 | ||
|
|
7d0d9d3e22 | ||
|
|
17f0248a3e | ||
|
|
25d3dcad59 | ||
|
|
cbd857422f | ||
|
|
e65b4d0c2a | ||
|
|
6bcebb63e4 | ||
|
|
ac7708138c | ||
|
|
9d8ec9cc6b | ||
|
|
1b8a2cb923 | ||
|
|
a97ab9c09e | ||
|
|
9a73eb3620 | ||
|
|
f50e460335 | ||
|
|
fa72d9a39f | ||
|
|
75b4f49e31 | ||
|
|
a069093f6b | ||
|
|
62c741198a | ||
|
|
0266d912e0 | ||
|
|
55bc0fc93f | ||
|
|
47c00d7eb0 | ||
|
|
ad9fac861e | ||
|
|
14afd08fcb | ||
|
|
319580554f | ||
|
|
c750bd04ad | ||
|
|
bdd55d8432 | ||
|
|
98464e414b | ||
|
|
2f2d9c45a3 | ||
|
|
3665a0d064 | ||
|
|
c19c69266a | ||
|
|
bafa2c2fff | ||
|
|
2d823140b9 | ||
|
|
1fb4a06092 | ||
|
|
cb450a0313 | ||
|
|
7aaf6bb024 | ||
|
|
6a02ba3220 | ||
|
|
83610783e0 | ||
|
|
cec26b0614 | ||
|
|
fbf288198b | ||
|
|
193940fd63 | ||
|
|
bd169c316a | ||
|
|
5315f65cfb | ||
|
|
5a859d81d3 | ||
|
|
904fc4d500 | ||
|
|
634fe18127 | ||
|
|
89a9cc4380 | ||
|
|
57c62fbe27 | ||
|
|
590eff1e3b | ||
|
|
a71309a604 | ||
|
|
343e983b64 | ||
|
|
e31a52b659 | ||
|
|
41162ee2c3 | ||
|
|
55745c18e9 | ||
|
|
7d6b77ad2a | ||
|
|
90813b23d8 | ||
|
|
a999d29b1d | ||
|
|
f6f9b0a61a | ||
|
|
724edf44cb | ||
|
|
07248ca49f | ||
|
|
3a068c37b5 | ||
|
|
df44e5f6e9 | ||
|
|
9328d966ba | ||
|
|
1a293deec7 | ||
|
|
665a70ba3d | ||
|
|
967587c8e4 | ||
|
|
4927c13e55 | ||
|
|
1f9f997748 | ||
|
|
521e4ea3a2 | ||
|
|
941843e4c0 | ||
|
|
1434a42421 | ||
|
|
8f57d3a316 | ||
|
|
a74b789a8c | ||
|
|
ac4dd37249 | ||
|
|
75b3b4e012 | ||
|
|
188ab4c483 | ||
|
|
f9a562808d | ||
|
|
4ea763124b | ||
|
|
836d15c68f | ||
|
|
8ce4c0a7ce | ||
|
|
9613c2c410 | ||
|
|
e5d4bbadc1 | ||
|
|
5d4d2a447a | ||
|
|
d905962298 | ||
|
|
4ab9ad6881 | ||
|
|
2ce20b5fac | ||
|
|
81297383cb | ||
|
|
2aed60390c | ||
|
|
67386da136 | ||
|
|
bdc40c2c02 | ||
|
|
1d916e43d5 | ||
|
|
98bff4925a | ||
|
|
9af2c80b05 | ||
|
|
3a03c82f8d | ||
|
|
de66e75eb2 | ||
|
|
10d79dca4d | ||
|
|
460f511bf6 | ||
|
|
81207f95d8 | ||
|
|
3d3aca3290 | ||
|
|
d661b9f6a4 | ||
|
|
7deeb78d69 | ||
|
|
4dcf47b81f | ||
|
|
a674b9b3a1 | ||
|
|
b2aa4d9377 | ||
|
|
bc4a595815 | ||
|
|
2704825d03 | ||
|
|
456d3ba42e | ||
|
|
803a272331 | ||
|
|
89e4bfe3e1 | ||
|
|
697440693e | ||
|
|
c0cd04a96f | ||
|
|
c92f02bdda | ||
|
|
c4766d163c | ||
|
|
18889092aa | ||
|
|
adafa3c5c4 | ||
|
|
91994016a7 | ||
|
|
dfcf253217 | ||
|
|
bd3503912f | ||
|
|
b062c5fd66 | ||
|
|
b1cd60d0dd | ||
|
|
67ac1a1c8d | ||
|
|
c166eab2e8 | ||
|
|
c6b3ced493 | ||
|
|
4e922e806d | ||
|
|
0e087565b3 | ||
|
|
104b25d898 | ||
|
|
9bdff41ec1 | ||
|
|
d27b0a7be3 | ||
|
|
076b20ef6d | ||
|
|
d93d107039 | ||
|
|
708dcfd088 | ||
|
|
14501a70b9 | ||
|
|
3b82679c2d | ||
|
|
48d4fb4fec | ||
|
|
a03ca73d93 | ||
|
|
a46e592cfb | ||
|
|
634bea1bda | ||
|
|
3dfa23a30c | ||
|
|
24408dd7c2 | ||
|
|
32c7919885 | ||
|
|
967615b6e5 | ||
|
|
aee3a28465 | ||
|
|
3fdf27f820 | ||
|
|
e9302c7d6f | ||
|
|
c38fe83e48 | ||
|
|
adfc427d25 | ||
|
|
3912a58127 | ||
|
|
720d25e838 | ||
|
|
bc1d77a6f8 | ||
|
|
00a8d472ff | ||
|
|
5076ee0463 | ||
|
|
4a5ddd65f4 | ||
|
|
ec3c224f44 | ||
|
|
39b99ecf8f | ||
|
|
50232f9b90 | ||
|
|
66e8cc6e1d | ||
|
|
f6b4c94d00 | ||
|
|
f3ce240bcd | ||
|
|
7be9bf1bab | ||
|
|
d39871be70 | ||
|
|
3324eec011 | ||
|
|
dd9790fca5 | ||
|
|
41a3769c5f | ||
|
|
42601ff960 | ||
|
|
e54cffbaf3 | ||
|
|
f8dbad362c | ||
|
|
925db50418 | ||
|
|
f40db68579 | ||
|
|
3afde5f1fa | ||
|
|
b631519009 | ||
|
|
f05c60c628 | ||
|
|
e235de6d56 | ||
|
|
da47c437e0 | ||
|
|
f0048bc6cf | ||
|
|
f80ae284fa | ||
|
|
06753ff312 | ||
|
|
1e07614306 | ||
|
|
2d716ba43a | ||
|
|
c39dc6295d | ||
|
|
7557666135 | ||
|
|
5ee65124cb | ||
|
|
ab79617377 | ||
|
|
3b2a47a4ef | ||
|
|
7b4d9d8717 | ||
|
|
4c9734ac7f | ||
|
|
152e8a80ab | ||
|
|
98a348b091 | ||
|
|
e448f63ec3 | ||
|
|
0b13850eca | ||
|
|
de97404602 | ||
|
|
2c0b76fb3f | ||
|
|
cbd6ce7872 | ||
|
|
3c479eb33c | ||
|
|
beaff158cc | ||
|
|
6806620d90 | ||
|
|
4459347169 | ||
|
|
98e01497e9 | ||
|
|
4ed4c8c32c | ||
|
|
620acecdff | ||
|
|
2d214cfdb3 | ||
|
|
cd36259739 | ||
|
|
d049d8c571 | ||
|
|
7c51fcad96 | ||
|
|
1948c8ef89 | ||
|
|
f2b2ac6fd0 | ||
|
|
4098f63ce2 | ||
|
|
4d903abd85 | ||
|
|
f00eb2d3ef | ||
|
|
6752dcfd39 | ||
|
|
c3022eb80a | ||
|
|
2f6cbf25df | ||
|
|
8dfc2e7bcd | ||
|
|
fa0ad477cc | ||
|
|
ac6a68c38d | ||
|
|
25223471e7 | ||
|
|
56535b1e6f | ||
|
|
131c51f7c4 | ||
|
|
a27a2077ed | ||
|
|
7758fabc89 | ||
|
|
c9da9bdd23 | ||
|
|
9520b053af | ||
|
|
8a1e717c1b | ||
|
|
21127f661a | ||
|
|
7d614a2395 | ||
|
|
669ae024f9 | ||
|
|
9d8dd558e2 | ||
|
|
67f58a8dfe | ||
|
|
52d230b9e2 | ||
|
|
fd2a35fb4a | ||
|
|
d61b5e135f | ||
|
|
ef23b786ac | ||
|
|
29a66bfcb0 | ||
|
|
ef5e30df3d | ||
|
|
ab28a06bef | ||
|
|
9910c54aa6 | ||
|
|
6ec431f471 | ||
|
|
3ec7f651c1 | ||
|
|
87aa60bc3e | ||
|
|
73874aa5a1 | ||
|
|
976438f860 | ||
|
|
eb095b7c44 | ||
|
|
3ca745e74b | ||
|
|
040de84d93 | ||
|
|
4f1d63440e | ||
|
|
7c3cf1bb67 | ||
|
|
cbf1b0a3cc | ||
|
|
5287a86397 | ||
|
|
ae599ac6f6 | ||
|
|
a08a8ef208 | ||
|
|
19a4d97765 | ||
|
|
6f1f5f84c6 | ||
|
|
e2f352149d | ||
|
|
1fa39b20d2 | ||
|
|
53dc2e6f03 | ||
|
|
555f30c0b3 | ||
|
|
7549d37a04 | ||
|
|
29072eb71b | ||
|
|
48e9e77be5 | ||
|
|
4dd3f15ba3 | ||
|
|
3603501ae2 | ||
|
|
338180a21a | ||
|
|
28193ed6f3 | ||
|
|
0509710602 | ||
|
|
a4872b4159 | ||
|
|
888f5c6260 | ||
|
|
7a5abb5f47 | ||
|
|
61a9f02899 | ||
|
|
354c4201f7 | ||
|
|
d8340087c5 | ||
|
|
e3249c6d79 | ||
|
|
58e65608e4 | ||
|
|
2b6fdf5a6a | ||
|
|
967d7849ee | ||
|
|
7c476ab2f0 | ||
|
|
caaf35e45a | ||
|
|
6ddc9ee6c5 | ||
|
|
39aa250223 | ||
|
|
031a92db8e | ||
|
|
0c2579897f | ||
|
|
b63479bf45 | ||
|
|
4c89552265 | ||
|
|
517002e079 | ||
|
|
85bfb1986d | ||
|
|
632421eb73 | ||
|
|
21365be411 | ||
|
|
eaa54022fc | ||
|
|
55f7f39efd | ||
|
|
71e709b346 | ||
|
|
1d2d295a45 | ||
|
|
5ed23beff0 | ||
|
|
43a8db55a2 | ||
|
|
0a9cba7bf7 | ||
|
|
02af761bf7 | ||
|
|
6882a146e7 | ||
|
|
c9834f9792 | ||
|
|
21b4baf700 | ||
|
|
d3a24627dd | ||
|
|
8aac9cf59d | ||
|
|
ce70b2e71a | ||
|
|
62a5ef60f6 | ||
|
|
95430e9c11 | ||
|
|
1cee36cc9b | ||
|
|
aa475f81a0 | ||
|
|
1173d5db1d | ||
|
|
f34d0cbb90 | ||
|
|
780d187911 | ||
|
|
48d4374346 | ||
|
|
6b8b511d0d | ||
|
|
c6be115634 | ||
|
|
dadde225f1 | ||
|
|
31dfc1dc28 | ||
|
|
1de163af44 | ||
|
|
2181eada53 | ||
|
|
75e63d2710 | ||
|
|
fbfcdcbc40 | ||
|
|
0238e6a7f1 | ||
|
|
be17301c91 | ||
|
|
b1118c7f43 | ||
|
|
24bf5e5b0c | ||
|
|
122471f81f | ||
|
|
a6136cee25 | ||
|
|
83357ba2cc | ||
|
|
4fe10b26b0 | ||
|
|
485f6c9759 | ||
|
|
732c5b763b | ||
|
|
4431d08a88 | ||
|
|
cb7224ac94 | ||
|
|
66b39c1f80 | ||
|
|
b30f139b5d | ||
|
|
f39ec26c29 | ||
|
|
8c3c32aeba | ||
|
|
9eb27f5e92 | ||
|
|
3e5b45de8f | ||
|
|
e7b4a6ffcc | ||
|
|
e7ec75138d | ||
|
|
6c4679d83b | ||
|
|
5f23b29c4e | ||
|
|
55db98fe1b | ||
|
|
f7c5ffa0ce | ||
|
|
d1e98e5640 | ||
|
|
e785fdf9b7 | ||
|
|
fc0db925c5 | ||
|
|
5ab686b721 | ||
|
|
327d43096f | ||
|
|
1f7b632553 | ||
|
|
592d7987ab | ||
|
|
c429424fda | ||
|
|
0b4709d383 | ||
|
|
336929ff3f | ||
|
|
677f83cc4b | ||
|
|
5c58c35a64 | ||
|
|
b346a458a6 | ||
|
|
226512a4ca | ||
|
|
a0527d78e9 | ||
|
|
3357295d98 | ||
|
|
fc6a43b4fe | ||
|
|
260b2e4b12 | ||
|
|
f080b18d3f | ||
|
|
56f015ffd5 | ||
|
|
fd8a28831e | ||
|
|
503e09ddd1 | ||
|
|
880912806a | ||
|
|
665ce22741 | ||
|
|
e5c9ec7681 | ||
|
|
74fceeec78 | ||
|
|
77d60ccfa5 | ||
|
|
0c2b25f79a | ||
|
|
4065e05013 | ||
|
|
319a7fd003 | ||
|
|
26c01f43f9 | ||
|
|
88d7e07bea | ||
|
|
a9a5a3491e | ||
|
|
d255273368 | ||
|
|
a7846b4adf | ||
|
|
ce431e6e21 | ||
|
|
f8e39a2a5d | ||
|
|
e5135b1a9d |
4
.github/ISSUE_TEMPLATE/bug_report.md
vendored
4
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,12 +1,14 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve DbGate
|
||||
about: Create a report to help us improve DbGate (in ENGLISH)
|
||||
title: 'BUG: Say something here'
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Please keep communication in ENGLISH to reach more contributors.
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/feature_request.md
vendored
4
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,12 +1,14 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for DbGate
|
||||
about: Suggest an idea for DbGate (in ENGLISH)
|
||||
title: 'FEAT: '
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Please keep communication in ENGLISH to reach more contributors.
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/question.md
vendored
4
.github/ISSUE_TEMPLATE/question.md
vendored
@@ -1,12 +1,14 @@
|
||||
---
|
||||
name: Question
|
||||
about: Ask a question about how to do something
|
||||
about: Ask a question about how to do something (in ENGLISH)
|
||||
title: 'QUESTION: Summary of your question'
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Please keep communication in ENGLISH to reach more contributors.
|
||||
|
||||
**Details:**
|
||||
Details about your question
|
||||
|
||||
|
||||
112
.github/workflows/build-app-beta.yaml
vendored
112
.github/workflows/build-app-beta.yaml
vendored
@@ -1,21 +1,35 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Electron app BETA
|
||||
|
||||
on:
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+'
|
||||
|
||||
- v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
environment: dbgate-app
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-12, windows-2022, ubuntu-22.04]
|
||||
# os: [macOS-10.15]
|
||||
|
||||
os:
|
||||
- macos-14
|
||||
- windows-2022
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- run: python -m pip install --upgrade pip setuptools
|
||||
- name: Install python 3.11 (MacOS)
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
brew install python@3.11
|
||||
echo "PYTHON=/opt/homebrew/bin/python3.11" >> $GITHUB_ENV
|
||||
- name: Context
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
@@ -23,64 +37,84 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: yarn adjustPackageJson
|
||||
node-version: 22.x
|
||||
- name: adjustPackageJson
|
||||
run: |
|
||||
yarn adjustPackageJson
|
||||
|
||||
node adjustPackageJson --community
|
||||
- name: setUpdaterChannel beta
|
||||
run: |
|
||||
|
||||
node setUpdaterChannel beta
|
||||
- name: yarn set timeout
|
||||
run: |
|
||||
|
||||
yarn config set network-timeout 100000
|
||||
- name: yarn install
|
||||
run: |
|
||||
|
||||
yarn install
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
|
||||
yarn setCurrentVersion
|
||||
- name: printSecrets
|
||||
run: |
|
||||
yarn printSecrets
|
||||
env:
|
||||
GIST_UPLOAD_SECRET : ${{secrets.GIST_UPLOAD_SECRET}}
|
||||
- name: fillNativeModulesElectron
|
||||
run: |
|
||||
yarn fillNativeModulesElectron
|
||||
- name: fillPackagedPlugins
|
||||
run: |
|
||||
|
||||
yarn fillPackagedPlugins
|
||||
- name: Install Snapcraft
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
uses: samuelmeuli/action-snapcraft@v1
|
||||
- name: Publish
|
||||
- name: Publish Windows
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
|
||||
yarn run build:app
|
||||
- name: Publish MacOS
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }} # token for electron publish
|
||||
|
||||
WIN_CSC_LINK: ${{ secrets.WINCERT_2025 }}
|
||||
WIN_CSC_KEY_PASSWORD: ${{ secrets.WINCERT_2025_PASSWORD }}
|
||||
# WIN_CSC_LINK: ${{ secrets.WINCERT_CERTIFICATE }}
|
||||
# WIN_CSC_KEY_PASSWORD: ${{ secrets.WINCERT_PASSWORD }}
|
||||
|
||||
CSC_LINK: ${{ secrets.APPLECERT_CERTIFICATE }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.APPLECERT_PASSWORD }}
|
||||
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
|
||||
- name: publishSnap
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{secrets.APPLE_APP_SPECIFIC_PASSWORD}}
|
||||
- name: Publish Linux
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
snapcraft upload --release=beta app/dist/*.snap
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{secrets.SNAPCRAFT_LOGIN}}
|
||||
- name: Azure login (OIDC)
|
||||
uses: azure/login@v2
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
client-id: ${{ secrets.AZURE_TC_CLIENT_ID }}
|
||||
tenant-id: ${{ secrets.AZURE_TC_TENANT_ID }}
|
||||
allow-no-subscriptions: true
|
||||
- name: Sign Windows artifacts with Azure Trusted Signing
|
||||
uses: azure/trusted-signing-action@v0
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
endpoint: https://wus3.codesigning.azure.net/
|
||||
trusted-signing-account-name: DbGate
|
||||
certificate-profile-name: DbGate-Release
|
||||
files-folder: app/dist
|
||||
files-folder-filter: exe
|
||||
timestamp-rfc3161: http://timestamp.acs.microsoft.com
|
||||
timestamp-digest: SHA256
|
||||
- name: Fix YML hashes
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
|
||||
yarn run fixYmlHashes
|
||||
- name: Copy artifacts
|
||||
run: |
|
||||
mkdir artifacts
|
||||
@@ -92,8 +126,11 @@ jobs:
|
||||
cp app/dist/*win*.exe artifacts/dbgate-beta.exe || true
|
||||
cp app/dist/*win_x64.zip artifacts/dbgate-windows-beta.zip || true
|
||||
cp app/dist/*win_arm64.zip artifacts/dbgate-windows-beta-arm64.zip || true
|
||||
cp app/dist/*-mac_x64.dmg artifacts/dbgate-beta.dmg || true
|
||||
cp app/dist/*win_arm64.exe artifacts/dbgate-windows-beta-arm64.exe || true
|
||||
cp app/dist/*-mac_universal.dmg artifacts/dbgate-beta.dmg || true
|
||||
cp app/dist/*-mac_x64.dmg artifacts/dbgate-beta-x64.dmg || true
|
||||
cp app/dist/*-mac_arm64.dmg artifacts/dbgate-beta-arm64.dmg || true
|
||||
mv app/dist/*.snap artifacts/dbgate-beta.snap || true
|
||||
|
||||
mv app/dist/*.exe artifacts/ || true
|
||||
mv app/dist/*.zip artifacts/ || true
|
||||
@@ -106,18 +143,21 @@ jobs:
|
||||
|
||||
mv app/dist/*.yml artifacts/ || true
|
||||
rm artifacts/builder-debug.yml
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.os }}
|
||||
path: artifacts
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
with:
|
||||
files: 'artifacts/**'
|
||||
files: artifacts/**
|
||||
prerelease: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Print content of notarization-error.log
|
||||
if: failure() && matrix.os == 'macos-14'
|
||||
run: |
|
||||
|
||||
find . -type f -name "notarization-error.log" -exec echo "=== Start of {} ===" \; -exec cat {} \; -exec echo "=== End of {} ===" \;
|
||||
|
||||
146
.github/workflows/build-app-check.yaml
vendored
Normal file
146
.github/workflows/build-app-check.yaml
vendored
Normal file
@@ -0,0 +1,146 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Electron app check build
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- check-[0-9]+-[0-9]+-[0-9]+.[0-9]+
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
environment: dbgate-app
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- macos-14
|
||||
- windows-2022
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- run: python -m pip install --upgrade pip setuptools
|
||||
- name: Install python 3.11 (MacOS)
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
brew install python@3.11
|
||||
echo "PYTHON=/opt/homebrew/bin/python3.11" >> $GITHUB_ENV
|
||||
- name: Context
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
run: echo "$GITHUB_CONTEXT"
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 22.x
|
||||
- name: adjustPackageJson
|
||||
run: |
|
||||
|
||||
node adjustPackageJson --community
|
||||
- name: yarn set timeout
|
||||
run: |
|
||||
|
||||
yarn config set network-timeout 100000
|
||||
- name: yarn install
|
||||
run: |
|
||||
|
||||
yarn install
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
|
||||
yarn setCurrentVersion
|
||||
- name: fillPackagedPlugins
|
||||
run: |
|
||||
|
||||
yarn fillPackagedPlugins
|
||||
- name: Install Snapcraft
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
uses: samuelmeuli/action-snapcraft@v1
|
||||
- name: Publish Windows
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
|
||||
yarn run build:app
|
||||
- name: Publish MacOS
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
CSC_LINK: ${{ secrets.APPLECERT_CERTIFICATE }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.APPLECERT_PASSWORD }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{secrets.APPLE_APP_SPECIFIC_PASSWORD}}
|
||||
- name: Publish Linux
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{secrets.SNAPCRAFT_LOGIN}}
|
||||
- name: Azure login (OIDC)
|
||||
uses: azure/login@v2
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
client-id: ${{ secrets.AZURE_TC_CLIENT_ID }}
|
||||
tenant-id: ${{ secrets.AZURE_TC_TENANT_ID }}
|
||||
allow-no-subscriptions: true
|
||||
- name: Sign Windows artifacts with Azure Trusted Signing
|
||||
uses: azure/trusted-signing-action@v0
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
endpoint: https://wus3.codesigning.azure.net/
|
||||
trusted-signing-account-name: DbGate
|
||||
certificate-profile-name: DbGate-Release
|
||||
files-folder: app/dist
|
||||
files-folder-filter: exe
|
||||
timestamp-rfc3161: http://timestamp.acs.microsoft.com
|
||||
timestamp-digest: SHA256
|
||||
- name: Fix YML hashes
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
|
||||
yarn run fixYmlHashes
|
||||
- name: Copy artifacts
|
||||
run: |
|
||||
mkdir artifacts
|
||||
|
||||
cp app/dist/*.deb artifacts/dbgate-check.deb || true
|
||||
cp app/dist/*x86*.AppImage artifacts/dbgate-check.AppImage || true
|
||||
cp app/dist/*arm64*.AppImage artifacts/dbgate-check-arm64.AppImage || true
|
||||
cp app/dist/*armv7l*.AppImage artifacts/dbgate-check-armv7l.AppImage || true
|
||||
cp app/dist/*win*.exe artifacts/dbgate-check.exe || true
|
||||
cp app/dist/*win_x64.zip artifacts/dbgate-windows-check.zip || true
|
||||
cp app/dist/*win_arm64.zip artifacts/dbgate-windows-check-arm64.zip || true
|
||||
cp app/dist/*win_arm64.exe artifacts/dbgate-windows-check-arm64.exe || true
|
||||
cp app/dist/*-mac_universal.dmg artifacts/dbgate-check.dmg || true
|
||||
cp app/dist/*-mac_x64.dmg artifacts/dbgate-check-x64.dmg || true
|
||||
cp app/dist/*-mac_arm64.dmg artifacts/dbgate-check-arm64.dmg || true
|
||||
mv app/dist/*.snap artifacts/dbgate-check.snap || true
|
||||
|
||||
mv app/dist/*.exe artifacts/ || true
|
||||
mv app/dist/*.zip artifacts/ || true
|
||||
mv app/dist/*.tar.gz artifacts/ || true
|
||||
mv app/dist/*.AppImage artifacts/ || true
|
||||
mv app/dist/*.deb artifacts/ || true
|
||||
mv app/dist/*.snap artifacts/ || true
|
||||
mv app/dist/*.dmg artifacts/ || true
|
||||
mv app/dist/*.blockmap artifacts/ || true
|
||||
|
||||
mv app/dist/*.yml artifacts/ || true
|
||||
rm artifacts/builder-debug.yml
|
||||
- name: Print content of notarization-error.log
|
||||
if: failure() && matrix.os == 'macos-14'
|
||||
run: |
|
||||
|
||||
find . -type f -name "notarization-error.log" -exec echo "=== Start of {} ===" \; -exec cat {} \; -exec echo "=== End of {} ===" \;
|
||||
147
.github/workflows/build-app-pro-beta.yaml
vendored
147
.github/workflows/build-app-pro-beta.yaml
vendored
@@ -1,24 +1,35 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Electron app PREMIUM BETA
|
||||
|
||||
on:
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+-premium-beta.[0-9]+'
|
||||
|
||||
- v[0-9]+.[0-9]+.[0-9]+-premium-beta.[0-9]+
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
environment: dbgate-app
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# os: [windows-2022]
|
||||
# os: [ubuntu-22.04]
|
||||
# os: [windows-2022, ubuntu-22.04]
|
||||
os: [macos-12, windows-2022, ubuntu-22.04]
|
||||
# os: [macOS-10.15]
|
||||
|
||||
os:
|
||||
- macos-14
|
||||
- windows-2022
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- run: python -m pip install --upgrade pip setuptools
|
||||
- name: Install python 3.11 (MacOS)
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
brew install python@3.11
|
||||
echo "PYTHON=/opt/homebrew/bin/python3.11" >> $GITHUB_ENV
|
||||
- name: Context
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
@@ -26,18 +37,17 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
|
||||
node-version: 22.x
|
||||
- name: Checkout dbgate/dbgate-pro
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
|
||||
ref: a7c7947b1253fa0b2104ea86a65450d81dc114a0
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
@@ -49,81 +59,113 @@ jobs:
|
||||
yarn
|
||||
node sync.js --nowatch
|
||||
cd ..
|
||||
- name: adjustPackageJson
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
- name: yarn adjustPackageJson
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn adjustPackageJson
|
||||
- name: adjustPackageJsonPremium
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
node adjustPackageJsonPremium
|
||||
node adjustPackageJson --premium
|
||||
- name: setUpdaterChannel premium-beta
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
node setUpdaterChannel premium-beta
|
||||
- name: yarn set timeout
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn config set network-timeout 100000
|
||||
- name: yarn install
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn install
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn setCurrentVersion
|
||||
- name: printSecrets
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn printSecrets
|
||||
env:
|
||||
GIST_UPLOAD_SECRET : ${{secrets.GIST_UPLOAD_SECRET}}
|
||||
- name: fillNativeModulesElectron
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn fillNativeModulesElectron
|
||||
- name: fillPackagedPlugins
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn fillPackagedPlugins
|
||||
- name: Publish
|
||||
- name: Publish Windows
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn run build:app
|
||||
- name: Publish MacOS
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }} # token for electron publish
|
||||
|
||||
WIN_CSC_LINK: ${{ secrets.WINCERT_2025 }}
|
||||
WIN_CSC_KEY_PASSWORD: ${{ secrets.WINCERT_2025_PASSWORD }}
|
||||
# WIN_CSC_LINK: ${{ secrets.WINCERT_CERTIFICATE }}
|
||||
# WIN_CSC_KEY_PASSWORD: ${{ secrets.WINCERT_PASSWORD }}
|
||||
|
||||
CSC_LINK: ${{ secrets.APPLECERT_CERTIFICATE }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.APPLECERT_PASSWORD }}
|
||||
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{secrets.APPLE_APP_SPECIFIC_PASSWORD}}
|
||||
- name: Publish Linux
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{secrets.SNAPCRAFT_LOGIN}}
|
||||
- name: Azure login (OIDC)
|
||||
uses: azure/login@v2
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
client-id: ${{ secrets.AZURE_TC_CLIENT_ID }}
|
||||
tenant-id: ${{ secrets.AZURE_TC_TENANT_ID }}
|
||||
allow-no-subscriptions: true
|
||||
- name: Sign Windows artifacts with Azure Trusted Signing
|
||||
uses: azure/trusted-signing-action@v0
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
endpoint: https://wus3.codesigning.azure.net/
|
||||
trusted-signing-account-name: DbGate
|
||||
certificate-profile-name: DbGate-Release
|
||||
files-folder: ../dbgate-merged/app/dist
|
||||
files-folder-filter: exe
|
||||
timestamp-rfc3161: http://timestamp.acs.microsoft.com
|
||||
timestamp-digest: SHA256
|
||||
- name: Fix YML hashes
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn run fixYmlHashes
|
||||
- name: Copy artifacts
|
||||
run: |
|
||||
mkdir artifacts
|
||||
|
||||
cp ../dbgate-merged/app/dist/*.deb artifacts/dbgate-premium-beta.deb || true
|
||||
cp ../dbgate-merged/app/dist/*x86*.AppImage artifacts/dbgate-premium-beta.AppImage || true
|
||||
cp ../dbgate-merged/app/dist/*arm64*.AppImage artifacts/dbgate-premium-beta-arm64.AppImage || true
|
||||
cp ../dbgate-merged/app/dist/*armv7l*.AppImage artifacts/dbgate-premium-beta-armv7l.AppImage || true
|
||||
cp ../dbgate-merged/app/dist/*win*.exe artifacts/dbgate-premium-beta.exe || true
|
||||
cp ../dbgate-merged/app/dist/*-mac_x64.dmg artifacts/dbgate-premium-beta.dmg || true
|
||||
cp ../dbgate-merged/app/dist/*win_x64.zip artifacts/dbgate-windows-premium-beta.zip || true
|
||||
cp ../dbgate-merged/app/dist/*win_arm64.zip artifacts/dbgate-windows-premium-beta-arm64.zip || true
|
||||
cp ../dbgate-merged/app/dist/*win_arm64.exe artifacts/dbgate-windows-premium-beta-arm64.exe || true
|
||||
cp ../dbgate-merged/app/dist/*-mac_universal.dmg artifacts/dbgate-premium-beta.dmg || true
|
||||
cp ../dbgate-merged/app/dist/*-mac_x64.dmg artifacts/dbgate-premium-beta-x64.dmg || true
|
||||
cp ../dbgate-merged/app/dist/*-mac_arm64.dmg artifacts/dbgate-premium-beta-arm64.dmg || true
|
||||
mv ../dbgate-merged/app/dist/*.snap artifacts/dbgate-premium-beta.snap || true
|
||||
|
||||
mv ../dbgate-merged/app/dist/*.exe artifacts/ || true
|
||||
mv ../dbgate-merged/app/dist/*.zip artifacts/ || true
|
||||
@@ -136,18 +178,23 @@ jobs:
|
||||
|
||||
mv ../dbgate-merged/app/dist/*.yml artifacts/ || true
|
||||
rm artifacts/builder-debug.yml
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.os }}
|
||||
path: artifacts
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
with:
|
||||
files: 'artifacts/**'
|
||||
files: artifacts/**
|
||||
prerelease: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Print content of notarization-error.log
|
||||
if: failure() && matrix.os == 'macos-14'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
find . -type f -name "notarization-error.log" -exec echo "=== Start of {} ===" \; -exec cat {} \; -exec echo "=== End of {} ===" \;
|
||||
|
||||
151
.github/workflows/build-app-pro.yaml
vendored
151
.github/workflows/build-app-pro.yaml
vendored
@@ -1,25 +1,35 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Electron app PREMIUM
|
||||
|
||||
on:
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||
# - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
|
||||
|
||||
# branches:
|
||||
# - production
|
||||
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
environment: dbgate-app
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# os: [ubuntu-22.04, windows-2016]
|
||||
os: [macos-12, windows-2022, ubuntu-22.04]
|
||||
|
||||
os:
|
||||
- macos-14
|
||||
- windows-2022
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- run: python -m pip install --upgrade pip setuptools
|
||||
- name: Install python 3.11 (MacOS)
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
brew install python@3.11
|
||||
echo "PYTHON=/opt/homebrew/bin/python3.11" >> $GITHUB_ENV
|
||||
- name: Context
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
@@ -27,18 +37,17 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
|
||||
node-version: 22.x
|
||||
- name: Checkout dbgate/dbgate-pro
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
|
||||
ref: a7c7947b1253fa0b2104ea86a65450d81dc114a0
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
@@ -50,106 +59,142 @@ jobs:
|
||||
yarn
|
||||
node sync.js --nowatch
|
||||
cd ..
|
||||
- name: adjustPackageJson
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
- name: yarn adjustPackageJson
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn adjustPackageJson
|
||||
- name: yarn adjustPackageJsonPremium
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
node adjustPackageJsonPremium
|
||||
node adjustPackageJson --premium
|
||||
- name: setUpdaterChannel premium
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
node setUpdaterChannel premium
|
||||
- name: yarn set timeout
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn config set network-timeout 100000
|
||||
- name: yarn install
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn install
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn setCurrentVersion
|
||||
- name: printSecrets
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn printSecrets
|
||||
env:
|
||||
GIST_UPLOAD_SECRET : ${{secrets.GIST_UPLOAD_SECRET}}
|
||||
- name: fillNativeModulesElectron
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn fillNativeModulesElectron
|
||||
- name: fillPackagedPlugins
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn fillPackagedPlugins
|
||||
- name: Publish
|
||||
- name: Publish Windows
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn run build:app
|
||||
- name: Publish MacOS
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }} # token for electron publish
|
||||
|
||||
WIN_CSC_LINK: ${{ secrets.WINCERT_2025 }}
|
||||
WIN_CSC_KEY_PASSWORD: ${{ secrets.WINCERT_2025_PASSWORD }}
|
||||
# WIN_CSC_LINK: ${{ secrets.WINCERT_CERTIFICATE }}
|
||||
# WIN_CSC_KEY_PASSWORD: ${{ secrets.WINCERT_PASSWORD }}
|
||||
|
||||
CSC_LINK: ${{ secrets.APPLECERT_CERTIFICATE }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.APPLECERT_PASSWORD }}
|
||||
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{secrets.APPLE_APP_SPECIFIC_PASSWORD}}
|
||||
- name: Publish Linux
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{secrets.SNAPCRAFT_LOGIN}}
|
||||
- name: Azure login (OIDC)
|
||||
uses: azure/login@v2
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
client-id: ${{ secrets.AZURE_TC_CLIENT_ID }}
|
||||
tenant-id: ${{ secrets.AZURE_TC_TENANT_ID }}
|
||||
allow-no-subscriptions: true
|
||||
- name: Sign Windows artifacts with Azure Trusted Signing
|
||||
uses: azure/trusted-signing-action@v0
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
endpoint: https://wus3.codesigning.azure.net/
|
||||
trusted-signing-account-name: DbGate
|
||||
certificate-profile-name: DbGate-Release
|
||||
files-folder: ../dbgate-merged/app/dist
|
||||
files-folder-filter: exe
|
||||
timestamp-rfc3161: http://timestamp.acs.microsoft.com
|
||||
timestamp-digest: SHA256
|
||||
- name: Fix YML hashes
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn run fixYmlHashes
|
||||
- name: Copy artifacts
|
||||
run: |
|
||||
mkdir artifacts
|
||||
|
||||
cp ../dbgate-merged/app/dist/*.deb artifacts/dbgate-premium-latest.deb || true
|
||||
cp ../dbgate-merged/app/dist/*x86*.AppImage artifacts/dbgate-premium-latest.AppImage || true
|
||||
cp ../dbgate-merged/app/dist/*.exe artifacts/dbgate-premium-latest.exe || true
|
||||
cp ../dbgate-merged/app/dist/*win_x64.zip artifacts/dbgate-premium-windows-latest.zip || true
|
||||
cp ../dbgate-merged/app/dist/*win_arm64.zip artifacts/dbgate-premium-windows-latest-arm64.zip || true
|
||||
cp ../dbgate-merged/app/dist/*arm64*.AppImage artifacts/dbgate-premium-latest-arm64.AppImage || true
|
||||
cp ../dbgate-merged/app/dist/*armv7l*.AppImage artifacts/dbgate-premium-latest-armv7l.AppImage || true
|
||||
cp ../dbgate-merged/app/dist/*win*.exe artifacts/dbgate-premium-latest.exe || true
|
||||
cp ../dbgate-merged/app/dist/*win_x64.zip artifacts/dbgate-windows-premium-latest.zip || true
|
||||
cp ../dbgate-merged/app/dist/*win_arm64.zip artifacts/dbgate-windows-premium-latest-arm64.zip || true
|
||||
cp ../dbgate-merged/app/dist/*win_arm64.exe artifacts/dbgate-windows-premium-latest-arm64.exe || true
|
||||
cp ../dbgate-merged/app/dist/*-mac_universal.dmg artifacts/dbgate-premium-latest.dmg || true
|
||||
cp ../dbgate-merged/app/dist/*-mac_x64.dmg artifacts/dbgate-premium-latest-x64.dmg || true
|
||||
cp ../dbgate-merged/app/dist/*-mac_arm64.dmg artifacts/dbgate-premium-latest-arm64.dmg || true
|
||||
mv ../dbgate-merged/app/dist/*.snap artifacts/dbgate-premium-latest.snap || true
|
||||
|
||||
mv ../dbgate-merged/app/dist/*.exe artifacts/ || true
|
||||
mv ../dbgate-merged/app/dist/*.zip artifacts/ || true
|
||||
mv ../dbgate-merged/app/dist/*.tar.gz artifacts/ || true
|
||||
mv ../dbgate-merged/app/dist/*.AppImage artifacts/ || true
|
||||
mv ../dbgate-merged/app/dist/*.deb artifacts/ || true
|
||||
mv ../dbgate-merged/app/dist/*.snap artifacts/ || true
|
||||
mv ../dbgate-merged/app/dist/*.dmg artifacts/ || true
|
||||
mv ../dbgate-merged/app/dist/*.blockmap artifacts/ || true
|
||||
|
||||
mv ../dbgate-merged/app/dist/*.yml artifacts/ || true
|
||||
rm artifacts/builder-debug.yml
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.os }}
|
||||
path: artifacts
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
with:
|
||||
files: 'artifacts/**'
|
||||
files: artifacts/**
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Print content of notarization-error.log
|
||||
if: failure() && matrix.os == 'macos-14'
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
find . -type f -name "notarization-error.log" -exec echo "=== Start of {} ===" \; -exec cat {} \; -exec echo "=== End of {} ===" \;
|
||||
|
||||
159
.github/workflows/build-app.yaml
vendored
159
.github/workflows/build-app.yaml
vendored
@@ -1,25 +1,35 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Electron app
|
||||
|
||||
on:
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||
# - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
|
||||
|
||||
# branches:
|
||||
# - production
|
||||
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
environment: dbgate-app
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# os: [ubuntu-22.04, windows-2016]
|
||||
os: [macos-12, windows-2022, ubuntu-22.04]
|
||||
|
||||
os:
|
||||
- macos-14
|
||||
- windows-2022
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- run: python -m pip install --upgrade pip setuptools
|
||||
- name: Install python 3.11 (MacOS)
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
brew install python@3.11
|
||||
echo "PYTHON=/opt/homebrew/bin/python3.11" >> $GITHUB_ENV
|
||||
- name: Context
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
@@ -27,67 +37,83 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
- name: yarn adjustPackageJson
|
||||
node-version: 22.x
|
||||
- name: adjustPackageJson
|
||||
run: |
|
||||
yarn adjustPackageJson
|
||||
|
||||
node adjustPackageJson --community
|
||||
- name: yarn set timeout
|
||||
run: |
|
||||
|
||||
yarn config set network-timeout 100000
|
||||
- name: yarn install
|
||||
run: |
|
||||
# yarn --version
|
||||
# yarn config set network-timeout 300000
|
||||
|
||||
yarn install
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
|
||||
yarn setCurrentVersion
|
||||
- name: printSecrets
|
||||
run: |
|
||||
yarn printSecrets
|
||||
env:
|
||||
GIST_UPLOAD_SECRET : ${{secrets.GIST_UPLOAD_SECRET}}
|
||||
- name: fillNativeModulesElectron
|
||||
run: |
|
||||
yarn fillNativeModulesElectron
|
||||
- name: fillPackagedPlugins
|
||||
run: |
|
||||
|
||||
yarn fillPackagedPlugins
|
||||
- name: Install Snapcraft
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
uses: samuelmeuli/action-snapcraft@v1
|
||||
- name: Publish
|
||||
- name: Publish Windows
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
|
||||
yarn run build:app
|
||||
- name: Publish MacOS
|
||||
if: matrix.os == 'macos-14'
|
||||
run: |
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GH_TOKEN }} # token for electron publish
|
||||
|
||||
WIN_CSC_LINK: ${{ secrets.WINCERT_2025 }}
|
||||
WIN_CSC_KEY_PASSWORD: ${{ secrets.WINCERT_2025_PASSWORD }}
|
||||
# WIN_CSC_LINK: ${{ secrets.WINCERT_CERTIFICATE }}
|
||||
# WIN_CSC_KEY_PASSWORD: ${{ secrets.WINCERT_PASSWORD }}
|
||||
|
||||
CSC_LINK: ${{ secrets.APPLECERT_CERTIFICATE }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.APPLECERT_PASSWORD }}
|
||||
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{secrets.APPLE_APP_SPECIFIC_PASSWORD}}
|
||||
- name: Publish Linux
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
run: |
|
||||
|
||||
yarn run build:app
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{secrets.SNAPCRAFT_LOGIN}}
|
||||
- name: generatePadFile
|
||||
run: |
|
||||
yarn generatePadFile
|
||||
|
||||
- name: publishSnap
|
||||
if: matrix.os == 'ubuntu-22.04'
|
||||
- name: Azure login (OIDC)
|
||||
uses: azure/login@v2
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
client-id: ${{ secrets.AZURE_TC_CLIENT_ID }}
|
||||
tenant-id: ${{ secrets.AZURE_TC_TENANT_ID }}
|
||||
allow-no-subscriptions: true
|
||||
- name: Sign Windows artifacts with Azure Trusted Signing
|
||||
uses: azure/trusted-signing-action@v0
|
||||
if: matrix.os == 'windows-2022'
|
||||
with:
|
||||
endpoint: https://wus3.codesigning.azure.net/
|
||||
trusted-signing-account-name: DbGate
|
||||
certificate-profile-name: DbGate-Release
|
||||
files-folder: app/dist
|
||||
files-folder-filter: exe
|
||||
timestamp-rfc3161: http://timestamp.acs.microsoft.com
|
||||
timestamp-digest: SHA256
|
||||
- name: Fix YML hashes
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
snapcraft upload --release=stable app/dist/*.snap
|
||||
env:
|
||||
SNAPCRAFT_STORE_CREDENTIALS: ${{secrets.SNAPCRAFT_LOGIN}}
|
||||
|
||||
yarn run fixYmlHashes
|
||||
- name: Copy artifacts
|
||||
run: |
|
||||
mkdir artifacts
|
||||
@@ -96,74 +122,45 @@ jobs:
|
||||
cp app/dist/*x86*.AppImage artifacts/dbgate-latest.AppImage || true
|
||||
cp app/dist/*arm64*.AppImage artifacts/dbgate-latest-arm64.AppImage || true
|
||||
cp app/dist/*armv7l*.AppImage artifacts/dbgate-latest-armv7l.AppImage || true
|
||||
cp app/dist/*.exe artifacts/dbgate-latest.exe || true
|
||||
cp app/dist/*win*.exe artifacts/dbgate-latest.exe || true
|
||||
cp app/dist/*win_x64.zip artifacts/dbgate-windows-latest.zip || true
|
||||
cp app/dist/*win_arm64.zip artifacts/dbgate-windows-latest-arm64.zip || true
|
||||
cp app/dist/*win_arm64.exe artifacts/dbgate-windows-latest-arm64.exe || true
|
||||
cp app/dist/*-mac_universal.dmg artifacts/dbgate-latest.dmg || true
|
||||
cp app/dist/*-mac_x64.dmg artifacts/dbgate-latest-x64.dmg || true
|
||||
cp app/dist/*-mac_arm64.dmg artifacts/dbgate-latest-arm64.dmg || true
|
||||
mv app/dist/*.snap artifacts/dbgate-latest.snap || true
|
||||
|
||||
mv app/dist/*.exe artifacts/ || true
|
||||
mv app/dist/*.zip artifacts/ || true
|
||||
mv app/dist/*.tar.gz artifacts/ || true
|
||||
mv app/dist/*.AppImage artifacts/ || true
|
||||
mv app/dist/*.deb artifacts/ || true
|
||||
mv app/dist/*.snap artifacts/ || true
|
||||
mv app/dist/*.dmg artifacts/ || true
|
||||
mv app/dist/*.snap artifacts/dbgate-latest.snap || true
|
||||
mv app/dist/*.blockmap artifacts/ || true
|
||||
|
||||
mv app/dist/*.yml artifacts/ || true
|
||||
rm artifacts/builder-debug.yml
|
||||
|
||||
# - name: Copy artifacts Linux, MacOs
|
||||
# if: matrix.os != 'windows-2016'
|
||||
# run: |
|
||||
# mkdir artifacts
|
||||
|
||||
# cp app/dist/*.AppImage artifacts/ || true
|
||||
# cp app/dist/*.dmg artifacts/ || true
|
||||
# cp app/dist/*.deb artifacts/ || true
|
||||
|
||||
# mv app/dist/*.deb artifacts/dbgate-linux.deb || true
|
||||
# mv app/dist/*.AppImage artifacts/dbgate-linux.AppImage || true
|
||||
# mv app/dist/*.dmg artifacts/dbgate-mac.dmg || true
|
||||
|
||||
# - name: Copy artifacts Win
|
||||
# if: matrix.os == 'windows-2016'
|
||||
# run: |
|
||||
# mkdir artifacts
|
||||
|
||||
# cp app/dist/*.exe artifacts/ || true
|
||||
|
||||
# mv app/dist/*.exe artifacts/dbgate-windows.exe
|
||||
|
||||
# mv app/dist/latest.yml artifacts/latest.yml || true
|
||||
|
||||
- name: Copy PAD file
|
||||
if: matrix.os == 'windows-2022'
|
||||
run: |
|
||||
mv app/dist/dbgate-pad.xml artifacts/ || true
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.os }}
|
||||
path: artifacts
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
with:
|
||||
files: 'artifacts/**'
|
||||
files: artifacts/**
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Print content of notarization-error.log
|
||||
if: failure() && matrix.os == 'macos-14'
|
||||
run: |
|
||||
|
||||
# - name: Create Release
|
||||
# id: create_release
|
||||
# uses: actions/create-release@v1
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# with:
|
||||
# tag_name: ${{ github.ref }}
|
||||
# release_name: Release ${{ github.ref }}
|
||||
# draft: false
|
||||
# prerelease: false
|
||||
find . -type f -name "notarization-error.log" -exec echo "=== Start of {} ===" \; -exec cat {} \; -exec echo "=== End of {} ===" \;
|
||||
|
||||
135
.github/workflows/build-cloud-pro.yaml
vendored
Normal file
135
.github/workflows/build-cloud-pro.yaml
vendored
Normal file
@@ -0,0 +1,135 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Cloud images PREMIUM
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
- v[0-9]+.[0-9]+.[0-9]+-packer-beta.[0-9]+
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- name: Context
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
run: echo "$GITHUB_CONTEXT"
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 22.x
|
||||
- name: Install jq
|
||||
run: |
|
||||
sudo apt-get install jq -y
|
||||
- name: Setup `packer`
|
||||
uses: hashicorp/setup-packer@main
|
||||
with:
|
||||
version: latest
|
||||
- name: Checkout dbgate/dbgate-pro
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: a7c7947b1253fa0b2104ea86a65450d81dc114a0
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
mv dbgate-pro/* ../dbgate-pro/
|
||||
cd ..
|
||||
mkdir dbgate-merged
|
||||
cd dbgate-pro
|
||||
cd sync
|
||||
yarn
|
||||
node sync.js --nowatch
|
||||
cd ..
|
||||
- name: adjustPackageJson
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
node adjustPackageJson --premium
|
||||
- name: yarn install
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn install
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn setCurrentVersion
|
||||
- name: Prepare packer build
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn run prepare:packer
|
||||
cd packer
|
||||
zip -r cloud-build.zip build
|
||||
- name: Copy artifacts
|
||||
run: |
|
||||
mkdir artifacts
|
||||
cp ../dbgate-merged/packer/cloud-build.zip artifacts/cloud-build.zip || true
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.os }}
|
||||
path: artifacts
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
with:
|
||||
files: artifacts/**
|
||||
prerelease: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Run `packer init` for Azure
|
||||
run: |
|
||||
cd ../dbgate-merged/packer
|
||||
packer init ./azure-ubuntu.pkr.hcl
|
||||
- name: Run `packer build` for Azure
|
||||
run: |
|
||||
cd ../dbgate-merged/packer
|
||||
packer build ./azure-ubuntu.pkr.hcl
|
||||
- name: Run `packer init` for AWS
|
||||
run: |
|
||||
cd ../dbgate-merged/packer
|
||||
packer init ./aws-ubuntu.pkr.hcl
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}}
|
||||
AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
|
||||
AWS_DEFAULT_REGION: ${{secrets.AWS_DEFAULT_REGION}}
|
||||
- name: Run `packer build` for AWS
|
||||
run: |
|
||||
cd ../dbgate-merged/packer
|
||||
packer build ./aws-ubuntu.pkr.hcl
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}}
|
||||
AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
|
||||
AWS_DEFAULT_REGION: ${{secrets.AWS_DEFAULT_REGION}}
|
||||
- name: Delete old Azure VMs
|
||||
run: |
|
||||
cd ../dbgate-merged/packer
|
||||
chmod +x delete-old-azure-images.sh
|
||||
./delete-old-azure-images.sh
|
||||
env:
|
||||
AZURE_CLIENT_ID: ${{secrets.AZURE_CLIENT_ID}}
|
||||
AZURE_CLIENT_SECRET: ${{secrets.AZURE_CLIENT_SECRET}}
|
||||
AZURE_TENANT_ID: ${{secrets.AZURE_TENANT_ID}}
|
||||
AZURE_SUBSCRIPTION_ID: ${{secrets.AZURE_SUBSCRIPTION_ID}}
|
||||
- name: Delete old AMIs (AWS)
|
||||
run: |
|
||||
cd ../dbgate-merged/packer
|
||||
chmod +x delete-old-amis.sh
|
||||
./delete-old-amis.sh
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}}
|
||||
AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
|
||||
AWS_DEFAULT_REGION: ${{secrets.AWS_DEFAULT_REGION}}
|
||||
52
.github/workflows/build-docker-pro.yaml
vendored
52
.github/workflows/build-docker-pro.yaml
vendored
@@ -1,20 +1,19 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Docker image PREMIUM
|
||||
|
||||
on:
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+-premium-beta.[0-9]+'
|
||||
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
- v[0-9]+.[0-9]+.[0-9]+-premium-beta.[0-9]+
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-22.04]
|
||||
|
||||
os:
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- name: Context
|
||||
env:
|
||||
@@ -23,13 +22,11 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: |
|
||||
dbgate/dbgate-premium
|
||||
images: dbgate/dbgate-premium
|
||||
flavor: |
|
||||
latest=false
|
||||
tags: |
|
||||
@@ -37,19 +34,17 @@ jobs:
|
||||
|
||||
type=match,pattern=\d+.\d+.\d+,enable=${{ !contains(github.ref_name, '-docker.') && !contains(github.ref_name, '-beta.') }}
|
||||
type=raw,value=latest,enable=${{ !contains(github.ref_name, '-docker.') && !contains(github.ref_name, '-beta.') }}
|
||||
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
|
||||
node-version: 22.x
|
||||
- name: Checkout dbgate/dbgate-pro
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
|
||||
ref: a7c7947b1253fa0b2104ea86a65450d81dc114a0
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
@@ -61,32 +56,34 @@ jobs:
|
||||
yarn
|
||||
node sync.js --nowatch
|
||||
cd ..
|
||||
- name: adjustPackageJson
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
node adjustPackageJson --premium
|
||||
- name: yarn install
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn install
|
||||
|
||||
# yarn --version
|
||||
# yarn config set network-timeout 300000
|
||||
yarn install
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
|
||||
yarn setCurrentVersion
|
||||
|
||||
- name: printSecrets
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn printSecrets
|
||||
env:
|
||||
GIST_UPLOAD_SECRET : ${{secrets.GIST_UPLOAD_SECRET}}
|
||||
- name: Prepare docker image
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn run prepare:docker
|
||||
|
||||
yarn run prepare:docker
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
- name: Login to DockerHub
|
||||
@@ -94,7 +91,6 @@ jobs:
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
|
||||
48
.github/workflows/build-docker.yaml
vendored
48
.github/workflows/build-docker.yaml
vendored
@@ -1,20 +1,19 @@
|
||||
name: Docker image
|
||||
|
||||
on:
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Docker image Community
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+'
|
||||
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
- v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-22.04]
|
||||
|
||||
os:
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- name: Context
|
||||
env:
|
||||
@@ -23,13 +22,11 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: |
|
||||
dbgate/dbgate
|
||||
images: dbgate/dbgate
|
||||
flavor: |
|
||||
latest=false
|
||||
tags: |
|
||||
@@ -37,7 +34,6 @@ jobs:
|
||||
|
||||
type=match,pattern=\d+.\d+.\d+,enable=${{ !contains(github.ref_name, '-docker.') && !contains(github.ref_name, '-beta.') }}
|
||||
type=raw,value=latest,enable=${{ !contains(github.ref_name, '-docker.') && !contains(github.ref_name, '-beta.') }}
|
||||
|
||||
- name: Docker alpine meta
|
||||
id: alpmeta
|
||||
uses: docker/metadata-action@v4
|
||||
@@ -51,30 +47,30 @@ jobs:
|
||||
|
||||
type=match,pattern=\d+.\d+.\d+,suffix=-alpine,enable=${{ !contains(github.ref_name, '-docker.') && !contains(github.ref_name, '-beta.') }}
|
||||
type=raw,value=alpine,enable=${{ !contains(github.ref_name, '-docker.') && !contains(github.ref_name, '-beta.') }}
|
||||
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
node-version: 22.x
|
||||
- name: adjustPackageJson
|
||||
run: |
|
||||
|
||||
node adjustPackageJson --community
|
||||
- name: yarn install
|
||||
run: |
|
||||
|
||||
# yarn --version
|
||||
# yarn config set network-timeout 300000
|
||||
yarn install
|
||||
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
|
||||
yarn setCurrentVersion
|
||||
|
||||
- name: printSecrets
|
||||
run: |
|
||||
yarn printSecrets
|
||||
env:
|
||||
GIST_UPLOAD_SECRET : ${{secrets.GIST_UPLOAD_SECRET}}
|
||||
- name: Prepare docker image
|
||||
run: |
|
||||
yarn run prepare:docker
|
||||
|
||||
yarn run prepare:docker
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
- name: Login to DockerHub
|
||||
@@ -82,7 +78,6 @@ jobs:
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
@@ -90,7 +85,6 @@ jobs:
|
||||
context: ./docker
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
|
||||
- name: Build and push alpine
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
|
||||
103
.github/workflows/build-npm-pro.yaml
vendored
Normal file
103
.github/workflows/build-npm-pro.yaml
vendored
Normal file
@@ -0,0 +1,103 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: NPM packages PREMIUM
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
- v[0-9]+.[0-9]+.[0-9]+-alpha.[0-9]+
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- name: Context
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
run: echo "$GITHUB_CONTEXT"
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 22.x
|
||||
- name: Checkout dbgate/dbgate-pro
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: a7c7947b1253fa0b2104ea86a65450d81dc114a0
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
mv dbgate-pro/* ../dbgate-pro/
|
||||
cd ..
|
||||
mkdir dbgate-merged
|
||||
cd dbgate-pro
|
||||
cd sync
|
||||
yarn
|
||||
node sync.js --nowatch
|
||||
cd ..
|
||||
- name: adjustNpmPackageJsonPremium
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
node adjustNpmPackageJsonPremium
|
||||
- name: Update npm
|
||||
run: npm install -g npm@latest
|
||||
- name: Remove dbmodel - should be not published
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
rm -rf packages/dbmodel
|
||||
- name: yarn install
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn install
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged
|
||||
yarn setCurrentVersion
|
||||
- name: Compute npm dist-tag
|
||||
run: |
|
||||
if [[ "${GITHUB_REF_NAME}" =~ -alpha\. ]]; then
|
||||
echo "NPM_TAG=alpha" >> $GITHUB_ENV
|
||||
else
|
||||
echo "NPM_TAG=latest" >> $GITHUB_ENV
|
||||
fi
|
||||
- name: Publish dbgate-api-premium
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged/packages/api
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-web-premium
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged/packages/web
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-serve-premium
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged/packages/serve
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-cosmosdb
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged/plugins/dbgate-plugin-cosmosdb
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-firestore
|
||||
run: |
|
||||
cd ..
|
||||
cd dbgate-merged/plugins/dbgate-plugin-firestore
|
||||
npm publish --tag "$NPM_TAG"
|
||||
124
.github/workflows/build-npm.yaml
vendored
124
.github/workflows/build-npm.yaml
vendored
@@ -1,27 +1,22 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: NPM packages
|
||||
|
||||
# on: [push]
|
||||
|
||||
on:
|
||||
'on':
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+-alpha.[0-9]+'
|
||||
|
||||
# on:
|
||||
# push:
|
||||
# branches:
|
||||
# - production
|
||||
|
||||
- v[0-9]+.[0-9]+.[0-9]+
|
||||
- v[0-9]+.[0-9]+.[0-9]+-alpha.[0-9]+
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-22.04]
|
||||
|
||||
os:
|
||||
- ubuntu-22.04
|
||||
steps:
|
||||
- name: Context
|
||||
env:
|
||||
@@ -30,132 +25,111 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Use Node.js 18.x
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 18.x
|
||||
|
||||
- name: Configure NPM token
|
||||
env:
|
||||
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
run: |
|
||||
npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
|
||||
|
||||
node-version: 22.x
|
||||
- name: Update npm
|
||||
run: npm install -g npm@latest
|
||||
- name: yarn install
|
||||
run: |
|
||||
yarn install
|
||||
|
||||
- name: setCurrentVersion
|
||||
run: |
|
||||
yarn setCurrentVersion
|
||||
|
||||
- name: printSecrets
|
||||
- name: Compute npm dist-tag
|
||||
run: |
|
||||
yarn printSecrets
|
||||
env:
|
||||
GIST_UPLOAD_SECRET : ${{secrets.GIST_UPLOAD_SECRET}}
|
||||
|
||||
if [[ "${GITHUB_REF_NAME}" =~ -alpha\. ]]; then
|
||||
echo "NPM_TAG=alpha" >> $GITHUB_ENV
|
||||
else
|
||||
echo "NPM_TAG=latest" >> $GITHUB_ENV
|
||||
fi
|
||||
- name: Publish types
|
||||
working-directory: packages/types
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish tools
|
||||
working-directory: packages/tools
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish sqltree
|
||||
working-directory: packages/sqltree
|
||||
run: |
|
||||
npm publish
|
||||
npm publish --tag "$NPM_TAG"
|
||||
|
||||
- name: Publish api
|
||||
working-directory: packages/api
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish datalib
|
||||
working-directory: packages/datalib
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish filterparser
|
||||
working-directory: packages/filterparser
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish web
|
||||
working-directory: packages/web
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
- name: Publish dbgate (obsolete)
|
||||
working-directory: packages/dbgate
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-serve
|
||||
working-directory: packages/serve
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbmodel
|
||||
working-directory: packages/dbmodel
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-csv
|
||||
working-directory: plugins/dbgate-plugin-csv
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-xml
|
||||
working-directory: plugins/dbgate-plugin-xml
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-excel
|
||||
working-directory: plugins/dbgate-plugin-excel
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-mssql
|
||||
working-directory: plugins/dbgate-plugin-mssql
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-mysql
|
||||
working-directory: plugins/dbgate-plugin-mysql
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-mongo
|
||||
working-directory: plugins/dbgate-plugin-mongo
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-postgres
|
||||
working-directory: plugins/dbgate-plugin-postgres
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-sqlite
|
||||
working-directory: plugins/dbgate-plugin-sqlite
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-redis
|
||||
working-directory: plugins/dbgate-plugin-redis
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-oracle
|
||||
working-directory: plugins/dbgate-plugin-oracle
|
||||
run: |
|
||||
npm publish
|
||||
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-clickhouse
|
||||
working-directory: plugins/dbgate-plugin-clickhouse
|
||||
run: |
|
||||
npm publish
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-dbf
|
||||
working-directory: plugins/dbgate-plugin-dbf
|
||||
run: |
|
||||
npm publish --tag "$NPM_TAG"
|
||||
- name: Publish dbgate-plugin-cassandra
|
||||
working-directory: plugins/dbgate-plugin-cassandra
|
||||
run: |
|
||||
npm publish --tag "$NPM_TAG"
|
||||
|
||||
46
.github/workflows/build-test-containers.yaml
vendored
Normal file
46
.github/workflows/build-test-containers.yaml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Build test containers
|
||||
'on':
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- feature/**
|
||||
- hotfix/**
|
||||
paths:
|
||||
- e2e-tests/containers/**
|
||||
jobs:
|
||||
build-docker-ssh:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v3
|
||||
- name: Build mysql-ssh-login image
|
||||
run: |
|
||||
docker build -t dbgate/mysql-ssh-login:latest e2e-tests/containers/mysql-ssh-login
|
||||
- name: Build mysql-ssh-keyfile image
|
||||
run: |
|
||||
docker build -t dbgate/mysql-ssh-keyfile:latest e2e-tests/containers/mysql-ssh-keyfile
|
||||
- name: Build dex image
|
||||
run: |
|
||||
docker build -t dbgate/dex:latest e2e-tests/containers/dex
|
||||
- name: Log in to GHCR
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Push mysql-ssh-login to GHCR
|
||||
run: |
|
||||
docker tag dbgate/mysql-ssh-login:latest ghcr.io/dbgate/mysql-ssh-login:latest
|
||||
docker push ghcr.io/dbgate/mysql-ssh-login:latest
|
||||
- name: Push mysql-ssh-keyfile to GHCR
|
||||
run: |
|
||||
docker tag dbgate/mysql-ssh-keyfile:latest ghcr.io/dbgate/mysql-ssh-keyfile:latest
|
||||
docker push ghcr.io/dbgate/mysql-ssh-keyfile:latest
|
||||
- name: Push dex to GHCR
|
||||
run: |
|
||||
docker tag dbgate/dex:latest ghcr.io/dbgate/dex:latest
|
||||
docker push ghcr.io/dbgate/dex:latest
|
||||
36
.github/workflows/diflow.yaml
vendored
Normal file
36
.github/workflows/diflow.yaml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Diflow merge
|
||||
'on':
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
merge:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 22.x
|
||||
- name: Checkout dbgate/diflow
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: dbgate/diflow
|
||||
path: diflow
|
||||
- name: Diflow install
|
||||
run: |
|
||||
cd diflow
|
||||
npm install
|
||||
npm run build
|
||||
- name: Git config
|
||||
run: |
|
||||
git config --global user.email "info@dbgate.io"
|
||||
git config --global user.name "Diflow"
|
||||
- name: Diflow run
|
||||
run: |
|
||||
cd diflow
|
||||
node dist/diflow.js sync -r https://DIFLOW_GIT_SECRET@github.com/dbgate/dbgate-diflow-config.git -b master
|
||||
env:
|
||||
DIFLOW_GIT_SECRET: ${{ secrets.DIFLOW_GIT_SECRET }}
|
||||
148
.github/workflows/e2e-pro.yaml
vendored
Normal file
148
.github/workflows/e2e-pro.yaml
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Cypress tests with screenshots PREMIUM
|
||||
'on':
|
||||
push:
|
||||
branches:
|
||||
- stable
|
||||
- master
|
||||
- develop
|
||||
- feature/**
|
||||
- hotfix/**
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
e2e-tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 22.x
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Checkout dbgate/dbgate-pro
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
repository: dbgate/dbgate-pro
|
||||
token: ${{ secrets.GH_TOKEN }}
|
||||
path: dbgate-pro
|
||||
ref: a7c7947b1253fa0b2104ea86a65450d81dc114a0
|
||||
- name: Merge dbgate/dbgate-pro
|
||||
run: |
|
||||
mkdir ../dbgate-pro
|
||||
mv dbgate-pro/* ../dbgate-pro/
|
||||
cd ..
|
||||
mkdir dbgate-merged
|
||||
cd dbgate-pro
|
||||
cd sync
|
||||
yarn
|
||||
node sync.js --nowatch
|
||||
cd ..
|
||||
- name: yarn install
|
||||
run: |
|
||||
cd ../dbgate-merged
|
||||
yarn install
|
||||
- name: Build packer dist for cypress
|
||||
run: |
|
||||
cd ../dbgate-merged
|
||||
yarn prepare:packer
|
||||
- name: yarn install cypress
|
||||
run: |
|
||||
cd ../dbgate-merged
|
||||
cd e2e-tests
|
||||
yarn install
|
||||
- name: Run Cypress tests
|
||||
run: |
|
||||
cd ../dbgate-merged
|
||||
cd e2e-tests
|
||||
yarn test:ci
|
||||
- name: ls -R
|
||||
run: |
|
||||
cd ../dbgate-merged
|
||||
ls -R
|
||||
- name: Copy screenshots
|
||||
run: |
|
||||
mkdir screenshots
|
||||
cp ../dbgate-merged/e2e-tests/screenshots/*.png screenshots/
|
||||
- name: Upload E2E screenshots
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: screenshots
|
||||
path: screenshots
|
||||
- name: Push E2E screenshots - stable
|
||||
if: ${{ github.ref_name == 'stable' }}
|
||||
run: |
|
||||
git config --global user.email "info@dbgate.info"
|
||||
git config --global user.name "GitHub Actions"
|
||||
git clone https://${{ secrets.DIFLOW_GIT_SECRET }}@github.com/dbgate/dbgate-img.git
|
||||
cp ../dbgate-merged/e2e-tests/screenshots/*.png dbgate-img/static/img
|
||||
cd dbgate-img/static/img
|
||||
git add .
|
||||
git commit --amend --no-edit
|
||||
git push --force
|
||||
- name: Push E2E screenshots - master
|
||||
if: ${{ github.ref_name == 'master' }}
|
||||
run: |
|
||||
git config --global user.email "info@dbgate.info"
|
||||
git config --global user.name "GitHub Actions"
|
||||
git clone https://${{ secrets.DIFLOW_GIT_SECRET }}@github.com/dbgate/dbgate-img.git
|
||||
cp ../dbgate-merged/e2e-tests/screenshots/*.png dbgate-img/static/img-dev
|
||||
cd dbgate-img/static/img-dev
|
||||
git add .
|
||||
git commit --amend --no-edit
|
||||
git push --force
|
||||
services:
|
||||
postgres-cypress:
|
||||
image: postgres
|
||||
options: '--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5'
|
||||
env:
|
||||
POSTGRES_PASSWORD: Pwd2020Db
|
||||
ports:
|
||||
- '16000:5432'
|
||||
mysql-cypress:
|
||||
image: mysql:8.0.18
|
||||
ports:
|
||||
- '16004:3306'
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: Pwd2020Db
|
||||
mysql-ssh-login:
|
||||
image: ghcr.io/dbgate/mysql-ssh-login:latest
|
||||
ports:
|
||||
- '16012:22'
|
||||
mysql-ssh-keyfile:
|
||||
image: ghcr.io/dbgate/mysql-ssh-keyfile:latest
|
||||
ports:
|
||||
- '16008:22'
|
||||
dex:
|
||||
image: ghcr.io/dbgate/dex:latest
|
||||
ports:
|
||||
- '16009:5556'
|
||||
mongo:
|
||||
image: mongo:4.4.29
|
||||
env:
|
||||
MONGO_INITDB_ROOT_USERNAME: root
|
||||
MONGO_INITDB_ROOT_PASSWORD: Pwd2020Db
|
||||
ports:
|
||||
- '16010:27017'
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- '16011:6379'
|
||||
mssql:
|
||||
image: mcr.microsoft.com/mssql/server
|
||||
ports:
|
||||
- '16014:1433'
|
||||
env:
|
||||
ACCEPT_EULA: 'Y'
|
||||
SA_PASSWORD: Pwd2020Db
|
||||
MSSQL_PID: Express
|
||||
oracle:
|
||||
image: gvenzl/oracle-xe:21-slim
|
||||
env:
|
||||
ORACLE_PASSWORD: Pwd2020Db
|
||||
ports:
|
||||
- '16013:1521'
|
||||
51
.github/workflows/process-templates.yaml
vendored
Normal file
51
.github/workflows/process-templates.yaml
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Update Workflows
|
||||
'on':
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- workflow-templates/**
|
||||
jobs:
|
||||
update-workflows:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
token: ${{ secrets.WORKFLOW_CHANGE_ACCESS_TOKEN }}
|
||||
- name: git pull
|
||||
run: |
|
||||
git pull
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 22
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
rm package.json
|
||||
rm yarn.lock
|
||||
yarn add -W js-yaml lodash
|
||||
- name: Run workflow generation
|
||||
run: |
|
||||
node common/processWorkflows.js
|
||||
- name: Git config
|
||||
run: |
|
||||
git config --global user.email "info@dbgate.io"
|
||||
git config --global user.name "CI workflows"
|
||||
- name: Commit changes
|
||||
run: |
|
||||
# Only commit if there are changes
|
||||
if [[ -n "$(git status --porcelain)" ]]; then
|
||||
git add .github/workflows
|
||||
git commit -m "chore: auto-update github workflows"
|
||||
else
|
||||
echo "No changes to commit"
|
||||
fi
|
||||
- name: Push changes
|
||||
uses: ad-m/github-push-action@v0.6.0
|
||||
with:
|
||||
github_token: ${{ secrets.WORKFLOW_CHANGE_ACCESS_TOKEN }}
|
||||
branch: master
|
||||
107
.github/workflows/run-tests.yaml
vendored
107
.github/workflows/run-tests.yaml
vendored
@@ -1,21 +1,26 @@
|
||||
name: Run tests
|
||||
on:
|
||||
# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
name: Integration and unit tests
|
||||
'on':
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
- feature/**
|
||||
- hotfix/**
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
test-runner:
|
||||
all-tests:
|
||||
runs-on: ubuntu-latest
|
||||
container: node:18
|
||||
|
||||
steps:
|
||||
- name: Context
|
||||
env:
|
||||
GITHUB_CONTEXT: ${{ toJson(github) }}
|
||||
run: echo "$GITHUB_CONTEXT"
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js 22.x
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 22.x
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: yarn install
|
||||
@@ -25,7 +30,6 @@ jobs:
|
||||
run: |
|
||||
cd integration-tests
|
||||
yarn test:ci
|
||||
# yarn wait:ci
|
||||
- name: Filter parser tests
|
||||
if: always()
|
||||
run: |
|
||||
@@ -36,52 +40,61 @@ jobs:
|
||||
run: |
|
||||
cd packages/datalib
|
||||
yarn test:ci
|
||||
- uses: tanmen/jest-reporter@v1
|
||||
- name: Tools tests
|
||||
if: always()
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
result-file: integration-tests/result.json
|
||||
action-name: Integration tests
|
||||
- uses: tanmen/jest-reporter@v1
|
||||
if: always()
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
result-file: packages/filterparser/result.json
|
||||
action-name: Filter parser test results
|
||||
- uses: tanmen/jest-reporter@v1
|
||||
if: always()
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
result-file: packages/datalib/result.json
|
||||
action-name: Datalib (perspectives) test results
|
||||
|
||||
run: |
|
||||
cd packages/tools
|
||||
yarn test:ci
|
||||
services:
|
||||
postgres:
|
||||
postgres-integr:
|
||||
image: postgres
|
||||
env:
|
||||
POSTGRES_PASSWORD: Pwd2020Db
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
|
||||
mysql:
|
||||
options: '--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5'
|
||||
ports:
|
||||
- '15000:5432'
|
||||
mysql-integr:
|
||||
image: mysql:8.0.18
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: Pwd2020Db
|
||||
|
||||
mssql:
|
||||
ports:
|
||||
- '15001:3306'
|
||||
mssql-integr:
|
||||
image: mcr.microsoft.com/mssql/server
|
||||
env:
|
||||
ACCEPT_EULA: Y
|
||||
ACCEPT_EULA: 'Y'
|
||||
SA_PASSWORD: Pwd2020Db
|
||||
MSSQL_PID: Express
|
||||
|
||||
clickhouse:
|
||||
image: bitnami/clickhouse:24.8.4
|
||||
ports:
|
||||
- '15002:1433'
|
||||
clickhouse-integr:
|
||||
image: bitnamilegacy/clickhouse:24.8.4
|
||||
env:
|
||||
CLICKHOUSE_ADMIN_PASSWORD: Pwd2020Db
|
||||
|
||||
# cockroachdb:
|
||||
# image: cockroachdb/cockroach
|
||||
ports:
|
||||
- '15005:8123'
|
||||
oracle-integr:
|
||||
image: gvenzl/oracle-xe:21-slim
|
||||
env:
|
||||
ORACLE_PASSWORD: Pwd2020Db
|
||||
ports:
|
||||
- '15006:1521'
|
||||
cassandradb:
|
||||
image: cassandra:5.0.2
|
||||
ports:
|
||||
- '15942:9042'
|
||||
libsql:
|
||||
image: ghcr.io/tursodatabase/libsql-server:latest
|
||||
ports:
|
||||
- '8080:8080'
|
||||
firebird:
|
||||
image: firebirdsql/firebird:latest
|
||||
env:
|
||||
FIREBIRD_DATABASE: mydatabase.fdb
|
||||
FIREBIRD_USER: dbuser
|
||||
FIREBIRD_PASSWORD: dbpassword
|
||||
ISC_PASSWORD: masterkey
|
||||
FIREBIRD_TRACE: false
|
||||
FIREBIRD_USE_LEGACY_AUTH: true
|
||||
ports:
|
||||
- '3050:3050'
|
||||
|
||||
8
.gitignore
vendored
8
.gitignore
vendored
@@ -24,13 +24,15 @@ docker/plugins
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.translation
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
app/src/nativeModulesContent.js
|
||||
packages/api/src/nativeModulesContent.js
|
||||
packages/api/src/packagedPluginsContent.js
|
||||
.VSCodeCounter
|
||||
|
||||
packages/web/public/*.html
|
||||
packages/web/public/*.html
|
||||
e2e-tests/screenshots/*.png
|
||||
my_guitar_shop.db
|
||||
.aider*
|
||||
|
||||
59
.vscode/launch.json
vendored
59
.vscode/launch.json
vendored
@@ -1,20 +1,41 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "Launch API",
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}/packages/api/src/index.js",
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/**/*.js"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Debug App",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/packages/api/src/index.js",
|
||||
"envFile": "${workspaceFolder}/packages/api/.env",
|
||||
"args": ["--listen-api"],
|
||||
"console": "integratedTerminal",
|
||||
"restart": true,
|
||||
"runtimeExecutable": "node",
|
||||
"skipFiles": ["<node_internals>/**"]
|
||||
},
|
||||
{
|
||||
"name": "Debug App (Break on Start)",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/packages/api/src/index.js",
|
||||
"args": ["--listen-api"],
|
||||
"envFile": "${workspaceFolder}/.env",
|
||||
"console": "integratedTerminal",
|
||||
"restart": true,
|
||||
"runtimeExecutable": "node",
|
||||
"skipFiles": ["<node_internals>/**"],
|
||||
"stopOnEntry": true
|
||||
},
|
||||
{
|
||||
"name": "Attach to Process",
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"port": 9229,
|
||||
"restart": true,
|
||||
"localRoot": "${workspaceFolder}",
|
||||
"remoteRoot": "${workspaceFolder}",
|
||||
"skipFiles": ["<node_internals>/**"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
7
.vscode/settings.json
vendored
7
.vscode/settings.json
vendored
@@ -2,5 +2,10 @@
|
||||
"jestrunner.jestCommand": "node_modules/.bin/cross-env DEVMODE=1 LOCALTEST=1 node_modules/.bin/jest",
|
||||
"cSpell.words": [
|
||||
"dbgate"
|
||||
]
|
||||
],
|
||||
"chat.tools.terminal.autoApprove": {
|
||||
"yarn workspace": true,
|
||||
"yarn --cwd packages/rest": true,
|
||||
"yarn --cwd packages/web": true
|
||||
}
|
||||
}
|
||||
8
AGENTS.md
Normal file
8
AGENTS.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# AGENTS
|
||||
|
||||
## Rules
|
||||
|
||||
- In newly added code, always use `DBGM-00000` for message/error codes; do not introduce new numbered DBGM codes such as `DBGM-00316`.
|
||||
- GUI uses Svelte4 (packages/web)
|
||||
- GUI is tested with E2E tests in `e2e-tests` folder, using Cypress. Use data-testid attribute in components to make them easier to test.
|
||||
- data-testid format: ComponentName_identifier. Use reasonable identifiers
|
||||
506
CHANGELOG.md
506
CHANGELOG.md
@@ -8,10 +8,512 @@ Builds:
|
||||
- linux - application for linux
|
||||
- win - application for Windows
|
||||
|
||||
## 7.1.0
|
||||
- ADDED: Support for Amazon DynamoDB (Premium)
|
||||
- ADDED: Connect to API endpoints - OpenAPI (Swagger), GraphQL and oData (Premium)
|
||||
- FIXED: Redis key list infinite loading when first key hierarchy segment is numeric (e.g. "0:profile:1234") #1363
|
||||
- FIXED: Sum of PostgreSQL numeric values always 0 #1354
|
||||
- FIXED: SQL SERVER Table structure key duplication #1351
|
||||
- FIXED: SQL Server - Incorrect SQL generated for 'Group by Year/Month/Day' #1350
|
||||
- ADDED: Choose drivers available in connection dialog
|
||||
- FIXED: Show query results for CTE (WITH) queries
|
||||
- CHANGED: Used rolldown bundler instead of legacy rollup
|
||||
|
||||
## 7.0.6
|
||||
- ADDED: Reset password for Team Premium edition
|
||||
- ADDED: Encrypting passwords sent to frontend when using SHELL_CONNECTION=1 in Docker Community edition #1357
|
||||
|
||||
## 7.0.4
|
||||
- FIXED: MS SQL server export to CSV does not convert bit FALSE to 0 #1276
|
||||
- ADDED: MySQL FULLTEXT support #1305
|
||||
- FIXED: Error messages in Chinese will display garbled characters(MS SQL over ODBC) #1321
|
||||
- FIXED: Table's Show SQL fails to display precision and scale for NUMERIC/DECIMAL types in PostgreSQL #1325
|
||||
- FIXED: Export to Excel/CSV is broken for certain data types in v7.0.0 #1327
|
||||
- ADDED: Null value with keyboard shortcut in form view #1332
|
||||
- FIXED: Clicking into active form cell discards changes #1334
|
||||
- FIXED: Remember selection after filtering #1335
|
||||
- FIXED: Unable to use 'Group By' or one of the aggregate functions on tables containing text columns #1348
|
||||
- CHANGED: Improved custom connection color palette
|
||||
|
||||
## 7.0.3
|
||||
- FIXED: Optimalized loading MySQL primary keys #1261
|
||||
- FIXED: Test connection now works for MS Entra authentication #1315
|
||||
- FIXED: SQL Server - Unable to use 'Is Empty or Null' or 'Has Not Empty Value' filters on a field with data type TEXT #1338
|
||||
- FIXED: Play triangle too large for text-wrapped queries #1337
|
||||
- FIXED: Text wraps mid-word in form view, making it illegible #1333
|
||||
- FIXED: Cell View autodetects Form instead of Map for geometry/geography #1330
|
||||
- FIXED: Search for database in cloud connection #1329
|
||||
- ADDED: Toolstrip could be configured to the bottom of the tab #1326
|
||||
- CHANGED: Upgraded node for DbGate AWS distribution
|
||||
|
||||
## 7.0.1
|
||||
- FIXED: Foreign key actions not detected on PostgreSQL #1323
|
||||
- FIXED: Vulnerabilities in bundled dependencies: axios, cross-spawn, glob #1322
|
||||
- FIXED: The JsonB field in the cell data view always displays as null. #1320
|
||||
- ADDED: Possibility to skip computed coumn in SQL generator
|
||||
- ADDED: Improved team file editing, move between team folders
|
||||
- ADDED: Korean localization
|
||||
- FIXED: Added missing localization strings
|
||||
- ADDED: Default editor theme is part of application theme now
|
||||
|
||||
## 7.0.0
|
||||
- CHANGED: New design of application, new theme system
|
||||
- ADDED: Theme AI assistant - create custom themes using AI (Premium)
|
||||
- CHANGED: Themes are now defined in JSON files, custom themes could be shared via DbGate Cloud
|
||||
- REMOVED: Custom themes are no longer part of plugins
|
||||
- CHANGED: Huge improvements of Redis support
|
||||
- ADDED: Support for Redis JSON and Stream types
|
||||
- ADDED: Editing Redis values (Strings, Hashes, Lists, Sets, Sorted Sets, JSON, Streams)
|
||||
- ADDED: Support for Team Folders (Team Premium)
|
||||
- CHANGED: Upgraded Svelte to version 4
|
||||
- ADDED: Differentiate pinned database with same name #1306
|
||||
- ADDED: Database icons/logos for faster visual recognition #1222
|
||||
- CHANGED: Reorganized left sidebar widgets
|
||||
- ADDED: Widget for currently opened tabs
|
||||
|
||||
## 6.8.2
|
||||
- FIXED: Initialize storage database from envoronment variables failed with PostgreSQL
|
||||
|
||||
## 6.8.1
|
||||
- FIXED: Won't navigate to the relevant field on click of a field in columns #1303
|
||||
|
||||
## 6.8.0
|
||||
- ADDED: Form cell view for detailed data inspection and editing in data grids, with multi-row bulk editing support
|
||||
- CHANGED: Cell data sidebar moved to right side, now is part of data grid
|
||||
- FIXED: Improved widget resizing algorithm
|
||||
- FIXED: Word wrap feature in SQL editor
|
||||
- CHANGED: Data grid keyboard navigation improvements
|
||||
- CHANGED: Improved PostgreSQL decimal type support in data grid #1214
|
||||
- ADDED: Retrieve number of databases from Redis configuration #1278
|
||||
- ADDED: Run macro context menu (Premium)
|
||||
- ADDED: Support for skip update columns in replicator
|
||||
- FIXED: UTF-8 BOM handling in CSV input
|
||||
- CHANGED: Advanced export is now part of Community edition
|
||||
- FIXED: SQLite foreign key constraint types
|
||||
- FIXED: Double drop constraint issue
|
||||
- CHANGED: Improved map view lat/lon field autodetection
|
||||
- FIXED: Alter table operations and constraint sanitization
|
||||
- ADDED: Import connections from environment variables (Team Premium)
|
||||
|
||||
## 6.7.3
|
||||
- FIXED: Fixed problem in analyser core - in PostgreSQL, after dropping table, dropped table still appeared in structure
|
||||
- FIXED: PostgreSQL numeric columns do not align right #1254
|
||||
- ADDED: Custom thousands separator #1213
|
||||
|
||||
## 6.7.2
|
||||
- CHANGED: Settings modal redesign - now is settings opened in tab instead of modal, similarily as in VSCode
|
||||
- FIXED: Fixed search in table shortcuts #1273
|
||||
- CHANGED: Improved foreign key editor UX
|
||||
- FIXED: Fixed incremental DB structure refresh for PostgreSQL, optimalized slow loading primary keys in PostgreSQL
|
||||
- CHANGED: You could now choose, how to refresh structure, added ability to disconnect or reconnect
|
||||
- ADDED: Better processing of table backups, generate table restore script #1274
|
||||
- CHANGED: Improved storage of settings, especially for Team Premium edition
|
||||
|
||||
## 6.7.1
|
||||
- ADDED: LANGUAGE environment variable for the web version. #1266
|
||||
- ADDED: New localizations (Italian, Portugese (Brazil), Japanese)
|
||||
- ADDED: Option to detect language from browser settings in web version
|
||||
- FIXED: Check updates option no longer available in 6.7.0 #1263
|
||||
- FIXED: A MERGE statement must be terminated by a semi-colon (;), but dbgate stripped it. #1257
|
||||
- ADDED: Show table size #552
|
||||
- ADDED: Sort tables by size and by row count
|
||||
- ADDED: Connect to Legacy MongoDB (Premium) #540
|
||||
- FIXED: Fixed problems in saving team files in Team Premium edition
|
||||
- CHANGED: Files are by default saved to team folders in Team Premium edition
|
||||
- ADDED: Other files types supported in Team Premium edition (diagrams, query design, perspectives, import/export jobs, shell scripts, database compare jobs)
|
||||
|
||||
## 6.7.0
|
||||
- ADDED: Added localization support, now you can use DbGate in multiple languages (French, Spanish, German, Czech, Slovak, Simplified Chinese) #347 #705 #939 #1079
|
||||
- CHANGED: Solved many issues with binary fields, huge performance improvements in binary fields processing
|
||||
- FIXED: Export to CSV produces empty file #1247
|
||||
- CHANGED: Upgraded electron to version 38 #1243
|
||||
- FIXED: PostgreSQL export to SQL and XML doesn't include bytea field contents #1228
|
||||
- FIXED: Export CSV broken #1080
|
||||
- FIXED: Inconsistent handling of hex-like strings #680
|
||||
- FIXED: Export mongodb binary cell as binary file #292
|
||||
- CHANGED: SSL is used automatically for connections to Azure databases
|
||||
- ADDED: New export formats CSV for Excel, TSV
|
||||
- FIXED: Horizontal scrolling on macOS trackpad/Magic Mouse #1250
|
||||
|
||||
## 6.6.12
|
||||
- FIXED: Cannot paste license key on Mac (special commands like copy/paste were disabled on license screen)
|
||||
|
||||
## 6.6.11
|
||||
- FIXED: Fixed theming on application startup
|
||||
- CHANGED: Improved licensing page
|
||||
|
||||
## 6.6.10
|
||||
- FIXED: License from environment variable is not refreshed #1245
|
||||
- FIXED: connection closing / reconnecting #1237
|
||||
- ADDED: retain history across multiple queries #1236
|
||||
- ADDED: load CSVs to temp tables #1235
|
||||
- FIXED: Not possible to scroll the data view horizontally by pressing shift and scroll mouse middle button on Mac #453
|
||||
- FIXED: Expired trial workflow (Premium)
|
||||
- ADDED: Column name collision resolving #1234 (MySQL)
|
||||
|
||||
## 6.6.8
|
||||
- CHANGED: Windows executable now uses Azure trusted signing certificate
|
||||
- CHANGED: NPM packages now use GitHub OIDC provenance signing for better security
|
||||
- CHANGED: Some features moved to Premium edition (master/detail views, FK lookups, column expansion, split view, advanced export/import, data archives, grouping, macros)
|
||||
|
||||
## 6.6.6
|
||||
- ADDED: Allow disable/re-enable filter #1174
|
||||
- ADDED: Close right side tabs #1219
|
||||
- ADDED: Ability disable execute current line in query editor #1209
|
||||
- ADDED: Support for Redis Cluster #1204 (Premium)
|
||||
|
||||
## 6.6.5
|
||||
- ADDED: SQL AI assistant - powered by database chat, could help you to write SQL queries (Premium)
|
||||
- ADDED: Explain SQL error (powered by AI) (Premium)
|
||||
- ADDED: Database chat (and SQL AI Assistant) now supports showing charts (Premium)
|
||||
- FIXED: Fixed editing new files and roles (Team Premium)
|
||||
- FIXED: Connection to standalone database could be now pinned
|
||||
- FIXED: Cannot open up large JSON file #1215
|
||||
|
||||
## 6.6.4
|
||||
- ADDED: AI Database chat now supports much more LLM models. (Premium)
|
||||
- ADDED: Possibility to use your own API key with OPENAI-compatible providers (OpenRouter, Antropic...)
|
||||
- ADDED: Possibility to use self-hosted own LLM (eg. Llama)
|
||||
- ADDED: Team files - save SQL files and define shared charts, assign roles and users to these objects (Team Premium)
|
||||
- FIXED: BUG: does no longer work with Cockroach DB #1202
|
||||
- FIXED: DbGate Web UI Connections do not display 'Databases' #1199
|
||||
- CHANGED: Redesign fof applications. Applications are now storted in single JSON file
|
||||
- ADDED: Application editor (Premium)
|
||||
- ADDED: Posibility to filter only tables with rows
|
||||
- FIXED: Fixed several issues with large Firebird databases
|
||||
- CHANGED: Community edition now supports shared folders in read-only mode
|
||||
|
||||
## 6.6.3
|
||||
- FIXED: Error “db.getCollection(…).renameCollection is not a function” when renaming collection in dbGate #1198
|
||||
- FIXED: Can't list databases from Azure SQL SERVER #1197
|
||||
- ADDED: Save zoom level in electron apps
|
||||
|
||||
## 6.6.2
|
||||
- ADDED: List of processes, ability to kill process (Server summary) #1178
|
||||
- ADDED: Database and table permissions (Team Premium edition)
|
||||
- ADDED: Redis search box - Scan all #1191
|
||||
- FIXED: Optimalized loading SQL server with descriptions #1187
|
||||
- CHANGED: Allow a much greater page size #1185
|
||||
- FIXED: Optimalized loading SQL server with descriptions #1187
|
||||
- FIXED: Executing queries for SQLite crash #1195
|
||||
|
||||
## 6.6.1
|
||||
- ADDED: Support for Mongo shell (Premium) - #1114
|
||||
- FIXED: Support for BLOB in Oracle #1181
|
||||
- ADDED: Connect to named SQL Server instance #340
|
||||
- ADDED: Support for SQL Server descriptions #1137
|
||||
- ADDED: Application log viewer
|
||||
- FIXED: Selecting default database in connection dialog
|
||||
- CHANGED: Improved logging system, added related database and connection to logs metadata
|
||||
|
||||
## 6.6.0
|
||||
- ADDED: Database chat - AI powered chatbot, which knows your database (Premium)
|
||||
- ADDED: Firestore support (Premium)
|
||||
- REMOVED: Query AI assistant (replaced by Database Chat) (Premium)
|
||||
- FIXED: Chart permissions were ignored (Premium)
|
||||
|
||||
## 6.5.6
|
||||
- ADDED: New object window - quick access to most common functions
|
||||
- ADDED: Possibility to disable split query by empty line #1162
|
||||
- ADDED: Possibility to opt out authentication #1152
|
||||
- FIXED: Separate schema mode now works in Team Premium edition
|
||||
- FIXED: Handled situation, when user enters expired license, which is already prolonged
|
||||
- FIXED: Fixed some minor problems of charts
|
||||
|
||||
## 6.5.5
|
||||
- ADDED: Administer cloud folder window
|
||||
- CHANGED: Cloud menu redesign
|
||||
- ADDED: Audit log (for Team Premium edition)
|
||||
- ADDED: Added new timeline chart type (line chart with time axis)
|
||||
- ADDED: Chart grouping (more measure determined from data)
|
||||
- CHANGED: Improved chart autodetection - string X axis (with bar type), COUNT as measure, split different measures
|
||||
- ADDED: Added chart data type detection
|
||||
- FIXED: Fixed chart displaying problems
|
||||
- FIXED: Fixed exporting chart to HTML
|
||||
- CHANGED: Choose COUNT measure without selecting underlying ID field (use virtual __count)
|
||||
- FIXED: Problems with authentification administration, especially for Postgres storage
|
||||
- CHANGED: Anonymous autentification (in Team Premium) is now by default disabled
|
||||
|
||||
## 6.5.3
|
||||
- CHANGED: Improved DbGate Cloud sign-in workflow
|
||||
- FIXED: Some fixes and error handling in new charts engine
|
||||
- ADDED: Charts - ability to choose aggregate function
|
||||
- CHANGED: Improved About window
|
||||
|
||||
## 6.5.2
|
||||
- CHANGED: Autodetecting charts is disabled by default #1145
|
||||
- CHANGED: Improved chart displaying workflow
|
||||
- ADDED: Ability to close chart
|
||||
|
||||
## 6.5.1
|
||||
- FIXED: DbGate Cloud e-mail sign-in method for desktop clients
|
||||
|
||||
## 6.5.0
|
||||
- ADDED: DbGate cloud - online storage for connections, SQL scripts and other objects
|
||||
- ADDED: Public knowledge base - common SQL scripts for specific DB engines (table sizes, index stats etc.)
|
||||
- ADDED: Query results could be visualised in charts (Premium)
|
||||
- REMOVED: Chart from selection, active charts - replaced by query result charts
|
||||
- ADDED: FirebirdSQL support
|
||||
- ADDED: SQL front matter - properties of SQL script
|
||||
- ADDED: Auto-execute SQL script on open (saved in SQL front matter)
|
||||
- CHANGED: Smaller widget icon panel
|
||||
- CHANGED: Applications and Single-connection mode removed from widget icon panel
|
||||
- CHANGED: Temporarily disabled MongoDB profiler support
|
||||
- FIXED: Pie chart distorted if settings change #838
|
||||
- FIXED: SQL server generated insert statement should exclude computed and timestamp columns #1111
|
||||
- ADDED: Added option "Show all columns when searching" #1118
|
||||
- ADDED: Copy cells/rows (e.g. column names) from Structure view #1119
|
||||
- ADDED: Setting "Show table aliases in code completion" #1122
|
||||
- FIXED: Vulnerability - check file paths in web version
|
||||
- FIXED: Very slow render of tables with very log cells
|
||||
|
||||
## 6.4.2
|
||||
|
||||
- ADDED: Source label to docker container #1105
|
||||
- FIXED: DbGate restart needed to take effect after trigger is created/deleted on mariadb #1112
|
||||
- ADDED: View PostgreSQL query console output #1108
|
||||
- FIXED: Single quote generete MySql error #1107
|
||||
- ADDED: Ability to limit query result count #1098
|
||||
- CHANGED: Correct processing of bigint columns #1087 #1055 #583
|
||||
- CHANGED: Improved and optimalized algorithm of loading redis keys #1062, #1034
|
||||
- FIXED: Fixed loading Redis keys with :: in key name
|
||||
|
||||
## 6.4.0
|
||||
- ADDED: DuckDB support
|
||||
- ADDED: Data deployer (Premium)
|
||||
- ADDED: Compare data between JSON lines file in archive and database table
|
||||
- CHANGED: Data Duplicator => Data Replicator (suitable for update, create and delete data, much more customizable)
|
||||
- REMOVED: Data duplicator GUI (replaced with Data Deployer)
|
||||
- ADDED: Exporting to ZIP file
|
||||
- ADDED: Download SQL and SQLite files
|
||||
- ADDED: Upload SQLite files
|
||||
- ADDED: Upload archive as ZIP folder (Premium)
|
||||
- ADDED: Compress, uncompress archive folder (Premium)
|
||||
- ADDED: Export connections and settings #357
|
||||
- ADDED: Filtering by MongoDB ObjectId works now also without ObjectId(...) wrapper
|
||||
- ADDED: Split queries using blank lines #1089
|
||||
- FIXED: JSON-to-Grid only works if there is no newline #1085
|
||||
- CHANGED: When running multiple commands in script, stop execution after first error #1070
|
||||
- FIXED: Selection rectangle remains visible after closing JSONB edit cell value form #1031
|
||||
- FIXED: Diplaying numeric FK column with right alignement #1021
|
||||
- ADDED: Additional arguments for MySQL and PostgreSQL backup #1092
|
||||
- CHANGED: Amazon and Azure instalations are not auto-upgraded by default
|
||||
|
||||
## 6.3.3
|
||||
- CHANGED: New administration UI, redesigned administration of users, connections and roles
|
||||
- ADDED: Encrypting passwords in team-premium edition
|
||||
- ADDED: Show scale bar on map #1090
|
||||
- FIXED: Fixed native backup/restore for MySQL+PostgreSQL over SSH tunnel #1092
|
||||
- CHANGED: Column mapping dialog - fixes and improvements for copying from one existing table into another
|
||||
- ADDED: Search in columns in table editor
|
||||
- ADDED: Line Wrap for JSON viewer #768
|
||||
|
||||
### 6.3.2
|
||||
- ADDED: "Use system theme" switch, use changed system theme without restart #1084
|
||||
- ADDED: "Skip SETNAME instruction" option for Redis #1077
|
||||
- FIXED: Clickhouse views are now available even for user with limited permissions #1076
|
||||
- ADDED: Multiple-token search delimited with comma (=OR) in structure search boxes
|
||||
- CHANGED: When filtering columns in data browser, data view shows only filtered columns
|
||||
- ADDED: Advanced settings for diagrams (Premium)
|
||||
- ADDED: Diagrams - zoom with Ctrl+mouse wheel
|
||||
- FIXED: Scrollable diagram exports + scroll by mouse drag
|
||||
- FIXED: Fixed many problems in diagrams when zoom is applied
|
||||
- FIXED: Correctly end connection process after succesful/unsuccesful connect
|
||||
|
||||
### 6.3.0
|
||||
- ADDED: Support for libSQL and Turso (Premium)
|
||||
- ADDED: Native backup and restore database for MySQL and PostgreSQL (Premium)
|
||||
- REMOVED: DbGate internal dump export for MySQL (replaced with call of mysqldump)
|
||||
- REMOVED: Import SQL dump with internal DbGate capabilities (replaced by calling of mysql and psql utilities)
|
||||
- FIXED: Many fixes in stream processing (imoprt/export), especialy for MongoDB
|
||||
- ADDED: Indicating progress of import/export tasks, better error reporting
|
||||
- CHANGED: #1060 - Changed shortcut for AI assistant
|
||||
- ADDED: /health endpoint with diagnostic info
|
||||
- FIXED: Linux Appimage crash => A JavaScript error occurred in the main process #1065 , #1067
|
||||
|
||||
### 6.2.1
|
||||
- ADDED: Commit/rollback and autocommit in scripts #1039
|
||||
- FIXED: Doesn't import all the records from MongoDB #1044
|
||||
- ADDED: Show server name alongside database name in title of the tab group #1041
|
||||
- ADDED: Can't open Sqlite through web #956
|
||||
- FIXED: Crashed after text input at columns search #1049
|
||||
- FIXED: Incorrect autojoin for foreign keys with more columns #1051
|
||||
- FIXED: Scroll in XML cell view, XML view respect themes
|
||||
- REMOVED: armv7l build for Linux (because of problems with glibc compatibility)
|
||||
- CHANGED: Upgraded to node:22 for docker builds
|
||||
- CHANGED: Upgraded SQLite engine version
|
||||
|
||||
### 6.2.0
|
||||
- ADDED: Query AI Assistant (Premium)
|
||||
- ADDED: Cassandra database support
|
||||
- ADDED: XML cell data view
|
||||
- FIXED: Filtering by value in Oracle #1009
|
||||
- FIXED: Operand type clash: uniqueidentifier is incompatible with int #565
|
||||
- FIXED: UX in administration
|
||||
- FIXED: Error reporting of broken connections (sometimes it caused infinite loading of data grid)
|
||||
- ADDED: Azure managed identity support (Team Premium)
|
||||
- ADDED: Expanded JSON cell view
|
||||
- CHANGED: Open real executed query, when datagrid shows loading error
|
||||
|
||||
### 6.1.6
|
||||
- FIXED: Hotfix build process for premium edition
|
||||
|
||||
### 6.1.5
|
||||
- FIXED: Serious security hotfix (for Docker and NPM, when using LOGIN and PASSWORD environment variables or LOGIN_PASSWORD_xxx)
|
||||
- no changes for desktop app and for Team premium edition, when using storage DB
|
||||
|
||||
### 6.1.4
|
||||
- CHANGED: Show Data/Structure button in one place #1015
|
||||
- ADDED: Data view coloring (every second row) #1014
|
||||
- ADDED: Pin icon for tab in preview mode (#1013)
|
||||
- FIXED: Pin icon misplaced #1007
|
||||
- ADDED: Set client name when connecting to redis #1004
|
||||
- ADDED: Redis loading keys optimalization #1002
|
||||
- ADDED: Browse redis keys with preview with keyboard
|
||||
- FIXED: Cannot expand tables and views returned from search #1000
|
||||
- ADDED: Expand all/Collapse all/Expand document commands in MongoDB JSON view #976
|
||||
- ADDED: Configurable page size for MongoDB collection #976
|
||||
- ADDED: Redis - SSL connection
|
||||
- ADDED: Redis JSON format for String values #852
|
||||
|
||||
### 6.1.3
|
||||
- FIXED: Fulltext search now shows correctly columns and SQL code lines
|
||||
- ADDED: Configuration of SSH tunnel local host (IPv4 vs IPv6). Should fix majority of SSH tunnel problems
|
||||
- FIXED: Handled SSH tunnel connection error, now it shows error instead of connecting forever
|
||||
- ADDED: Support of triggers (SQLite)
|
||||
- ADDED: Create, drop trigger
|
||||
- ADDED: Support for MySQL scheduled events
|
||||
- FIXED: Cannot connect to DB using askUser/askPassword mode #995
|
||||
- FIXED: Filtering in Oracle #992
|
||||
- ADDED: Open table in raw mode #991, #962
|
||||
- ADDED: Introduced E2E Cypress tests, test refactor
|
||||
|
||||
### 6.1.1
|
||||
- ADDED: Trigger support (SQL Server, PostgreSQL, MySQL, Oracle)
|
||||
- FIXED: PostgreSQL and Oracle export #970
|
||||
- FIXED: Cursor Becomes Stuck When Escaping "Case" #954
|
||||
- CHANGED: Defualt search criteria for tables are names only
|
||||
- FIXED: Search in packed list
|
||||
|
||||
### 6.1.0
|
||||
- ADDED: Fulltext search in DB model and connections, highlight searched names
|
||||
- ADDED: Tab preview mode configuration #963
|
||||
- CHANGED: Single-click to open server connection/database + ability to configure this #959
|
||||
- ADDED: Option to align numbers to right in data grid #957
|
||||
- FIXED: Cursor Becomes Stuck When Escaping "Case" #954
|
||||
- ADDED: Postgres GEOGRAPHY types are shown on map, event when executing query #948
|
||||
- FIXED: Error displaying CLOB and NCLOB in Oracle
|
||||
- FIXED: Analysing of foreign keys in Postgres and MS SQL, when the same FKS are used across different schemas
|
||||
- ADDED: Support of views, procedures, functions to Oracle. Added integration tests for Oracle
|
||||
- ADDED: Display "No rows" message, quick add new row
|
||||
- ADDED: Choose default database from list
|
||||
- ADDED: Default database is automatically selected on connect
|
||||
- ADDED: Apple-Silicon-only build for Mac #949
|
||||
- ADDED: Display comment into tables and column list #755
|
||||
|
||||
### 6.0.0
|
||||
- ADDED: Order or filter the indexes for huge tables #922
|
||||
- ADDED: Empty string filters
|
||||
- CHANGED: (Premium) Workflow for new installation (used in Docker and AWS distribution)
|
||||
- ADDED: Show stored procedure and function parameters (MySQL, PostgreSQL, SQL Server, MariaDB) #348
|
||||
- FIXED: Selected database has changed when closing database grouped tab #983
|
||||
- ADDED: Add line break option to editor #823
|
||||
- ADDED: Order or filter the indexes for huge tables #922
|
||||
- ADDED: Preview mode for the top bar tab like vscode #767
|
||||
- ADDED: Keyboard navigatioon between connections, databases and tables
|
||||
- FIXED: Fixed some issues in connection search
|
||||
- FIXED: Schema selection in Export does not provide all schemas #924
|
||||
- CHANGED: Standardized Window menu in MacOS app
|
||||
- FIXED: Typecast ::date is treated as a parameter #925
|
||||
- FIXED: App crashes when trying to 'Open Structure' in a readonly connection #926
|
||||
- FIXED: Selected database has changed when closing database grouped tab #938
|
||||
- CHANGED: (Premium) Query designer and Query perspective designer moved to Premium editioin
|
||||
- CHANGED: (Premium) Compare database tool - many improvements, moved to Premium edition
|
||||
- ADDED: (Premium) Export DB model - exporting model to YAML folder, JSON or SQL folder
|
||||
- CHANGED: Model deployer - many improvements, support of rename missing objects
|
||||
- ADDED: (Premium) Premium NPM distribution
|
||||
- CHANGED: (Premium) Amazon Redshift driver moved to Premium edition
|
||||
- ADDED: Generated API documentation https://dbgate.org/docs/apidoc.html
|
||||
- ADDED: NPM distribution now supports all dbgate database connectors, many improvements NPM packages
|
||||
- CHANGED: Optimalized size of NPM plugins (eg. dbgate-plugin-mssql from 1.34 MB to 71 kB)
|
||||
- CHANGED: Unsaved connections are now shown in "Recent and unsaved" folder after disconnect
|
||||
- FIXED: Correctly show focused control, as defined by UX standards
|
||||
- ADDED: Data duplicator - weak references
|
||||
- ADDED: View JSON detail of log messages from export/import jobs and query executions
|
||||
- ADDED: Rename procedure/function context menu
|
||||
- ADDED: Show SQL quick view
|
||||
|
||||
### 5.5.6
|
||||
- FIXED: DbGate process consumes 100% after UI closed - Mac, Linux (#917, #915)
|
||||
- FIXED: Correctly closing connection behind SSH tunnel (#920)
|
||||
- FIXED: Updating MongoDB documents on MongoDB 4 (#916)
|
||||
- FIXED: (Premium) DbGate container correctly waits for underlying storage database, if database container is started after dbgate container is started
|
||||
- FIXED: (Premium) Better handling of connection storage errors
|
||||
|
||||
### 5.5.5
|
||||
- ADDED: AWS IAM authentication for MySQL, MariaDB, PostgreSQL (Premium)
|
||||
- FIXED: Datitme filtering #912
|
||||
- FIXED: Load redis keys
|
||||
- ADDED: Query parameters #913
|
||||
- FIXED: Data grid with hidden columns #911
|
||||
- ADDED: Added buttons for one-click authentification methods (Anonymous, OAuth) (Team Premium)
|
||||
- ADDED: Link for switching Admin/user login (Team Premium)
|
||||
- FIXED: Save connection params in administration for MS SQL and Postgres storages (Team Premium)
|
||||
|
||||
### 5.5.4
|
||||
- FIXED: correct handling when use LOGIN and PASSWORD env variables #903
|
||||
- FIXED: fixed problems in dbmodel commandline tool
|
||||
- ADDED: dbmodel - allow connection defined in environment variables
|
||||
- FIXED: Load postgres schema on Azure #906
|
||||
- FIXED: Oauth2 in combination with Google doesn't log payload #727
|
||||
- CHANGED: Improved error reporting for unhandler errors
|
||||
- CHANGED: Don't restart docker container in case of unhandler error
|
||||
- FIXED: Crash when displaying specific data values from MongoDB #908
|
||||
- ADDED: (Premium) Show purchase button after trial license is expired
|
||||
|
||||
### 5.5.3
|
||||
- FIXED: Separate schema mode #894 - for databases with many schemas
|
||||
- FIXED: Sort by UUID column in POstgreSQL #895
|
||||
- ADDED: Load pg_dump outputs #893
|
||||
- ADDED: Improved column mapping in import/export #330
|
||||
- FIXED: Fixed some errors in create-table workflow
|
||||
- CHANGED: Show single schema by default only if all objects are from default schema
|
||||
- FIXED: MS Entra authentication for Azure SQL
|
||||
|
||||
### 5.5.2
|
||||
- FIXED: MySQL, PostgreSQL readonly conections #900
|
||||
|
||||
### 5.5.1
|
||||
- ADDED: Clickhouse support (#532)
|
||||
- ADDED: MySQL - specify table engine, show table engine in table list
|
||||
- FIXED: Hidden primary key name in PK editor for DB engines with anonymous PK (MySQL)
|
||||
- CHANGED: Import/export dialog is now tacub instead of modal
|
||||
- ADDED: Saving import/export job
|
||||
- REMOVED: Ability to reopen export/import wizard from generated script. This was a bit hack, now you could save import/export job instead
|
||||
- ADDED: Autodetect CSV delimited
|
||||
- FIXED: Import CSV files with spaces around quotes
|
||||
- ADDED: JSON file import
|
||||
- ADDED: JSON export can export objects with ID field used as object key
|
||||
- ADDED: JSON and JSON lines imports supports importing from web URL
|
||||
- FIXED: Editing imported URL in job editor
|
||||
- ADDED: Quick export from table data grid (#892)
|
||||
- CHANGED: Create table workflow is reworked, you can specify schema and table name in table editor
|
||||
- FIXED: After saving new table, table editor is reset to empty state
|
||||
- ADDED: (PostgreSQL, SQL Server) - ability to filter objects by schema
|
||||
- ADDED: (PostgreSQL, SQL Server) - Use separate schemas option - for databases with lot of schemas, only selected schema is loaded
|
||||
- FIXED: Internal refactor of drivers, client objects are not more messed up with auxiliary fields
|
||||
- ADDED: Copy connection error to clipboard after clicking on error icon
|
||||
- FIXED: (MySQL) Fixed importing SQL dump exported from mysqldump (#702)
|
||||
- FIXED: (PostgreSQL) Fixed filtering JSONB fields (#889)
|
||||
- FIXED: OIDC authentication not working anymore (#891)
|
||||
- ADDED: Added tests for import from CSV and JSON
|
||||
- FIXED: multiple shortcuts handling #898
|
||||
- ADDED: (Premium) MS Entra authentization for Azure SQL databases
|
||||
|
||||
### 5.4.4
|
||||
- CHANGED: Improved autoupdate, notification is now in app
|
||||
- CHANGED: Default behaviour of autoupdate, new version is downloaded after click of "Download" button
|
||||
- ADDED: Ability to configure autoupdate (check only, check+download, don't check)\
|
||||
- ADDED: Ability to configure autoupdate (check only, check+download, don't check)
|
||||
- ADDED: Option to run check for new version manually
|
||||
- FIXED: Fixed autoupgrade channel for premium edition
|
||||
- FIXED: Fixes following issues: #886, #865, #782, #375
|
||||
@@ -151,7 +653,7 @@ Builds:
|
||||
- FIXED: Creating SQLite autoincrement column
|
||||
- FIXED: Better error reporting from exports/import/dulicator
|
||||
- CHANGED: Optimalizede OracleDB analysing algorithm
|
||||
- ADDED: Mutli column filter for perspectives
|
||||
- ADDED: Multi column filter for perspectives
|
||||
- FIXED: Fixed some scenarios using tables from different DBs
|
||||
- FIXED: Sessions with long-running queries are not killed
|
||||
|
||||
|
||||
37
README.md
37
README.md
@@ -15,8 +15,10 @@ But there are also many advanced features like schema compare, visual query desi
|
||||
DbGate is licensed under GPL-3.0 license and is free to use for any purpose.
|
||||
|
||||
* Try it online - [demo.dbgate.org](https://demo.dbgate.org) - online demo application
|
||||
* **Download** application for Windows, Linux or Mac from [dbgate.org](https://dbgate.org/download/)
|
||||
* **Download** application for Windows, Linux or Mac from [dbgate.io](https://www.dbgate.io/download/)
|
||||
* Looking for DbGate Community? **Download** from [dbgate.io](https://www.dbgate.io/download-community/)
|
||||
* Run web version as [NPM package](https://www.npmjs.com/package/dbgate-serve) or as [docker image](https://hub.docker.com/r/dbgate/dbgate)
|
||||
* Use nodeJs [scripting interface](https://docs.dbgate.io/scripting) ([API documentation](https://docs.dbgate.io/apidoc))
|
||||
|
||||
## Supported databases
|
||||
* MySQL
|
||||
@@ -26,12 +28,16 @@ DbGate is licensed under GPL-3.0 license and is free to use for any purpose.
|
||||
* MongoDB
|
||||
* Redis
|
||||
* SQLite
|
||||
* Amazon Redshift
|
||||
* Amazon Redshift (Premium)
|
||||
* CockroachDB
|
||||
* MariaDB
|
||||
* CosmosDB (Premium)
|
||||
|
||||
<!-- Learn more about DbGate features at the [DbGate website](https://dbgate.org/), or try our online [demo application](https://demo.dbgate.org) -->
|
||||
* ClickHouse
|
||||
* Apache Cassandra
|
||||
* libSQL/Turso (Premium)
|
||||
* DuckDB
|
||||
* Firebird
|
||||
* Firestore (Premium)
|
||||
|
||||
|
||||
<a href="https://raw.githubusercontent.com/dbgate/dbgate/master/img/screenshot1.png">
|
||||
@@ -50,13 +56,15 @@ DbGate is licensed under GPL-3.0 license and is free to use for any purpose.
|
||||
<!--  -->
|
||||
|
||||
## Features
|
||||
* Browse table data with many filtering options, Excel-like filters, multi-value filters
|
||||
* Table data editing, with SQL change script preview
|
||||
* Edit table schema, indexes, primary and foreign keys
|
||||
* Compare and synchronize database structure
|
||||
* ER diagram
|
||||
* Light and dark theme
|
||||
* Master/detail views, foreign key lookups
|
||||
* Query designer
|
||||
* Light and dark theme, next themes available from DbGate Cloud
|
||||
* Huge support for work with related data - master/detail views, foreign key lookups, expanding columns from related tables in flat data view
|
||||
* Query designer - visual SQL query builder without writing SQL code. Complex conditions like WHERE NOT EXISTS.
|
||||
* Query perspectives – innovative nested table view over complex relational data, something like query designer on MongoDB databases
|
||||
* Form view for comfortable work with tables with many columns
|
||||
* JSON view on MongoDB collections
|
||||
* Explore tables, views, procedures, functions, MongoDB collections
|
||||
@@ -68,23 +76,26 @@ DbGate is licensed under GPL-3.0 license and is free to use for any purpose.
|
||||
* Mongo JavaScript editor, execute Mongo script (with NodeJs syntax)
|
||||
* Redis tree view, generate script from keys, run Redis script
|
||||
* Runs as application for Windows, Linux and Mac. Or in Docker container on server and in web Browser on client.
|
||||
* Import, export from/to CSV, Excel, JSON, NDJSON, XML
|
||||
* Free table editor - quick table data editing (cleanup data after import/before export, prototype tables etc.)
|
||||
* Import, export from/to CSV, Excel, JSON, NDJSON, XML, DBF
|
||||
* Archives - backup your data in NDJSON files on local filesystem (or on DbGate server, when using web application)
|
||||
* NDJSON data viewer and editor - browse NDJSON data, edit data and structure directly on NDJSON files. Works also for big NDSON files
|
||||
* Charts, export chart to HTML page
|
||||
* AI powered database chat
|
||||
* Show GEO data on map, export map to HTML page
|
||||
* For detailed info, how to run DbGate in docker container, visit [docker hub](https://hub.docker.com/r/dbgate/dbgate)
|
||||
* Extensible plugin architecture
|
||||
* Perspectives - nested table view over complex relational data, query designer on MongoDB databases
|
||||
|
||||
## How to contribute
|
||||
Any contributions are welcome. If you want to contribute without coding, consider following:
|
||||
|
||||
* Tell your friends about DbGate or share on social networks - when more people will use DbGate, it will grow to be better
|
||||
* Write review on [Slant.co](https://www.slant.co/improve/options/41086/~dbgate-review) or [G2](https://www.g2.com/products/dbgate/reviews)
|
||||
* Purchase a [DbGate Premium](https://www.dbgate.io/purchase/premium/) license
|
||||
* Create issue, if you find problem in app, or you have idea to new feature. If issue already exists, you could leave comment on it, to prioritise most wanted issues
|
||||
* Create some tutorial video on [youtube](https://www.youtube.com/playlist?list=PLCo7KjCVXhr0RfUSjM9wJMsp_ShL1q61A)
|
||||
* Become a backer on [GitHub sponsors](https://github.com/sponsors/dbgate) or [Open collective](https://opencollective.com/dbgate)
|
||||
* Where a small coding is acceptable for you, you could [create plugin](https://dbgate.org/docs/plugin-development.html). Plugins for new themes can be created actually without JS coding
|
||||
* Add a SQL script to [Public Knowledge Base](https://github.com/dbgate/dbgate-knowledge-base)
|
||||
* Where a small coding is acceptable for you, you could [create plugin](https://docs.dbgate.io/plugin-development)
|
||||
* Create a new custom theme and share it on [DbGate Cloud](https://github.com/dbgate/dbgate-knowledge-base/tree/master/folder-Themes)
|
||||
|
||||
Thank you!
|
||||
|
||||
@@ -179,4 +190,4 @@ yarn plugin # this compiles plugin and copies it into existing DbGate installati
|
||||
After restarting DbGate, you could use your new plugin from DbGate.
|
||||
|
||||
## Logging
|
||||
DbGate uses [pinomin logger](https://github.com/dbgate/pinomin). So by default, it produces JSON log messages into console and log files. If you want to see formatted logs, please use [pino-pretty](https://github.com/pinojs/pino-pretty) log formatter.
|
||||
DbGate uses [pinomin logger](https://github.com/dbgate/pinomin). So by default, it produces JSON log messages into console and log files. If you want to see formatted logs, please use [pino-pretty](https://github.com/pinojs/pino-pretty) log formatter.
|
||||
|
||||
@@ -1,12 +1,75 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const volatilePackages = require('./common/volatilePackages');
|
||||
|
||||
function adjustFile(file) {
|
||||
function adjustFile(file, isApp = false) {
|
||||
const json = JSON.parse(fs.readFileSync(file, { encoding: 'utf-8' }));
|
||||
|
||||
function processPackageFile(packageFile) {
|
||||
const pluginJson = JSON.parse(fs.readFileSync(packageFile, { encoding: 'utf-8' }));
|
||||
for (const depkey of ['dependencies', 'optionalDependencies']) {
|
||||
for (const dependency of Object.keys(pluginJson[depkey] || {})) {
|
||||
if (!volatilePackages.includes(dependency)) {
|
||||
// add only voletile packages
|
||||
continue;
|
||||
}
|
||||
if (!json[depkey]) {
|
||||
json[depkey] = {};
|
||||
}
|
||||
if (json[depkey][dependency]) {
|
||||
if (json[depkey][dependency] != pluginJson[depkey][dependency]) {
|
||||
console.log(`Dependency ${dependency} in ${packageName} is different from ${file}`);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
json[depkey][dependency] = pluginJson[depkey][dependency];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const packageName of fs.readdirSync('plugins')) {
|
||||
if (!packageName.startsWith('dbgate-plugin-')) continue;
|
||||
processPackageFile(path.join('plugins', packageName, 'package.json'));
|
||||
}
|
||||
|
||||
if (isApp) {
|
||||
// add volatile dependencies from api to app
|
||||
processPackageFile(path.join('packages', 'api', 'package.json'));
|
||||
}
|
||||
|
||||
if (process.platform != 'win32') {
|
||||
delete json.optionalDependencies.msnodesqlv8;
|
||||
}
|
||||
|
||||
if (process.argv.includes('--community')) {
|
||||
delete json.optionalDependencies['mongodb-client-encryption'];
|
||||
delete json.dependencies['@mongosh/service-provider-node-driver'];
|
||||
delete json.dependencies['@mongosh/browser-runtime-electron'];
|
||||
}
|
||||
|
||||
if (isApp && process.argv.includes('--premium')) {
|
||||
json.build.win.target = [
|
||||
{
|
||||
target: 'nsis',
|
||||
arch: ['x64'],
|
||||
},
|
||||
];
|
||||
json.build.linux.target = [
|
||||
{
|
||||
target: 'AppImage',
|
||||
arch: ['x64'],
|
||||
},
|
||||
];
|
||||
json.name = 'dbgate-premium';
|
||||
json.build.artifactName = 'dbgate-premium-${version}-${os}_${arch}.${ext}';
|
||||
json.build.appId = 'org.dbgate.premium';
|
||||
json.build.productName = 'DbGate Premium';
|
||||
}
|
||||
|
||||
fs.writeFileSync(file, JSON.stringify(json, null, 2), 'utf-8');
|
||||
}
|
||||
|
||||
adjustFile('packages/api/package.json');
|
||||
adjustFile('app/package.json');
|
||||
adjustFile('app/package.json', true);
|
||||
|
||||
fs.writeFileSync('common/useBundleExternals.js', "module.exports = 'true';", 'utf-8');
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
<p>DbGate is cross-platform database manager. It's designed to be simple to use and effective, when working with more databases simultaneously. But there are also many advanced features like schema compare, visual query designer, chart visualisation or batch export and import.</p>
|
||||
</description>
|
||||
|
||||
<url type="homepage">https://dbgate.org/</url>
|
||||
<url type="homepage">https://www.dbgate.io/</url>
|
||||
<url type="vcs-browser">https://github.com/dbgate/dbgate</url>
|
||||
<url type="contact">https://dbgate.org/about/</url>
|
||||
<url type="contact">https://www.dbgate.io/contact/</url>
|
||||
<url type="donation">https://github.com/sponsors/dbgate</url>
|
||||
<url type="bugtracker">https://github.com/dbgate/dbgate/issues</url>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "dbgate",
|
||||
"version": "5.0.0-alpha.1",
|
||||
"version": "7.0.0-alpha.1",
|
||||
"private": true,
|
||||
"author": "Jan Prochazka <jenasoft.database@gmail.com>",
|
||||
"description": "Opensource database administration tool",
|
||||
@@ -19,7 +19,6 @@
|
||||
"artifactName": "dbgate-${version}-${os}_${arch}.${ext}",
|
||||
"appId": "org.dbgate",
|
||||
"productName": "DbGate",
|
||||
"afterSign": "electron-builder-notarize",
|
||||
"asarUnpack": "**/*.node",
|
||||
"mac": {
|
||||
"category": "database",
|
||||
@@ -38,9 +37,11 @@
|
||||
"target": "default",
|
||||
"arch": [
|
||||
"universal",
|
||||
"x64"
|
||||
"x64",
|
||||
"arm64"
|
||||
]
|
||||
}
|
||||
},
|
||||
"notarize": true
|
||||
},
|
||||
"linux": {
|
||||
"target": [
|
||||
@@ -50,7 +51,6 @@
|
||||
"target": "AppImage",
|
||||
"arch": [
|
||||
"x64",
|
||||
"armv7l",
|
||||
"arm64"
|
||||
]
|
||||
},
|
||||
@@ -109,14 +109,15 @@
|
||||
"files": [
|
||||
"packages",
|
||||
"src",
|
||||
"icon.png"
|
||||
"icon.png",
|
||||
"!node_modules/cpu-features/build/**"
|
||||
]
|
||||
},
|
||||
"homepage": "./",
|
||||
"scripts": {
|
||||
"start": "cross-env ELECTRON_START_URL=http://localhost:5001 DEVMODE=1 electron .",
|
||||
"start:local": "cross-env electron .",
|
||||
"dist": "electron-builder",
|
||||
"dist": "electron-builder --publish never",
|
||||
"build": "cd ../packages/api && yarn build && cd ../web && yarn build && cd ../../app && yarn dist",
|
||||
"build:local": "cd ../packages/api && yarn build && cd ../web && yarn build && cd ../../app && yarn predist",
|
||||
"postinstall": "yarn rebuild && patch-package",
|
||||
@@ -127,13 +128,7 @@
|
||||
"devDependencies": {
|
||||
"copyfiles": "^2.2.0",
|
||||
"cross-env": "^6.0.3",
|
||||
"electron": "30.0.2",
|
||||
"electron-builder": "23.1.0",
|
||||
"electron-builder-notarize": "^1.5.2"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"better-sqlite3": "9.6.0",
|
||||
"msnodesqlv8": "^4.2.1",
|
||||
"oracledb": "^6.6.0"
|
||||
"electron": "38.6.0",
|
||||
"electron-builder": "25.1.8"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,16 @@ let mainModule;
|
||||
let appUpdateStatus = '';
|
||||
let settingsJson = {};
|
||||
|
||||
function getTranslated(key) {
|
||||
if (typeof key === 'string' && global.TRANSLATION_DATA?.[key]) {
|
||||
return global.TRANSLATION_DATA?.[key];
|
||||
}
|
||||
if (typeof key?._transKey === 'string') {
|
||||
return global.TRANSLATION_DATA?.[key._transKey] ?? key._transOptions?.defaultMessage;
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
process.on('uncaughtException', function (error) {
|
||||
console.error('uncaughtException', error);
|
||||
});
|
||||
@@ -63,6 +73,7 @@ try {
|
||||
let mainWindow;
|
||||
let mainMenu;
|
||||
let runCommandOnLoad = null;
|
||||
let mainWindowMenuSet = false;
|
||||
|
||||
log.transports.file.level = 'debug';
|
||||
autoUpdater.logger = log;
|
||||
@@ -85,17 +96,22 @@ function formatKeyText(keyText) {
|
||||
return keyText.replace('CtrlOrCommand+', 'Ctrl+');
|
||||
}
|
||||
|
||||
function commandItem(item) {
|
||||
function commandItem(item, disableAll = false) {
|
||||
const id = item.command;
|
||||
const command = commands[id];
|
||||
if (item.skipInApp) {
|
||||
return { skip: true };
|
||||
}
|
||||
if (!command) {
|
||||
return { skip: true };
|
||||
}
|
||||
return {
|
||||
id,
|
||||
label: command ? command.menuName || command.toolbarName || command.name : id,
|
||||
label: command
|
||||
? getTranslated(command.menuName) || getTranslated(command.toolbarName) || getTranslated(command.name)
|
||||
: id,
|
||||
accelerator: formatKeyText(command ? command.keyText : undefined),
|
||||
enabled: command ? command.enabled : false,
|
||||
enabled: command ? command.enabled && (!disableAll || command.systemCommand) : false,
|
||||
click() {
|
||||
if (mainWindow) {
|
||||
mainWindow.webContents.send('run-command', id);
|
||||
@@ -107,14 +123,14 @@ function commandItem(item) {
|
||||
};
|
||||
}
|
||||
|
||||
function buildMenu() {
|
||||
let template = _cloneDeepWith(mainMenuDefinition({ editMenu: true }), item => {
|
||||
function buildMenu(disableAll = false) {
|
||||
let template = _cloneDeepWith(mainMenuDefinition({ editMenu: true, isMac: isMac() }), item => {
|
||||
if (item.divider) {
|
||||
return { type: 'separator' };
|
||||
}
|
||||
|
||||
if (item.command) {
|
||||
return commandItem(item);
|
||||
return commandItem(item, disableAll);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -129,7 +145,7 @@ function buildMenu() {
|
||||
{
|
||||
label: 'DbGate',
|
||||
submenu: [
|
||||
commandItem({ command: 'about.show' }),
|
||||
commandItem({ command: 'about.show' }, disableAll),
|
||||
{ role: 'services' },
|
||||
{ role: 'hide' },
|
||||
{ role: 'hideOthers' },
|
||||
@@ -145,22 +161,28 @@ function buildMenu() {
|
||||
}
|
||||
|
||||
ipcMain.on('update-commands', async (event, arg) => {
|
||||
commands = JSON.parse(arg);
|
||||
const parsed = JSON.parse(arg);
|
||||
commands = parsed.commands;
|
||||
const isModalOpened = parsed.isModalOpened;
|
||||
const dbgatePage = parsed.dbgatePage;
|
||||
for (const key of Object.keys(commands)) {
|
||||
const menu = mainMenu.getMenuItemById(key);
|
||||
if (!menu) continue;
|
||||
const command = commands[key];
|
||||
|
||||
// rebuild menu
|
||||
if (menu.label != command.text || menu.accelerator != command.keyText) {
|
||||
mainMenu = buildMenu();
|
||||
if (global.TRANSLATION_DATA && (menu.label != command.text || menu.accelerator != command.keyText)) {
|
||||
mainMenu = buildMenu(isModalOpened || !!dbgatePage);
|
||||
|
||||
Menu.setApplicationMenu(mainMenu);
|
||||
// mainWindow.setMenu(mainMenu);
|
||||
if (!mainWindowMenuSet) {
|
||||
mainWindow.setMenu(mainMenu);
|
||||
mainWindowMenuSet = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
menu.enabled = command.enabled;
|
||||
menu.enabled = command.enabled && !isModalOpened && !dbgatePage;
|
||||
}
|
||||
});
|
||||
ipcMain.on('quit-app', async (event, arg) => {
|
||||
@@ -212,6 +234,10 @@ ipcMain.on('app-started', async (event, arg) => {
|
||||
autoUpdater.checkForUpdates();
|
||||
}
|
||||
}
|
||||
|
||||
if (initialConfig['winZoomLevel'] != null) {
|
||||
mainWindow.webContents.zoomLevel = initialConfig['winZoomLevel'];
|
||||
}
|
||||
});
|
||||
ipcMain.on('window-action', async (event, arg) => {
|
||||
if (!mainWindow) {
|
||||
@@ -299,6 +325,12 @@ ipcMain.on('check-for-updates', async (event, url) => {
|
||||
autoUpdater.autoDownload = false;
|
||||
autoUpdater.checkForUpdates();
|
||||
});
|
||||
ipcMain.on('translation-data', async (event, arg) => {
|
||||
global.TRANSLATION_DATA = JSON.parse(arg);
|
||||
mainMenu = buildMenu();
|
||||
Menu.setApplicationMenu(mainMenu);
|
||||
mainWindow.setMenu(mainMenu);
|
||||
});
|
||||
|
||||
function fillMissingSettings(value) {
|
||||
const res = {
|
||||
@@ -357,6 +389,7 @@ function createWindow() {
|
||||
title: isProApp() ? 'DbGate Premium' : 'DbGate',
|
||||
frame: useNativeMenu,
|
||||
titleBarStyle: useNativeMenu ? undefined : 'hidden',
|
||||
backgroundColor: electron.nativeTheme.shouldUseDarkColors ? '#111111' : undefined,
|
||||
...bounds,
|
||||
icon: os.platform() == 'win32' ? 'icon.ico' : path.resolve(__dirname, '../icon.png'),
|
||||
partition: isProApp() ? 'persist:dbgate-premium' : 'persist:dbgate',
|
||||
@@ -374,8 +407,8 @@ function createWindow() {
|
||||
mainWindow.setFullScreen(true);
|
||||
}
|
||||
|
||||
mainMenu = buildMenu();
|
||||
mainWindow.setMenu(mainMenu);
|
||||
// mainMenu = buildMenu();
|
||||
// mainWindow.setMenu(mainMenu);
|
||||
|
||||
function loadMainWindow() {
|
||||
const startUrl =
|
||||
@@ -393,6 +426,7 @@ function createWindow() {
|
||||
JSON.stringify({
|
||||
winBounds: mainWindow.getBounds(),
|
||||
winIsMaximized: mainWindow.isMaximized(),
|
||||
winZoomLevel: mainWindow.webContents.zoomLevel,
|
||||
}),
|
||||
'utf-8'
|
||||
);
|
||||
@@ -430,7 +464,6 @@ function createWindow() {
|
||||
);
|
||||
|
||||
global.API_PACKAGE = apiPackage;
|
||||
global.NATIVE_MODULES = path.join(__dirname, 'nativeModules');
|
||||
|
||||
// console.log('global.API_PACKAGE', global.API_PACKAGE);
|
||||
const api = require(apiPackage);
|
||||
|
||||
@@ -1,17 +1,23 @@
|
||||
module.exports = ({ editMenu }) => [
|
||||
function _t(key, { defaultMessage, currentTranslations } = {}) {
|
||||
return (currentTranslations || global.TRANSLATION_DATA)?.[key] || defaultMessage;
|
||||
}
|
||||
|
||||
module.exports = ({ editMenu, isMac }, currentTranslations = null) => [
|
||||
{
|
||||
label: 'File',
|
||||
label: _t('menu.file', { defaultMessage: 'File', currentTranslations }),
|
||||
submenu: [
|
||||
{ command: 'new.connection', hideDisabled: true },
|
||||
{ command: 'new.sqliteDatabase', hideDisabled: true },
|
||||
{ command: 'new.duckdbDatabase', hideDisabled: true },
|
||||
{ divider: true },
|
||||
{ command: 'new.query', hideDisabled: true },
|
||||
{ command: 'new.queryDesign', hideDisabled: true },
|
||||
{ command: 'new.diagram', hideDisabled: true },
|
||||
{ command: 'new.perspective', hideDisabled: true },
|
||||
{ command: 'new.freetable', hideDisabled: true },
|
||||
{ command: 'new.application', hideDisabled: true },
|
||||
{ command: 'new.shell', hideDisabled: true },
|
||||
{ command: 'new.jsonl', hideDisabled: true },
|
||||
{ command: 'new.modelTransform', hideDisabled: true },
|
||||
{ divider: true },
|
||||
{ command: 'file.open', hideDisabled: true },
|
||||
{ command: 'file.openArchive', hideDisabled: true },
|
||||
@@ -24,23 +30,9 @@ module.exports = ({ editMenu }) => [
|
||||
{ command: 'app.disconnect', hideDisabled: true, skipInApp: true },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Window',
|
||||
submenu: [
|
||||
{ command: 'tabs.closeTab', hideDisabled: false },
|
||||
{ command: 'tabs.closeAll', hideDisabled: false },
|
||||
{ command: 'tabs.closeTabsWithCurrentDb', hideDisabled: false },
|
||||
{ command: 'tabs.closeTabsButCurrentDb', hideDisabled: false },
|
||||
{ divider: true },
|
||||
{ command: 'app.zoomIn', hideDisabled: true },
|
||||
{ command: 'app.zoomOut', hideDisabled: true },
|
||||
{ command: 'app.zoomReset', hideDisabled: true },
|
||||
],
|
||||
},
|
||||
|
||||
editMenu
|
||||
? {
|
||||
label: 'Edit',
|
||||
label: _t('menu.edit', { defaultMessage: 'Edit', currentTranslations }),
|
||||
submenu: [
|
||||
{ command: 'edit.undo' },
|
||||
{ command: 'edit.redo' },
|
||||
@@ -65,7 +57,7 @@ module.exports = ({ editMenu }) => [
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
label: 'View',
|
||||
label: _t('menu.view', { defaultMessage: 'View', currentTranslations }),
|
||||
submenu: [
|
||||
{ command: 'app.reload', hideDisabled: true },
|
||||
{ command: 'app.toggleDevTools', hideDisabled: true },
|
||||
@@ -75,10 +67,21 @@ module.exports = ({ editMenu }) => [
|
||||
{ divider: true },
|
||||
{ command: 'theme.changeTheme', hideDisabled: true },
|
||||
{ command: 'settings.show' },
|
||||
{ divider: true },
|
||||
{ command: 'tabs.closeTab', hideDisabled: false },
|
||||
{ command: 'tabs.closeAll', hideDisabled: false },
|
||||
{ command: 'tabs.closeTabsWithCurrentDb', hideDisabled: false },
|
||||
{ command: 'tabs.closeTabsButCurrentDb', hideDisabled: false },
|
||||
{ divider: true },
|
||||
{ command: 'app.zoomIn', hideDisabled: true },
|
||||
{ command: 'app.zoomOut', hideDisabled: true },
|
||||
{ command: 'app.zoomReset', hideDisabled: true },
|
||||
{ divider: true },
|
||||
{ command: 'app.showLogs', hideDisabled: true },
|
||||
],
|
||||
},
|
||||
{
|
||||
label: 'Tools',
|
||||
label: _t('menu.tools', { defaultMessage: 'Tools', currentTranslations }),
|
||||
submenu: [
|
||||
{ command: 'database.search', hideDisabled: true },
|
||||
{ command: 'commandPalette.show', hideDisabled: true },
|
||||
@@ -90,23 +93,36 @@ module.exports = ({ editMenu }) => [
|
||||
{ divider: true },
|
||||
{ command: 'folder.showLogs', hideDisabled: true },
|
||||
{ command: 'folder.showData', hideDisabled: true },
|
||||
{ command: 'new.gist', hideDisabled: true },
|
||||
{ command: 'app.resetSettings', hideDisabled: true },
|
||||
{ divider: true },
|
||||
{ command: 'app.exportConnections', hideDisabled: true },
|
||||
{ command: 'app.importConnections', hideDisabled: true },
|
||||
{ divider: true },
|
||||
{ command: 'app.managePlugins', hideDisabled: true },
|
||||
],
|
||||
},
|
||||
...(isMac
|
||||
? [
|
||||
{
|
||||
role: 'window',
|
||||
submenu: [{ role: 'minimize' }, { role: 'zoom' }, { type: 'separator' }, { role: 'front' }],
|
||||
},
|
||||
]
|
||||
: []),
|
||||
{
|
||||
label: 'Help',
|
||||
label: _t('menu.help', { defaultMessage: 'Help', currentTranslations }),
|
||||
submenu: [
|
||||
{ command: 'app.openDocs', hideDisabled: true },
|
||||
{ command: 'app.openWeb', hideDisabled: true },
|
||||
{ command: 'app.openIssue', hideDisabled: true },
|
||||
{ command: 'app.openSponsoring', hideDisabled: true },
|
||||
// { command: 'app.giveFeedback', hideDisabled: true },
|
||||
{ divider: true },
|
||||
{ command: 'settings.commands', hideDisabled: true },
|
||||
{ command: 'tabs.changelog', hideDisabled: true },
|
||||
{ command: 'about.show', hideDisabled: true },
|
||||
{ divider: true },
|
||||
{ command: 'file.checkForUpdates', hideDisabled: true },
|
||||
{ command: 'app.checkForUpdates', hideDisabled: true },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
const content = require('./nativeModulesContent');
|
||||
|
||||
module.exports = content;
|
||||
2183
app/yarn.lock
2183
app/yarn.lock
File diff suppressed because it is too large
Load Diff
129
common/assign-dbgm-codes.mjs
Normal file
129
common/assign-dbgm-codes.mjs
Normal file
@@ -0,0 +1,129 @@
|
||||
#!/usr/bin/env node
|
||||
// assign-dbgm-codes.mjs
|
||||
import fs from 'fs/promises';
|
||||
import path from 'path';
|
||||
|
||||
const PLACEHOLDER = 'DBGM-00000';
|
||||
const CODE_RE = /DBGM-(\d{5})/g;
|
||||
const JS_TS_RE = /\.(mjs|cjs|js|ts|jsx|tsx)$/i;
|
||||
|
||||
const IGNORE_DIRS = new Set([
|
||||
'node_modules',
|
||||
'.git',
|
||||
'.hg',
|
||||
'.svn',
|
||||
'dist',
|
||||
'build',
|
||||
'out',
|
||||
'.next',
|
||||
'.turbo',
|
||||
'.cache',
|
||||
]);
|
||||
const IGNORE_FILES = ['assign-dbgm-codes.mjs', 'package.json', 'README.md'];
|
||||
|
||||
// --- CLI ---
|
||||
const args = process.argv.slice(2);
|
||||
const dryRun = args.includes('--dry');
|
||||
const rootArg = args.find(a => a !== '--dry') || process.cwd();
|
||||
const root = path.resolve(rootArg);
|
||||
|
||||
// --- helpers ---
|
||||
async function* walk(dir) {
|
||||
const entries = await fs.readdir(dir, { withFileTypes: true });
|
||||
for (const e of entries) {
|
||||
if (e.isDirectory()) {
|
||||
if (IGNORE_DIRS.has(e.name)) continue;
|
||||
yield* walk(path.join(dir, e.name));
|
||||
} else if (e.isFile()) {
|
||||
if (JS_TS_RE.test(e.name) && !IGNORE_FILES.includes(e.name)) yield path.join(dir, e.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function formatCode(n) {
|
||||
return `DBGM-${String(n).padStart(5, '0')}`;
|
||||
}
|
||||
|
||||
// Find the smallest positive integer not in `taken`
|
||||
function makeNextCodeFn(taken) {
|
||||
let n = 1;
|
||||
// advance n to first free
|
||||
while (taken.has(n)) n++;
|
||||
return () => {
|
||||
const code = n;
|
||||
taken.add(code);
|
||||
// move n to next free for next call
|
||||
do {
|
||||
n++;
|
||||
} while (taken.has(n));
|
||||
return formatCode(code);
|
||||
};
|
||||
}
|
||||
|
||||
// --- main ---
|
||||
(async () => {
|
||||
console.log(`Scanning: ${root} ${dryRun ? '(dry run)' : ''}`);
|
||||
|
||||
// 1) Collect all taken codes across the repo
|
||||
const taken = new Set(); // numeric parts only
|
||||
const files = [];
|
||||
for await (const file of walk(root)) files.push(file);
|
||||
|
||||
await Promise.all(
|
||||
files.map(async file => {
|
||||
try {
|
||||
const text = await fs.readFile(file, 'utf8');
|
||||
for (const m of text.matchAll(CODE_RE)) {
|
||||
const num = Number(m[1]);
|
||||
if (Number.isInteger(num) && num > 0) taken.add(num);
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn(`! Failed to read ${file}: ${err.message}`);
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
console.log(`Found ${taken.size} occupied code(s).`);
|
||||
|
||||
// 2) Replace placeholders with next available unique code
|
||||
const nextCode = makeNextCodeFn(taken);
|
||||
|
||||
let filesChanged = 0;
|
||||
let placeholdersReplaced = 0;
|
||||
|
||||
for (const file of files) {
|
||||
let text;
|
||||
try {
|
||||
text = await fs.readFile(file, 'utf8');
|
||||
} catch (err) {
|
||||
console.warn(`! Failed to read ${file}: ${err.message}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!text.includes(PLACEHOLDER)) continue;
|
||||
|
||||
let countInFile = 0;
|
||||
const updated = text.replaceAll(PLACEHOLDER, () => {
|
||||
countInFile++;
|
||||
return nextCode();
|
||||
});
|
||||
|
||||
if (countInFile > 0) {
|
||||
placeholdersReplaced += countInFile;
|
||||
filesChanged++;
|
||||
console.log(`${dryRun ? '[dry]' : '[write]'} ${file} — ${countInFile} replacement(s)`);
|
||||
if (!dryRun) {
|
||||
try {
|
||||
await fs.writeFile(file, updated, 'utf8');
|
||||
} catch (err) {
|
||||
console.warn(`! Failed to write ${file}: ${err.message}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`Done. Files changed: ${filesChanged}, placeholders replaced: ${placeholdersReplaced}.`);
|
||||
})().catch(err => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
19
common/buildPluginExternals.js
Normal file
19
common/buildPluginExternals.js
Normal file
@@ -0,0 +1,19 @@
|
||||
const useBundleExternals = require('./useBundleExternals');
|
||||
const getBundleExternals = require('./getBundleExternals');
|
||||
|
||||
function buildExternalsFromDependencies(packageJson) {
|
||||
if (useBundleExternals == 'true') {
|
||||
return getBundleExternals();
|
||||
}
|
||||
const { dependencies, optionalDependencies } = packageJson;
|
||||
const externals = {};
|
||||
for (let dep in dependencies || {}) {
|
||||
externals[dep] = `commonjs ${dep}`;
|
||||
}
|
||||
for (let dep in optionalDependencies || {}) {
|
||||
externals[dep] = `commonjs ${dep}`;
|
||||
}
|
||||
return externals;
|
||||
}
|
||||
|
||||
module.exports = buildExternalsFromDependencies;
|
||||
33
common/defineVolatileDependencies.js
Normal file
33
common/defineVolatileDependencies.js
Normal file
@@ -0,0 +1,33 @@
|
||||
const directory = process.argv[2];
|
||||
const fs = require('fs');
|
||||
|
||||
const volatilePackages = require('./volatilePackages');
|
||||
const apiPackageJson = JSON.parse(fs.readFileSync(`packages/api/package.json`, { encoding: 'utf-8' }));
|
||||
|
||||
const dependencies = {};
|
||||
const optionalDependencies = {};
|
||||
for (const pkg of volatilePackages) {
|
||||
if (pkg == 'msnodesqlv8' && process.platform != 'win32') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (apiPackageJson.dependencies[pkg]) {
|
||||
dependencies[pkg] = apiPackageJson.dependencies[pkg];
|
||||
}
|
||||
if (apiPackageJson.optionalDependencies?.[pkg]) {
|
||||
optionalDependencies[pkg] = apiPackageJson.optionalDependencies[pkg];
|
||||
}
|
||||
}
|
||||
|
||||
fs.writeFileSync(
|
||||
`${directory}/package.json`,
|
||||
JSON.stringify(
|
||||
{
|
||||
dependencies,
|
||||
optionalDependencies,
|
||||
},
|
||||
null,
|
||||
2
|
||||
),
|
||||
'utf-8'
|
||||
);
|
||||
110
common/fixYmlHashes.js
Normal file
110
common/fixYmlHashes.js
Normal file
@@ -0,0 +1,110 @@
|
||||
import fs from 'node:fs/promises';
|
||||
import { createHash } from 'node:crypto';
|
||||
import path from 'node:path';
|
||||
import process from 'node:process';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import YAML from 'yaml';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
async function sha512Base64(filePath) {
|
||||
const buf = await fs.readFile(filePath);
|
||||
const h = createHash('sha512');
|
||||
h.update(buf);
|
||||
return h.digest('base64');
|
||||
}
|
||||
|
||||
async function fileSize(filePath) {
|
||||
const st = await fs.stat(filePath);
|
||||
return st.size;
|
||||
}
|
||||
|
||||
async function fixOneYaml(ymlPath, distDir) {
|
||||
let raw;
|
||||
try {
|
||||
raw = await fs.readFile(ymlPath, 'utf8');
|
||||
} catch (e) {
|
||||
console.error(`✗ Cannot read ${ymlPath}:`, e.message);
|
||||
return;
|
||||
}
|
||||
|
||||
let doc;
|
||||
try {
|
||||
doc = YAML.parse(raw);
|
||||
} catch (e) {
|
||||
console.error(`✗ Cannot parse YAML ${ymlPath}:`, e.message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!doc || !Array.isArray(doc.files)) {
|
||||
console.warn(`! ${path.basename(ymlPath)} has no 'files' array — skipped.`);
|
||||
return;
|
||||
}
|
||||
|
||||
let changed = false;
|
||||
|
||||
// Update each files[i].sha512 and files[i].size based on files[i].url
|
||||
for (const entry of doc.files) {
|
||||
if (!entry?.url) continue;
|
||||
|
||||
const target = path.resolve(distDir, entry.url);
|
||||
try {
|
||||
const [hash, size] = await Promise.all([sha512Base64(target), fileSize(target)]);
|
||||
if (entry.sha512 !== hash || entry.size !== size) {
|
||||
console.log(`• ${path.basename(ymlPath)}: refresh ${entry.url}`);
|
||||
entry.sha512 = hash;
|
||||
entry.size = size;
|
||||
changed = true;
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn(
|
||||
`! Missing or unreadable file for ${entry.url} (referenced by ${path.basename(ymlPath)}): ${e.message}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Update top-level sha512 for the primary "path" file if present
|
||||
if (doc.path) {
|
||||
const primary = path.resolve(distDir, doc.path);
|
||||
try {
|
||||
const hash = await sha512Base64(primary);
|
||||
if (doc.sha512 !== hash) {
|
||||
console.log(`• ${path.basename(ymlPath)}: refresh top-level sha512 for path=${doc.path}`);
|
||||
doc.sha512 = hash;
|
||||
changed = true;
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn(`! Primary 'path' file not found for ${path.basename(ymlPath)}: ${doc.path} (${e.message})`);
|
||||
}
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
const out = YAML.stringify(doc);
|
||||
await fs.writeFile(ymlPath, out, 'utf8');
|
||||
console.log(`✓ Updated ${path.basename(ymlPath)}`);
|
||||
} else {
|
||||
console.log(`= No changes for ${path.basename(ymlPath)}`);
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const distDir = path.resolve(process.argv[2] ?? path.join(__dirname, '..', 'app', 'dist'));
|
||||
const entries = await fs.readdir(distDir);
|
||||
const ymls = entries.filter(f => f.toLowerCase().endsWith('.yml'));
|
||||
|
||||
if (ymls.length === 0) {
|
||||
console.warn(`No .yml files found in ${distDir}`);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Scanning ${distDir}`);
|
||||
for (const y of ymls) {
|
||||
await fixOneYaml(path.join(distDir, y), distDir);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(err => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
10
common/getBundleExternals.js
Normal file
10
common/getBundleExternals.js
Normal file
@@ -0,0 +1,10 @@
|
||||
const volatilePackages = require('./volatilePackages');
|
||||
|
||||
function getBundleExternals() {
|
||||
return volatilePackages.reduce((acc, item) => {
|
||||
acc[item] = `commonjs ${item}`;
|
||||
return acc;
|
||||
}, {});
|
||||
}
|
||||
|
||||
module.exports = getBundleExternals;
|
||||
174
common/processWorkflows.js
Normal file
174
common/processWorkflows.js
Normal file
@@ -0,0 +1,174 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const yaml = require('js-yaml');
|
||||
const _ = require('lodash');
|
||||
|
||||
const indir = path.resolve(path.join(__dirname, '..', 'workflow-templates'));
|
||||
const outdir = path.resolve(path.join(__dirname, '..', '.github', 'workflows'));
|
||||
|
||||
const includes = {};
|
||||
|
||||
const HEADER = `# --------------------------------------------------------------------------------------------
|
||||
# This file is generated. Do not edit manually
|
||||
# --------------------------------------------------------------------------------------------
|
||||
`;
|
||||
|
||||
function readIncludes() {
|
||||
for (const file of fs.readdirSync(indir)) {
|
||||
const text = fs.readFileSync(path.join(indir, file), { encoding: 'utf-8' });
|
||||
const json = yaml.load(text);
|
||||
if (json._module) {
|
||||
for (const key in json) {
|
||||
if (key === '_module') {
|
||||
continue;
|
||||
}
|
||||
includes[key] = json[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let modified = false;
|
||||
|
||||
function conditionMatch(condition, args) {
|
||||
if (_.isString(condition)) {
|
||||
return args.defs.includes(condition);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function processJsonStep(json, args) {
|
||||
return _.cloneDeepWith(json, value => {
|
||||
if (_.isArray(value)) {
|
||||
const res = [];
|
||||
let arrayModified = false;
|
||||
for (const item of value) {
|
||||
if (item._if) {
|
||||
modified = true;
|
||||
arrayModified = true;
|
||||
if (conditionMatch(item._if, args)) {
|
||||
res.push(_.omit(item, ['_if']));
|
||||
}
|
||||
} else if (item._replace || item._include) {
|
||||
const replaceWith = item._replace ? args.replace?.[item._replace] : includes[item._include];
|
||||
if (replaceWith) {
|
||||
modified = true;
|
||||
arrayModified = true;
|
||||
if (_.isArray(replaceWith)) {
|
||||
res.push(...replaceWith);
|
||||
} else {
|
||||
res.push(replaceWith);
|
||||
}
|
||||
} else {
|
||||
res.push(item);
|
||||
}
|
||||
} else {
|
||||
res.push(item);
|
||||
}
|
||||
}
|
||||
if (arrayModified) {
|
||||
return res;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (_.isPlainObject(value)) {
|
||||
if (_.intersection(args.allDefs ?? [], Object.keys(value))?.length > 0) {
|
||||
modified = true;
|
||||
for (const key in value) {
|
||||
if (args.defs.includes(key)) {
|
||||
return value[key];
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
if (_.isString(value)) {
|
||||
let stringModified = false;
|
||||
for (const key of Object.keys(args.stringReplace ?? {})) {
|
||||
if (value.includes(key)) {
|
||||
modified = true;
|
||||
stringModified = true;
|
||||
value = value.replaceAll(key, args.stringReplace[key]);
|
||||
}
|
||||
}
|
||||
if (stringModified) {
|
||||
return value;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (value?._include) {
|
||||
modified = true;
|
||||
return includes[value?._include];
|
||||
}
|
||||
|
||||
if (value?._replace) {
|
||||
modified = true;
|
||||
return args?.replace[value?._replace];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function processJson(json, args = {}) {
|
||||
const MAX_STEPS = 64;
|
||||
for (let i = 0; i < MAX_STEPS; i++) {
|
||||
modified = false;
|
||||
json = processJsonStep(json, args);
|
||||
if (!modified) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
function processFiles() {
|
||||
const dumpOptions = {
|
||||
lineWidth: -1,
|
||||
};
|
||||
for (const file of fs.readdirSync(indir)) {
|
||||
const text = fs.readFileSync(path.join(indir, file), { encoding: 'utf-8' });
|
||||
const json = yaml.load(text);
|
||||
|
||||
if (json._module) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (json._templates) {
|
||||
const allDefs = Object.keys(json._templates);
|
||||
for (const key in json._templates) {
|
||||
allDefs.push(...(json._templates[key].defs ?? []));
|
||||
}
|
||||
|
||||
for (const key in json._templates) {
|
||||
const args = {
|
||||
defs: [key, ...(json._templates[key]?.defs ?? [])],
|
||||
replace: json._templates[key]?.replace,
|
||||
stringReplace: json._templates[key]?.['string-replace'],
|
||||
allDefs,
|
||||
};
|
||||
const converted = processJson(_.omit(json, ['_templates']), args);
|
||||
const out = path.join(outdir, json._templates[key].file);
|
||||
fs.writeFileSync(out, HEADER + yaml.dump(converted, dumpOptions));
|
||||
}
|
||||
} else {
|
||||
fs.writeFileSync(path.join(outdir, file), HEADER + yaml.dump(processJson(json), dumpOptions));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function deleteOldFiles() {
|
||||
const files = fs.readdirSync(outdir);
|
||||
for (const file of files) {
|
||||
fs.unlinkSync(path.join(outdir, file));
|
||||
}
|
||||
}
|
||||
|
||||
function run() {
|
||||
deleteOldFiles();
|
||||
readIncludes();
|
||||
processFiles();
|
||||
}
|
||||
|
||||
run();
|
||||
43
common/translations-cli/addMissing.js
Normal file
43
common/translations-cli/addMissing.js
Normal file
@@ -0,0 +1,43 @@
|
||||
//@ts-check
|
||||
const { getDefaultTranslations, getLanguageTranslations } = require('./helpers');
|
||||
|
||||
/**
|
||||
* @param {string} language
|
||||
*/
|
||||
function getMissingTranslations(language) {
|
||||
const source = getDefaultTranslations();
|
||||
/** @type {Record<string, string>} */
|
||||
let target;
|
||||
|
||||
try {
|
||||
target = getLanguageTranslations(language);
|
||||
} catch {
|
||||
console.log(`Language ${language} not found, creating a new one`);
|
||||
target = {};
|
||||
}
|
||||
|
||||
let added = 0;
|
||||
let removed = 0;
|
||||
|
||||
for (const key in source) {
|
||||
if (!target[key]) {
|
||||
target[key] = `*** ${source[key]}`;
|
||||
added++;
|
||||
}
|
||||
}
|
||||
|
||||
for (const key in target) {
|
||||
if (!source[key]) {
|
||||
delete target[key];
|
||||
removed++;
|
||||
}
|
||||
}
|
||||
|
||||
const newLength = Object.keys(target).length;
|
||||
|
||||
return { result: target, stats: { added, removed, newLength } };
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getMissingTranslations,
|
||||
};
|
||||
16
common/translations-cli/constants.js
Normal file
16
common/translations-cli/constants.js
Normal file
@@ -0,0 +1,16 @@
|
||||
// @ts-check
|
||||
//
|
||||
const defaultLanguage = 'en';
|
||||
|
||||
/** @typedef {{ extensions: string[], directories: string[] }} ExtractConfig
|
||||
|
||||
/** @type {ExtractConfig} */
|
||||
const defaultExtractConfig = {
|
||||
extensions: ['.js', '.ts', '.svelte'],
|
||||
directories: ['app', 'packages/web'],
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
defaultLanguage,
|
||||
defaultExtractConfig,
|
||||
};
|
||||
85
common/translations-cli/extract.js
Normal file
85
common/translations-cli/extract.js
Normal file
@@ -0,0 +1,85 @@
|
||||
//@ts-check
|
||||
const fs = require('fs');
|
||||
const { promisify } = require('util');
|
||||
|
||||
const { getFiles } = require('./helpers');
|
||||
|
||||
const readFilePromise = promisify(fs.readFile);
|
||||
|
||||
const translationRegex = /_t\(\s*['"]([^'"]+)['"]\s*,\s*\{\s*defaultMessage\s*:\s*(?:'([^'\\]*(?:\\.[^'\\]*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)"|\`([^`\\]*(?:\\.[^`\\]*)*(?:\{[^}]*\}[^`\\]*(?:\\.[^`\\]*)*)*)\`)(?:\s*,\s*[^}]*)*\s*\}/g;
|
||||
|
||||
/**
|
||||
* @param {string} file
|
||||
*
|
||||
* @returns {Promise<Record<string, string>>}
|
||||
*/
|
||||
async function extractTranslationsFromFile(file) {
|
||||
/** @type {Record<string, string>} */
|
||||
const translations = {};
|
||||
const content = await readFilePromise(file, 'utf-8');
|
||||
let match;
|
||||
|
||||
while ((match = translationRegex.exec(content)) !== null) {
|
||||
const [_, key, singleQuotedText, doubleQuotedText, templateLiteral] = match;
|
||||
const defaultText = singleQuotedText || doubleQuotedText || templateLiteral;
|
||||
translations[key] = defaultText;
|
||||
}
|
||||
|
||||
return translations;
|
||||
}
|
||||
|
||||
/** @typedef {{ ignoreDuplicates?: boolean }} ExtractOptions */
|
||||
|
||||
/**
|
||||
* @param {string[]} directories
|
||||
* @param {string[]} extensions
|
||||
* @param {ExtractOptions} options
|
||||
*
|
||||
* @returns {Promise<Record<string, string>>}
|
||||
*/
|
||||
async function extractAllTranslations(directories, extensions, options = {}) {
|
||||
const { ignoreDuplicates } = options;
|
||||
|
||||
try {
|
||||
/** @type {Record<string, string>} */
|
||||
const allTranslations = {};
|
||||
/** @type {Record<string, string[]>} */
|
||||
const translationKeyToFiles = {};
|
||||
|
||||
for (const dir of directories) {
|
||||
const files = await getFiles(dir, extensions);
|
||||
|
||||
for (const file of files) {
|
||||
const fileTranslations = await extractTranslationsFromFile(file);
|
||||
|
||||
for (const key in fileTranslations) {
|
||||
if (!translationKeyToFiles[key]) {
|
||||
translationKeyToFiles[key] = [];
|
||||
}
|
||||
|
||||
translationKeyToFiles[key].push(file);
|
||||
|
||||
if (!ignoreDuplicates && allTranslations[key] && allTranslations[key] !== fileTranslations[key]) {
|
||||
console.error(
|
||||
`Different translations for the same key [${key}] found. ${file}: ${
|
||||
fileTranslations[key]
|
||||
}. Previous value: ${allTranslations[key]} was found in ${translationKeyToFiles[key].join(', ')}`
|
||||
);
|
||||
throw new Error(`Duplicate translation key found: ${key}`);
|
||||
}
|
||||
|
||||
allTranslations[key] = fileTranslations[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return allTranslations;
|
||||
} catch (error) {
|
||||
console.error('Error extracting translations:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
module.exports = {
|
||||
extractTranslationsFromFile,
|
||||
extractAllTranslations,
|
||||
};
|
||||
198
common/translations-cli/helpers.js
Normal file
198
common/translations-cli/helpers.js
Normal file
@@ -0,0 +1,198 @@
|
||||
//@ts-check
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const { defaultLanguage } = require('./constants');
|
||||
const sortJsonKeysAlphabetically = require('./sortJsonKeysAlphabetically');
|
||||
|
||||
/**
|
||||
* @param {string} file
|
||||
* @param {string[]} extensions
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function hasValidExtension(file, extensions) {
|
||||
return extensions.includes(path.extname(file).toLowerCase());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} dir
|
||||
* @param {string[]} extensions
|
||||
*
|
||||
* @returns {Promise<string[]>}
|
||||
*/
|
||||
async function getFiles(dir, extensions) {
|
||||
const files = await fs.promises.readdir(dir);
|
||||
const allFiles = await Promise.all(
|
||||
files.map(async file => {
|
||||
const filePath = path.join(dir, file);
|
||||
const stats = await fs.promises.stat(filePath);
|
||||
|
||||
if (stats.isDirectory()) {
|
||||
return getFiles(filePath, extensions);
|
||||
} else if (stats.isFile() && hasValidExtension(file, extensions)) {
|
||||
const slashPath = filePath.replace(/\\/g, '/');
|
||||
if (slashPath.includes('/node_modules/') || slashPath.includes('/build/') || slashPath.includes('/dist/')) {
|
||||
return null;
|
||||
}
|
||||
return filePath;
|
||||
}
|
||||
return null;
|
||||
})
|
||||
);
|
||||
|
||||
const validFiles = /** @type {string[]} */ (allFiles.flat().filter(file => file !== null));
|
||||
|
||||
return validFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string | string[]} value
|
||||
*
|
||||
* @returns {string}
|
||||
*/
|
||||
function formatDefaultValue(value) {
|
||||
if (Array.isArray(value)) {
|
||||
return value.join(', ');
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
const scriptDir = getScriptDir();
|
||||
/** @param {string} file
|
||||
*
|
||||
* @returns {string}
|
||||
*/
|
||||
function resolveFile(file) {
|
||||
if (path.isAbsolute(file)) {
|
||||
return file;
|
||||
}
|
||||
|
||||
return path.resolve(scriptDir, '..', '..', file);
|
||||
}
|
||||
|
||||
/** @param {string[]} dirs
|
||||
*
|
||||
* @returns {string[]}
|
||||
*/
|
||||
function resolveDirs(dirs) {
|
||||
return dirs.map(resolveFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string[]} extensions
|
||||
*
|
||||
* @returns {string[]}
|
||||
*/
|
||||
function resolveExtensions(extensions) {
|
||||
return extensions.map(ext => (ext.startsWith('.') ? ext : `.${ext}`));
|
||||
}
|
||||
|
||||
function getScriptDir() {
|
||||
if (require.main?.filename) {
|
||||
return path.dirname(require.main.filename);
|
||||
}
|
||||
|
||||
if ('pkg' in process && process.pkg) {
|
||||
return path.dirname(process.execPath);
|
||||
}
|
||||
|
||||
return __dirname;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} file
|
||||
*/
|
||||
function ensureFileDirExists(file) {
|
||||
const dir = path.dirname(file);
|
||||
|
||||
if (!fs.existsSync(dir)) {
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Record<string, string>} existingTranslations - Previously extracted translations
|
||||
* @param {Record<string, string>} newTranslations - Newly extracted translations
|
||||
* @returns {{ added: string[], removed: string[], updated: string[] }} Translation changes
|
||||
*/
|
||||
const getTranslationChanges = (existingTranslations, newTranslations) => {
|
||||
const existingKeys = new Set(Object.keys(existingTranslations || {}));
|
||||
const newKeys = new Set(Object.keys(newTranslations));
|
||||
|
||||
const added = [...newKeys].filter(key => !existingKeys.has(key));
|
||||
const removed = [...existingKeys].filter(key => !newKeys.has(key));
|
||||
const updated = [...newKeys].filter(
|
||||
key => existingKeys.has(key) && existingTranslations[key] !== newTranslations[key]
|
||||
);
|
||||
|
||||
return { added, removed, updated };
|
||||
};
|
||||
|
||||
function getDefaultTranslations() {
|
||||
return getLanguageTranslations(defaultLanguage);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} language
|
||||
*
|
||||
* @returns {Record<string, string>}
|
||||
*/
|
||||
function getLanguageTranslations(language) {
|
||||
const file = resolveFile(`translations/${language}.json`);
|
||||
const content = fs.readFileSync(file, 'utf-8');
|
||||
|
||||
return JSON.parse(content);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} language
|
||||
* @param {Record<string, string>} translations
|
||||
*/
|
||||
function setLanguageTranslations(language, translations) {
|
||||
const file = resolveFile(`translations/${language}.json`);
|
||||
const sorted = sortJsonKeysAlphabetically(translations);
|
||||
|
||||
fs.writeFileSync(file, JSON.stringify(sorted, null, 2));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} language
|
||||
* @param {Record<string, string>} newTranslations
|
||||
*/
|
||||
function updateLanguageTranslations(language, newTranslations) {
|
||||
const translations = getLanguageTranslations(language);
|
||||
const updatedTranslations = { ...translations, ...newTranslations };
|
||||
const sorted = sortJsonKeysAlphabetically(updatedTranslations);
|
||||
|
||||
setLanguageTranslations(language, sorted);
|
||||
}
|
||||
|
||||
function getAllLanguages() {
|
||||
const dir = resolveFile('translations');
|
||||
|
||||
const files = fs.readdirSync(dir);
|
||||
const languages = files.filter(file => file.endsWith('.json')).map(file => file.replace('.json', ''));
|
||||
|
||||
return languages;
|
||||
}
|
||||
|
||||
function getAllNonDefaultLanguages() {
|
||||
return getAllLanguages().filter(language => language !== defaultLanguage);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
hasValidExtension,
|
||||
getFiles,
|
||||
formatDefaultValue,
|
||||
resolveFile,
|
||||
resolveDirs,
|
||||
resolveExtensions,
|
||||
ensureFileDirExists,
|
||||
getTranslationChanges,
|
||||
getDefaultTranslations,
|
||||
getLanguageTranslations,
|
||||
setLanguageTranslations,
|
||||
updateLanguageTranslations,
|
||||
getAllLanguages,
|
||||
getAllNonDefaultLanguages,
|
||||
};
|
||||
3
common/translations-cli/index.js
Normal file
3
common/translations-cli/index.js
Normal file
@@ -0,0 +1,3 @@
|
||||
const { program } = require('./program');
|
||||
|
||||
program.parse();
|
||||
190
common/translations-cli/program.js
Normal file
190
common/translations-cli/program.js
Normal file
@@ -0,0 +1,190 @@
|
||||
//@ts-check
|
||||
const fs = require('fs');
|
||||
const { program } = require('commander');
|
||||
const {
|
||||
resolveDirs,
|
||||
resolveExtensions,
|
||||
getTranslationChanges,
|
||||
setLanguageTranslations,
|
||||
getAllNonDefaultLanguages,
|
||||
updateLanguageTranslations,
|
||||
getDefaultTranslations,
|
||||
} = require('./helpers');
|
||||
const { extractAllTranslations } = require('./extract');
|
||||
const { getMissingTranslations } = require('./addMissing');
|
||||
const { defaultLanguage, defaultExtractConfig } = require('./constants');
|
||||
const { removeUnusedAllTranslations, removeUnusedForSignelLanguage } = require('./removeUnused');
|
||||
|
||||
/**
|
||||
* @typedef {import('./constants').ExtractConfig & { verbose?: boolean, ignoreUnused?: boolean }} ExtractOptions
|
||||
*/
|
||||
|
||||
program.name('dbgate-translations-cli').description('CLI tool for managing translation').version('1.0.0');
|
||||
|
||||
program
|
||||
.command('extract')
|
||||
.description('Extract translation keys from source files')
|
||||
.option('-d, --directories <directories...>', 'directories to search', defaultExtractConfig.directories)
|
||||
.option('-e, --extensions <extensions...>', 'file extensions to process', defaultExtractConfig.extensions)
|
||||
.option('-r, --ignoreUnused', 'Ignore unused keys in the output file')
|
||||
.option('-v, --verbose', 'verbose mode')
|
||||
.action(async (/** @type {ExtractOptions} */ options) => {
|
||||
try {
|
||||
const { directories, extensions, verbose, ignoreUnused } = options;
|
||||
|
||||
const resolvedRirectories = resolveDirs(directories);
|
||||
const resolvedExtensions = resolveExtensions(extensions);
|
||||
|
||||
const extractedTranslations = await extractAllTranslations(resolvedRirectories, resolvedExtensions);
|
||||
const defaultTranslations = getDefaultTranslations();
|
||||
|
||||
const { added, removed, updated } = getTranslationChanges(defaultTranslations, extractedTranslations);
|
||||
|
||||
console.log('\nTranslation changes:');
|
||||
console.log(`- Added: ${added.length} keys`);
|
||||
console.log(`- ${ignoreUnused ? 'Unused' : 'Removed'}: ${removed.length} keys`);
|
||||
console.log(`- Updated: ${updated.length} keys`);
|
||||
console.log(`- Total: ${Object.keys(extractedTranslations).length} keys`);
|
||||
|
||||
if (verbose) {
|
||||
if (added.length > 0) {
|
||||
console.log('\nNew keys:');
|
||||
added.forEach(key => console.log(` + ${key}`));
|
||||
}
|
||||
|
||||
if (removed.length > 0) {
|
||||
console.log('\nRemoved keys:');
|
||||
removed.forEach(key => console.log(` - ${key}`));
|
||||
}
|
||||
|
||||
if (updated.length > 0) {
|
||||
console.log('\nUpdated keys:');
|
||||
updated.forEach(key => {
|
||||
console.log(` ~ ${key}`);
|
||||
console.log(` Old: ${defaultLanguage[key]}`);
|
||||
console.log(` New: ${extractedTranslations[key]}`);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (ignoreUnused) {
|
||||
console.log('New translations were saved. Unused keys are kept.\n');
|
||||
updateLanguageTranslations(defaultLanguage, extractedTranslations);
|
||||
|
||||
if (verbose) {
|
||||
console.log('\nUnused keys:');
|
||||
for (const key of removed) {
|
||||
console.log(`${key}: "${defaultTranslations[key]}"`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log('Unused keys were removed.\n');
|
||||
setLanguageTranslations(defaultLanguage, extractedTranslations);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
console.error('Error during extraction:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
const ALL_LANGUAGES = 'all';
|
||||
|
||||
/**
|
||||
* @param {string} target
|
||||
*/
|
||||
function addMissingTranslations(target) {
|
||||
console.log(`Adding missing keys for language: ${target}`);
|
||||
const { result, stats } = getMissingTranslations(target);
|
||||
console.log(`Added: ${stats.added}, Removed: ${stats.removed}, Total: ${stats.newLength}`);
|
||||
setLanguageTranslations(target, result);
|
||||
console.log(`New translations for ${target} were saved.`);
|
||||
}
|
||||
|
||||
program
|
||||
.command('add-missing')
|
||||
.description('Add missing keys for a langauge to the translation file')
|
||||
.option('-t, --target <target>', 'language to add missing translations to', ALL_LANGUAGES)
|
||||
.action(options => {
|
||||
try {
|
||||
const { target } = options;
|
||||
const languages = getAllNonDefaultLanguages();
|
||||
|
||||
if (target === ALL_LANGUAGES) {
|
||||
console.log('Adding missing keys for all languages\n');
|
||||
for (const language of languages) {
|
||||
addMissingTranslations(language);
|
||||
console.log();
|
||||
}
|
||||
} else {
|
||||
addMissingTranslations(target);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
console.error('Error during add-missing:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
program
|
||||
.command('remove-unused')
|
||||
.description('Remove unused keys from the translation files')
|
||||
.option('-t, --target <target>', 'language to add missing translations to', ALL_LANGUAGES)
|
||||
.action(async options => {
|
||||
try {
|
||||
const { target } = options;
|
||||
if (target === ALL_LANGUAGES) {
|
||||
console.log('Removing unused keys from all languages\n');
|
||||
await removeUnusedAllTranslations();
|
||||
} else {
|
||||
await removeUnusedForSignelLanguage(target);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
console.error('Error during add-missing:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
program
|
||||
.command('check')
|
||||
.description('Check if there are multiple default values for the same key')
|
||||
.action(async () => {
|
||||
try {
|
||||
await extractAllTranslations(defaultExtractConfig.directories, defaultExtractConfig.extensions);
|
||||
console.log('No problems found while extracting translations.');
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
console.error('Error during check:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
program
|
||||
.command('sort')
|
||||
.description('Sort translation files by keys')
|
||||
.action(() => {
|
||||
try {
|
||||
const languages = getAllNonDefaultLanguages();
|
||||
for (const language of languages) {
|
||||
const filePath = `./translations/${language}.json`;
|
||||
const content = fs.readFileSync(filePath, 'utf-8');
|
||||
const translations = JSON.parse(content);
|
||||
const sortedTranslations = {};
|
||||
Object.keys(translations)
|
||||
.sort()
|
||||
.forEach(key => {
|
||||
// @ts-ignore
|
||||
sortedTranslations[key] = translations[key];
|
||||
});
|
||||
fs.writeFileSync(filePath, JSON.stringify(sortedTranslations, null, 2), 'utf-8');
|
||||
console.log(`Sorted translations for language: ${language}`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
console.error('Error during sort:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = { program };
|
||||
46
common/translations-cli/removeUnused.js
Normal file
46
common/translations-cli/removeUnused.js
Normal file
@@ -0,0 +1,46 @@
|
||||
// @ts-check
|
||||
const { defaultExtractConfig } = require('./constants');
|
||||
const { extractAllTranslations } = require('./extract');
|
||||
const { getLanguageTranslations, getAllLanguages, setLanguageTranslations } = require('./helpers');
|
||||
|
||||
const { directories, extensions } = defaultExtractConfig;
|
||||
|
||||
/**
|
||||
* @param {string} language
|
||||
* @param {Record<string, string>} source
|
||||
*/
|
||||
function getUsedTranslations(language, source) {
|
||||
const languageTranslations = getLanguageTranslations(language);
|
||||
|
||||
for (const key in languageTranslations) {
|
||||
if (!(key in source)) {
|
||||
delete languageTranslations[key];
|
||||
}
|
||||
}
|
||||
|
||||
return languageTranslations;
|
||||
}
|
||||
|
||||
async function removeUnusedAllTranslations() {
|
||||
const source = await extractAllTranslations(directories, extensions);
|
||||
const languages = getAllLanguages();
|
||||
|
||||
for (const language of languages) {
|
||||
const newTranslations = getUsedTranslations(language, source);
|
||||
setLanguageTranslations(language, newTranslations);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} language
|
||||
*/
|
||||
async function removeUnusedForSignelLanguage(language) {
|
||||
const source = await extractAllTranslations(directories, extensions);
|
||||
const newTranslations = getUsedTranslations(language, source);
|
||||
setLanguageTranslations(language, newTranslations);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
removeUnusedAllTranslations,
|
||||
removeUnusedForSignelLanguage,
|
||||
};
|
||||
24
common/translations-cli/sortJsonKeysAlphabetically.js
Normal file
24
common/translations-cli/sortJsonKeysAlphabetically.js
Normal file
@@ -0,0 +1,24 @@
|
||||
// @ts-check
|
||||
|
||||
/**
|
||||
* @param {object|string} json
|
||||
* @returns {object}
|
||||
*/
|
||||
function sortJsonKeysAlphabetically(json) {
|
||||
const obj = typeof json === 'string' ? JSON.parse(json) : json;
|
||||
|
||||
if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {
|
||||
return obj;
|
||||
}
|
||||
|
||||
const sortedObj = Object.keys(obj)
|
||||
.sort()
|
||||
.reduce((result, key) => {
|
||||
result[key] = obj[key];
|
||||
return result;
|
||||
}, {});
|
||||
|
||||
return sortedObj;
|
||||
}
|
||||
|
||||
module.exports = sortJsonKeysAlphabetically;
|
||||
133
common/translations-cli/translate.js
Normal file
133
common/translations-cli/translate.js
Normal file
@@ -0,0 +1,133 @@
|
||||
require('dotenv').config({ path: '.env.translation' });
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const OpenAI = require('openai');
|
||||
|
||||
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
|
||||
|
||||
const translationsDir = path.join(__dirname, '../../translations');
|
||||
const enFilePath = path.join(translationsDir, 'en.json');
|
||||
|
||||
const languageNames = {
|
||||
'cs.json': 'Czech',
|
||||
'de.json': 'German',
|
||||
'es.json': 'Spanish',
|
||||
'fr.json': 'French',
|
||||
'it.json': 'Italian',
|
||||
'ja.json': 'Japanese',
|
||||
'ko.json': 'Korean',
|
||||
'pt.json': 'Portuguese',
|
||||
'sk.json': 'Slovak',
|
||||
'zh.json': 'Chinese'
|
||||
};
|
||||
|
||||
// Read source (english)
|
||||
const enTranslations = JSON.parse(fs.readFileSync(enFilePath, 'utf8'));
|
||||
const enKeys = Object.keys(enTranslations);
|
||||
|
||||
// Get all translation files
|
||||
const translationFiles = fs.readdirSync(translationsDir)
|
||||
.filter(file => file.endsWith('.json') && file !== 'en.json')
|
||||
.sort();
|
||||
|
||||
console.log(`Found ${enKeys.length} keys in en.json\n`);
|
||||
console.log('='.repeat(80));
|
||||
|
||||
async function translateMissingIds({file, translations, missingIds}){
|
||||
const languageName = languageNames[file];
|
||||
if (!languageName) {
|
||||
console.log(`No language name mapping for file: ${file}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Build object with only missing translations
|
||||
const needed = {};
|
||||
missingIds.forEach(key => {
|
||||
needed[key] = enTranslations[key];
|
||||
});
|
||||
|
||||
// Get all existing translations as style examples
|
||||
const existingTranslations = {};
|
||||
Object.keys(translations).forEach(key => {
|
||||
if (translations[key] && !translations[key].startsWith('***')) {
|
||||
existingTranslations[key] = {
|
||||
en: enTranslations[key],
|
||||
translated: translations[key]
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
const prompt = `You are a professional translator for DbGate, a database management application.
|
||||
|
||||
Translate the following English UI strings to ${languageName}.
|
||||
|
||||
IMPORTANT RULES:
|
||||
1. Preserve ALL placeholders exactly as they appear: {plugin}, {columnNumber}, {0}, {1}, etc.
|
||||
2. Maintain technical terminology appropriately for database software
|
||||
3. Match the translation style, tone, and formality of the existing translations shown below
|
||||
4. Keep the same level of brevity or verbosity as the existing translations
|
||||
5. Return ONLY valid JSON - no markdown, no explanations, no code blocks
|
||||
6. Use the same keys as provided
|
||||
|
||||
EXISTING TRANSLATIONS (for style reference):
|
||||
${JSON.stringify(existingTranslations, null, 2)}
|
||||
|
||||
STRINGS TO TRANSLATE:
|
||||
${JSON.stringify(needed, null, 2)}
|
||||
|
||||
Return format: {"key": "translated value", ...}`;
|
||||
|
||||
const response = await client.chat.completions.create({
|
||||
model: 'gpt-5.1',
|
||||
messages: [
|
||||
{ role: 'system', content: 'You are a professional translator specializing in software localization. Match the style and tone of existing translations. Return only valid JSON.' },
|
||||
{ role: 'user', content: prompt }
|
||||
],
|
||||
temperature: 0.2
|
||||
});
|
||||
|
||||
let translatedJson = response.choices[0].message.content.trim();
|
||||
|
||||
// Remove markdown code blocks if present
|
||||
translatedJson = translatedJson.replace(/^```json\n?/, '').replace(/\n?```$/, '');
|
||||
|
||||
return JSON.parse(translatedJson);
|
||||
}
|
||||
|
||||
(async () => {
|
||||
for (const file of translationFiles) {
|
||||
const filePath = path.join(translationsDir, file);
|
||||
const translations = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
||||
|
||||
const missingIds = enKeys.filter(key => !translations.hasOwnProperty(key) || (typeof translations[key] === 'string' && translations[key].startsWith('***')));
|
||||
|
||||
|
||||
console.log(`\n${file.toUpperCase()}`);
|
||||
console.log('-'.repeat(80));
|
||||
|
||||
if (missingIds.length === 0) {
|
||||
console.log('✓ All translations complete!');
|
||||
continue;
|
||||
} else {
|
||||
console.log(`Found ${missingIds.length} untranslated IDs\n`);
|
||||
}
|
||||
|
||||
const newTranslations = await translateMissingIds({file, translations, missingIds});
|
||||
|
||||
if (!newTranslations) {
|
||||
console.log(`Skipping file due to translation error: ${file}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const [key, value] of Object.entries(newTranslations)) {
|
||||
translations[key] = value;
|
||||
console.log(`Translated: ${key} => ${value}`);
|
||||
}
|
||||
|
||||
fs.writeFileSync(filePath, JSON.stringify(translations, null, 2) + '\n', 'utf8');
|
||||
console.log(`\n✓ Updated translations written to ${file}`);
|
||||
}
|
||||
|
||||
console.log('\n' + '='.repeat(80));
|
||||
console.log('Translation complete!\n');
|
||||
})();
|
||||
1
common/useBundleExternals.js
Normal file
1
common/useBundleExternals.js
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = 'false';
|
||||
30
common/volatilePackages.js
Normal file
30
common/volatilePackages.js
Normal file
@@ -0,0 +1,30 @@
|
||||
// these packages will be never bundled with webpack
|
||||
|
||||
const volatilePackages = [
|
||||
'@clickhouse/client',
|
||||
'bson', // this package is already bundled and is used in mongodb
|
||||
'mongodb',
|
||||
'mongodb-old',
|
||||
'mongodb-client-encryption',
|
||||
'tedious',
|
||||
'msnodesqlv8',
|
||||
'mysql2',
|
||||
'oracledb',
|
||||
'pg-copy-streams',
|
||||
'pg',
|
||||
'ioredis',
|
||||
'node-redis-dump2',
|
||||
'better-sqlite3',
|
||||
'libsql',
|
||||
'@azure/cosmos',
|
||||
'@aws-sdk/rds-signer',
|
||||
'activedirectory2',
|
||||
'axios',
|
||||
'ssh2',
|
||||
'wkx',
|
||||
'@duckdb/node-api',
|
||||
'@mongosh/browser-runtime-electron',
|
||||
'@mongosh/service-provider-node-driver',
|
||||
];
|
||||
|
||||
module.exports = volatilePackages;
|
||||
@@ -1,6 +1,6 @@
|
||||
# this compose file is for testing purposes only
|
||||
# use it for testing docker containsers built on local machine
|
||||
version: "3"
|
||||
version: '3'
|
||||
services:
|
||||
dbgate:
|
||||
build: docker
|
||||
@@ -15,31 +15,31 @@ services:
|
||||
|
||||
volumes:
|
||||
- dbgate-data:/root/.dbgate
|
||||
|
||||
|
||||
# environment:
|
||||
# WEB_ROOT: /dbgate
|
||||
|
||||
# CONNECTIONS: mssql
|
||||
# LABEL_mssql: MS Sql
|
||||
# SERVER_mssql: mssql
|
||||
# USER_mssql: sa
|
||||
# PORT_mssql: 1433
|
||||
# PASSWORD_mssql: Pwd2020Db
|
||||
# ENGINE_mssql: mssql@dbgate-plugin-mssql
|
||||
# proxy:
|
||||
# # image: nginx
|
||||
# build: test/nginx
|
||||
# ports:
|
||||
# - 8082:80
|
||||
# CONNECTIONS: mssql
|
||||
# LABEL_mssql: MS Sql
|
||||
# SERVER_mssql: mssql
|
||||
# USER_mssql: sa
|
||||
# PORT_mssql: 1433
|
||||
# PASSWORD_mssql: Pwd2020Db
|
||||
# ENGINE_mssql: mssql@dbgate-plugin-mssql
|
||||
proxy:
|
||||
# image: nginx
|
||||
build: test/nginx
|
||||
ports:
|
||||
- 8082:80
|
||||
|
||||
# volumes:
|
||||
# - /home/jena/test/chinook:/mnt/sqt
|
||||
# environment:
|
||||
# CONNECTIONS: sqlite
|
||||
volumes:
|
||||
- /home/jena/test/chinook:/mnt/sqt
|
||||
environment:
|
||||
CONNECTIONS: sqlite
|
||||
|
||||
# LABEL_sqlite: sqt
|
||||
# FILE_sqlite: /mnt/sqt/Chinook.db
|
||||
# ENGINE_sqlite: sqlite@dbgate-plugin-sqlite
|
||||
LABEL_sqlite: sqt
|
||||
FILE_sqlite: /mnt/sqt/Chinook.db
|
||||
ENGINE_sqlite: sqlite@dbgate-plugin-sqlite
|
||||
|
||||
# mssql:
|
||||
# image: mcr.microsoft.com/mssql/server
|
||||
@@ -51,4 +51,5 @@ services:
|
||||
|
||||
volumes:
|
||||
dbgate-data:
|
||||
driver: local
|
||||
driver: local
|
||||
|
||||
|
||||
@@ -1,21 +1,12 @@
|
||||
FROM ubuntu:22.04
|
||||
FROM node:22
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/dbgate/dbgate"
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
curl \
|
||||
gnupg \
|
||||
iputils-ping \
|
||||
iproute2 \
|
||||
unixodbc \
|
||||
gcc \
|
||||
g++ \
|
||||
make
|
||||
|
||||
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource-archive-keyring.gpg \
|
||||
&& echo "deb [signed-by=/usr/share/keyrings/nodesource-archive-keyring.gpg] https://deb.nodesource.com/node_18.x jammy main" | tee /etc/apt/sources.list.d/nodesource.list \
|
||||
&& echo "deb-src [signed-by=/usr/share/keyrings/nodesource-archive-keyring.gpg] https://deb.nodesource.com/node_18.x jammy main" | tee -a /etc/apt/sources.list.d/nodesource.list \
|
||||
&& apt-get update && apt-get install -y nodejs \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& npm install -g yarn
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /home/dbgate-docker
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
FROM node:18-alpine
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/dbgate/dbgate"
|
||||
|
||||
WORKDIR /home/dbgate-docker
|
||||
|
||||
RUN apk --no-cache upgrade \
|
||||
|
||||
8
e2e-tests/.localconfig.js
Normal file
8
e2e-tests/.localconfig.js
Normal file
@@ -0,0 +1,8 @@
|
||||
module.exports = {
|
||||
mysql: true,
|
||||
postgres: true,
|
||||
mssql: true,
|
||||
oracle: true,
|
||||
sqlite: true,
|
||||
mongo: true
|
||||
};
|
||||
43
e2e-tests/clearTestingData.js
Normal file
43
e2e-tests/clearTestingData.js
Normal file
@@ -0,0 +1,43 @@
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
const fs = require('fs');
|
||||
|
||||
const baseDir = path.join(os.homedir(), '.dbgate');
|
||||
const testApiPidFile = path.join(__dirname, 'tmpdata', 'test-api.pid');
|
||||
|
||||
function clearTestingData() {
|
||||
if (fs.existsSync(testApiPidFile)) {
|
||||
try {
|
||||
const pid = Number(fs.readFileSync(testApiPidFile, 'utf-8'));
|
||||
if (Number.isInteger(pid) && pid > 0) {
|
||||
process.kill(pid);
|
||||
}
|
||||
} catch (err) {
|
||||
// ignore stale PID files and dead processes
|
||||
}
|
||||
|
||||
try {
|
||||
fs.unlinkSync(testApiPidFile);
|
||||
} catch (err) {
|
||||
// ignore cleanup errors
|
||||
}
|
||||
}
|
||||
|
||||
if (fs.existsSync(path.join(baseDir, 'connections-e2etests.jsonl'))) {
|
||||
fs.unlinkSync(path.join(baseDir, 'connections-e2etests.jsonl'));
|
||||
}
|
||||
if (fs.existsSync(path.join(baseDir, 'settings-e2etests.json'))) {
|
||||
fs.unlinkSync(path.join(baseDir, 'settings-e2etests.json'));
|
||||
}
|
||||
if (fs.existsSync(path.join(baseDir, 'files-e2etests'))) {
|
||||
fs.rmdirSync(path.join(baseDir, 'files-e2etests'), { recursive: true });
|
||||
}
|
||||
if (fs.existsSync(path.join(baseDir, 'archive-e2etests'))) {
|
||||
fs.rmdirSync(path.join(baseDir, 'archive-e2etests'), { recursive: true });
|
||||
}
|
||||
if (fs.existsSync(path.join(__dirname, 'tmpdata', 'my_guitar_shop.db'))) {
|
||||
fs.unlinkSync(path.join(__dirname, 'tmpdata', 'my_guitar_shop.db'));
|
||||
}
|
||||
}
|
||||
|
||||
clearTestingData();
|
||||
7
e2e-tests/containers/dex/Dockerfile
Normal file
7
e2e-tests/containers/dex/Dockerfile
Normal file
@@ -0,0 +1,7 @@
|
||||
FROM dexidp/dex:v2.35.3
|
||||
|
||||
COPY dex-config.yaml /etc/dex/cfg/config.yaml
|
||||
|
||||
EXPOSE 5556
|
||||
|
||||
CMD ["dex", "serve", "/etc/dex/cfg/config.yaml"]
|
||||
27
e2e-tests/containers/dex/dex-config.yaml
Normal file
27
e2e-tests/containers/dex/dex-config.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
issuer: http://localhost:16009/dex
|
||||
storage:
|
||||
type: memory
|
||||
web:
|
||||
http: 0.0.0.0:5556
|
||||
|
||||
oauth2:
|
||||
skipApprovalScreen: true
|
||||
|
||||
staticClients:
|
||||
- id: my-app
|
||||
redirectURIs:
|
||||
- 'http://localhost:3000/'
|
||||
name: 'My Test App'
|
||||
secret: my-secret
|
||||
|
||||
enablePasswordDB: true
|
||||
staticPasswords:
|
||||
- email: "test@example.com"
|
||||
emailVerified: true
|
||||
hash: "$2y$10$JcmlXnV1y7.egUdKwYNbseOnqYVIGc323gtvvHh4ZuSPZB30veYZy"
|
||||
username: "test"
|
||||
userID: "1234"
|
||||
allowedScopes:
|
||||
- openid
|
||||
- email
|
||||
- profile
|
||||
27
e2e-tests/containers/mysql-ssh-keyfile/Dockerfile
Normal file
27
e2e-tests/containers/mysql-ssh-keyfile/Dockerfile
Normal file
@@ -0,0 +1,27 @@
|
||||
FROM ubuntu:22.04
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y openssh-server mysql-server && \
|
||||
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN mkdir /var/run/sshd
|
||||
|
||||
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config && \
|
||||
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin without-password/' /etc/ssh/sshd_config
|
||||
|
||||
RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh
|
||||
|
||||
COPY mykey.pub /root/.ssh/authorized_keys
|
||||
|
||||
RUN chmod 600 /root/.ssh/authorized_keys
|
||||
|
||||
RUN service mysql start && \
|
||||
mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES;" && \
|
||||
service mysql stop
|
||||
|
||||
EXPOSE 22
|
||||
|
||||
COPY start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
CMD ["/start.sh"]
|
||||
1
e2e-tests/containers/mysql-ssh-keyfile/mykey.pub
Normal file
1
e2e-tests/containers/mysql-ssh-keyfile/mykey.pub
Normal file
@@ -0,0 +1 @@
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQClN/tu+X7PVYpMBEQDwxtyG0oNuKqcJdBud/vBUalyYSpliXO30BsBusjCyAh8ENVllmGTRaTcqAUPg/vwekaAMFZu9EXmQsdhPEWSxrkPkXXKsWrZVPtRV8l3wuSy/VLxbXRLujTpIEE5Au88e2CFN3zzuhg9rvsXE0cGjyYe9Cw3Ub+Yo6rbnESI7F+Jun29/wD8RF+kRL5cr7BrDoOBQf4yGexrTbUPMZ4b8QlGfXUwZhn6LlWVoWq7BMRelnfIAkuC+LwavvnkMqXMITmGa7sG0zOXByW7iGdP6TWVq9Ks+yCZoAA9ncAkgkpwoNrOSXR6dM5UjrsfJ2Na332QfxK8MmC+nBiyXIKUaQY2G8Wfm93GQqDc+349JFwH4ZjgYWJlTd/UfRCn4j30jxe1RKnjt5xGqb3L+j8JfuSPcojWRekg/K8GxBmaMCcEdqjIFD4MxeIUW3bGHd30wnuZkTPWlSmAGrO0fZXj0s1fmOBME05TjE8jsyKPmb2Kd3JdtCuTrjOgrYiHaMfcv/VqVhIv2kCKjnvhAxCqfGfKxxgcerItbrsfFAvYak1kwZelBquHOK6SkMH5WhDyhvGY+ZF0Wbg3CpynlpJVu4E3LSglYNbkIWqS3pAf+hqJtXl9SHCLgKFUcCIz0ZNQkT+PtUlR3klp6qoPXUWrcL3pdQ== test
|
||||
7
e2e-tests/containers/mysql-ssh-keyfile/start.sh
Normal file
7
e2e-tests/containers/mysql-ssh-keyfile/start.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
service ssh start
|
||||
|
||||
service mysql start
|
||||
|
||||
tail -f /dev/null
|
||||
23
e2e-tests/containers/mysql-ssh-login/Dockerfile
Normal file
23
e2e-tests/containers/mysql-ssh-login/Dockerfile
Normal file
@@ -0,0 +1,23 @@
|
||||
FROM ubuntu:22.04
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y openssh-server mysql-server && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN mkdir /var/run/sshd
|
||||
|
||||
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
|
||||
RUN echo 'root:root' | chpasswd
|
||||
|
||||
RUN service mysql start && \
|
||||
mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES;" && \
|
||||
service mysql stop
|
||||
|
||||
EXPOSE 22
|
||||
|
||||
COPY start.sh /start.sh
|
||||
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
CMD ["/start.sh"]
|
||||
7
e2e-tests/containers/mysql-ssh-login/start.sh
Normal file
7
e2e-tests/containers/mysql-ssh-login/start.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
service ssh start
|
||||
|
||||
service mysql start
|
||||
|
||||
tail -f /dev/null
|
||||
82
e2e-tests/cypress.config.js
Normal file
82
e2e-tests/cypress.config.js
Normal file
@@ -0,0 +1,82 @@
|
||||
const { defineConfig } = require('cypress');
|
||||
const killPort = require('kill-port');
|
||||
const waitOn = require('wait-on');
|
||||
const { exec } = require('child_process');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
module.exports = defineConfig({
|
||||
e2e: {
|
||||
// baseUrl: 'http://localhost:3000',
|
||||
// trashAssetsBeforeRuns: false,
|
||||
chromeWebSecurity: false,
|
||||
reporter: process.env.CI ? 'mocha-reporter-gha' : 'spec',
|
||||
|
||||
setupNodeEvents(on, config) {
|
||||
// implement node event listeners here
|
||||
|
||||
on('before:spec', async details => {
|
||||
// console.log('********************* DETAILS *********************', JSON.stringify(details));
|
||||
|
||||
if (config.isInteractive) {
|
||||
try {
|
||||
await killPort(3000);
|
||||
} catch (e) {
|
||||
console.warn('Error killing process on port 3000:', e.message);
|
||||
}
|
||||
switch (details.fileName) {
|
||||
case 'add-connection':
|
||||
serverProcess = exec('yarn start:add-connection');
|
||||
break;
|
||||
case 'portal':
|
||||
serverProcess = exec('yarn start:portal');
|
||||
break;
|
||||
case 'oauth':
|
||||
serverProcess = exec('yarn start:oauth');
|
||||
break;
|
||||
case 'browse-data':
|
||||
serverProcess = exec('yarn start:browse-data');
|
||||
break;
|
||||
case 'rest':
|
||||
serverProcess = exec('yarn start:rest');
|
||||
break;
|
||||
case 'team':
|
||||
serverProcess = exec('yarn start:team');
|
||||
break;
|
||||
case 'multi-sql':
|
||||
serverProcess = exec('yarn start:multi-sql');
|
||||
break;
|
||||
case 'cloud':
|
||||
serverProcess = exec('yarn start:cloud');
|
||||
break;
|
||||
case 'charts':
|
||||
serverProcess = exec('yarn start:charts');
|
||||
break;
|
||||
case 'redis':
|
||||
serverProcess = exec('yarn start:redis');
|
||||
break;
|
||||
}
|
||||
|
||||
await waitOn({ resources: ['http://localhost:3000'] });
|
||||
serverProcess.stdout.on('data', data => {
|
||||
console.log(data.toString());
|
||||
});
|
||||
serverProcess.stderr.on('data', data => {
|
||||
console.error(data.toString());
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
on('after:screenshot', details => {
|
||||
if (details.name) {
|
||||
fs.renameSync(details.path, path.resolve(__dirname, `screenshots/${details.name}.png`));
|
||||
}
|
||||
});
|
||||
// on('task', {
|
||||
// renameFile({ from, to }) {
|
||||
// fs.renameSync(from, to);
|
||||
// },
|
||||
// });
|
||||
},
|
||||
},
|
||||
});
|
||||
147
e2e-tests/cypress/e2e/add-connection.cy.js
Normal file
147
e2e-tests/cypress/e2e/add-connection.cy.js
Normal file
@@ -0,0 +1,147 @@
|
||||
const path = require('path');
|
||||
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.viewport(1200, 900);
|
||||
});
|
||||
|
||||
describe('Add connection', () => {
|
||||
it('successfully loads', () => {
|
||||
cy.contains('Database not selected');
|
||||
});
|
||||
|
||||
it('adds connection', () => {
|
||||
// cy.get('[data-testid=ConnectionList_buttonNewConnection]').click();
|
||||
cy.get('[data-testid=ConnectionDriverFields_connectionType]').select('MySQL');
|
||||
cy.themeshot('new-connection');
|
||||
cy.get('[data-testid=ConnectionDriverFields_user]').clear().type('root');
|
||||
cy.get('[data-testid=ConnectionDriverFields_password]').clear().type('Pwd2020Db');
|
||||
cy.get('[data-testid=ConnectionDriverFields_port]').clear().type('16004');
|
||||
cy.get('[data-testid=ConnectionDriverFields_displayName]').clear().type('test-mysql-1');
|
||||
|
||||
// test connection
|
||||
cy.testid('ConnectionTab_buttonTest').click();
|
||||
cy.contains('Connected:');
|
||||
|
||||
cy.testid('ConnectionTab_tabSshTunnel').click();
|
||||
cy.testid('ConnectionTab_tabControlContent').themeshot('connection-sshtunnel-window', { padding: 50 });
|
||||
|
||||
cy.testid('ConnectionTab_tabSsl').click();
|
||||
cy.testid('ConnectionTab_tabControlContent').themeshot('connection-ssl-window', { padding: 50 });
|
||||
|
||||
// save and connect
|
||||
cy.get('[data-testid=ConnectionTab_buttonSave]').click();
|
||||
cy.get('[data-testid=ConnectionTab_buttonConnect]').click();
|
||||
cy.contains('performance_schema');
|
||||
});
|
||||
|
||||
it('SSH connection - user + password', () => {
|
||||
cy.contains('Connections');
|
||||
|
||||
// cy.realPress('F1');
|
||||
// cy.realType('Close all');
|
||||
// cy.realPress('Enter');
|
||||
|
||||
cy.get('[data-testid=ConnectionList_buttonNewConnection]').click();
|
||||
cy.get('[data-testid=ConnectionDriverFields_connectionType]').select('MySQL');
|
||||
cy.get('[data-testid=ConnectionDriverFields_user]').clear().type('root');
|
||||
cy.get('[data-testid=ConnectionDriverFields_password]').clear().type('root');
|
||||
|
||||
cy.get('[data-testid=ConnectionDriverFields_displayName]').clear().type('test-mysql-ssh-1');
|
||||
|
||||
cy.get('[data-testid=ConnectionTab_tabSshTunnel]').click();
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_useSshTunnel]').check();
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_sshLogin]').clear().type('root');
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_sshPassword]').clear().type('root');
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_sshPort]').clear().type('16012');
|
||||
cy.get('[data-testid=ConnectionTab_buttonSave]').click();
|
||||
cy.get('[data-testid=ConnectionTab_buttonConnect]').click();
|
||||
cy.contains('performance_schema');
|
||||
});
|
||||
|
||||
it('SSH connection - keyfile', () => {
|
||||
cy.contains('Connections');
|
||||
|
||||
// cy.realPress('F1');
|
||||
// cy.realType('Close all');
|
||||
// cy.realPress('Enter');
|
||||
|
||||
cy.get('[data-testid=ConnectionList_buttonNewConnection]').click();
|
||||
cy.get('[data-testid=ConnectionDriverFields_connectionType]').select('MySQL');
|
||||
cy.get('[data-testid=ConnectionDriverFields_user]').clear().type('root');
|
||||
cy.get('[data-testid=ConnectionDriverFields_password]').clear().type('root');
|
||||
|
||||
cy.get('[data-testid=ConnectionDriverFields_displayName]').clear().type('test-mysql-ssh-2');
|
||||
|
||||
cy.get('[data-testid=ConnectionTab_tabSshTunnel]').click();
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_useSshTunnel]').check();
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_sshMode]').select('Key file');
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_sshLogin]').clear();
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_sshLogin]').type('root');
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_sshKeyfile]')
|
||||
.clear()
|
||||
.type(path.join(Cypress.config('fileServerFolder'), 'cypress', 'e2e', 'mykey'));
|
||||
cy.get('[data-testid=ConnectionSshTunnelFields_sshPort]').clear().type('16008');
|
||||
cy.get('[data-testid=ConnectionTab_buttonSave]').click();
|
||||
cy.get('[data-testid=ConnectionTab_buttonConnect]').click();
|
||||
cy.contains('performance_schema');
|
||||
});
|
||||
|
||||
it('ask password - mysql', () => {
|
||||
cy.get('[data-testid=ConnectionList_buttonNewConnection]').click();
|
||||
cy.get('[data-testid=ConnectionDriverFields_connectionType]').select('MySQL');
|
||||
cy.get('[data-testid=ConnectionDriverFields_user]').clear().type('root');
|
||||
cy.get('[data-testid=ConnectionDriverFields_password]').clear().type('Pwd2020Db');
|
||||
cy.get('[data-testid=ConnectionDriverFields_port]').clear().type('16004');
|
||||
cy.get('[data-testid=ConnectionDriverFields_displayName]').clear().type('test-mysql-2');
|
||||
cy.testid('ConnectionDriverFields_passwordMode').select('askPassword');
|
||||
|
||||
// test connection
|
||||
cy.get('[data-testid=ConnectionTab_buttonTest]').click();
|
||||
cy.testid('DatabaseLoginModal_password').clear().type('Pwd2020Db');
|
||||
cy.testid('DatabaseLoginModal_connect').click();
|
||||
|
||||
cy.contains('Connected:');
|
||||
|
||||
cy.get('[data-testid=ConnectionTab_buttonSave]').click();
|
||||
cy.get('[data-testid=ConnectionTab_buttonConnect]').click();
|
||||
|
||||
// again type DB password - not saved
|
||||
cy.testid('DatabaseLoginModal_password').clear().type('Pwd2020Db');
|
||||
cy.testid('DatabaseLoginModal_connect').click();
|
||||
|
||||
cy.contains('performance_schema');
|
||||
});
|
||||
|
||||
it('Plugin tab', () => {
|
||||
cy.testid('WidgetIconPanel_menu').click();
|
||||
cy.contains('Tools').click();
|
||||
cy.contains('Manage plugins').click();
|
||||
cy.contains('dbgate-plugin-theme-total-white').click();
|
||||
// text from plugin markdown
|
||||
cy.contains('Total white theme');
|
||||
// wait for load logos
|
||||
cy.wait(2000);
|
||||
cy.themeshot('view-plugin-tab');
|
||||
});
|
||||
|
||||
it('export connections', () => {
|
||||
cy.testid('WidgetIconPanel_menu').click();
|
||||
cy.contains('Tools').click();
|
||||
cy.contains('Export connections').click();
|
||||
cy.themeshot('export-connections');
|
||||
});
|
||||
|
||||
it('configure LLM provider', () => {
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Settings').click();
|
||||
cy.contains('AI').click();
|
||||
cy.testid('AiSupportedProvidersInfo_add_OpenRouter').click();
|
||||
cy.testid('AiProviderCard_apikey_OpenRouter').clear().type('xxx');
|
||||
cy.testid('AiProviderCard_testButton_OpenRouter').click();
|
||||
cy.testid('AiProviderCard_statusValid_OpenRouter').should('exist');
|
||||
cy.testid('AiProviderCard_editButton_OpenRouter').click();
|
||||
cy.wait(1000);
|
||||
cy.themeshot('llm-providers-settings');
|
||||
});
|
||||
});
|
||||
515
e2e-tests/cypress/e2e/browse-data.cy.js
Normal file
515
e2e-tests/cypress/e2e/browse-data.cy.js
Normal file
@@ -0,0 +1,515 @@
|
||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
||||
// if the error message matches the one about WorkerGlobalScope importScripts
|
||||
if (err.message.includes("Failed to execute 'importScripts' on 'WorkerGlobalScope'")) {
|
||||
// return false to let Cypress know we intentionally want to ignore this error
|
||||
return false;
|
||||
}
|
||||
// otherwise let Cypress throw the error
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.viewport(1250, 900);
|
||||
});
|
||||
|
||||
describe('Data browser data', () => {
|
||||
it('Export window', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Album').rightclick();
|
||||
cy.contains('Export').click();
|
||||
cy.contains('Export advanced').click();
|
||||
cy.wait(1000);
|
||||
// cy.testid('SourceTargetConfig_buttonCurrentArchive_target').click();
|
||||
// cy.testid('FormTablesSelect_buttonAll_tables').click();
|
||||
// cy.testid('SourceTargetConfig_tablesSelect_source').click();
|
||||
// cy.find('.listContainer').contains('Album').click();
|
||||
// cy.find('.listContainer').contains('Track').click();
|
||||
// cy.wait(4000);
|
||||
// cy.contains('All tables').click();
|
||||
cy.contains('Run').click();
|
||||
cy.contains('Finished job script');
|
||||
cy.contains('Album.csv');
|
||||
cy.testid('WidgetIconPanel_database').click();
|
||||
cy.themeshot('configure-export-csv');
|
||||
});
|
||||
|
||||
it('Data archive editor - macros', () => {
|
||||
cy.testid('WidgetIconPanel_archive').click();
|
||||
cy.contains('Album').click();
|
||||
cy.testid('DataGrid_itemFilters').click();
|
||||
cy.contains('Let There Be Rock').click();
|
||||
cy.contains('Out Of Exile').click({ shiftKey: true });
|
||||
cy.contains('Change text case').click();
|
||||
cy.contains('AUDIOSLAVE');
|
||||
cy.themeshot('data-archive-macros');
|
||||
});
|
||||
|
||||
it('Load table data', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Album').click();
|
||||
cy.contains('Let There Be Rock').click();
|
||||
cy.contains('Rows: 347');
|
||||
cy.realPress(['Control', 'ArrowRight']);
|
||||
cy.contains('Aerosmith');
|
||||
});
|
||||
|
||||
it('Filter model', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('SqlObjectList_search').clear().type('album');
|
||||
cy.contains('Tables (1/11)');
|
||||
cy.contains('347 rows, 65.5 KB, InnoDB');
|
||||
cy.testid('SqlObjectList_searchMenuDropDown').click();
|
||||
cy.contains('Column name').click();
|
||||
cy.contains('Tables (2/11)');
|
||||
cy.contains('AlbumId');
|
||||
cy.contains('Column name').click();
|
||||
cy.contains('AlbumId').should('not.exist');
|
||||
cy.contains('Tables (1/11)');
|
||||
});
|
||||
|
||||
it('Show raw data', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Album').rightclick();
|
||||
cy.contains('Open raw data').click();
|
||||
cy.contains('Let There Be Rock').click();
|
||||
cy.contains('Rows: 347').should('not.exist');
|
||||
cy.realPress(['Control', 'ArrowRight']);
|
||||
cy.contains('Aerosmith').should('not.exist');
|
||||
});
|
||||
|
||||
it('Data filter', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Album').click();
|
||||
|
||||
// hide what is not needed
|
||||
cy.testid('WidgetIconPanel_database').click();
|
||||
cy.testid('DataGrid_itemReferences').click();
|
||||
|
||||
cy.testid('DataFilterControl_input_Title').type('Rock{enter}');
|
||||
cy.contains('Rows: 7');
|
||||
cy.testid('DataFilterControl_input_AlbumId').type('>10xxx{enter}');
|
||||
cy.contains('Rows: 7');
|
||||
cy.testid('DataFilterControl_filtermenu_ArtistId').click();
|
||||
cy.themeshot('data-browser-filter');
|
||||
cy.testid('DataGridCore_button_clearFilters').click();
|
||||
cy.contains('Rows: 347');
|
||||
});
|
||||
|
||||
it('Data grid screenshots', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
|
||||
cy.contains('MyChinook').click();
|
||||
|
||||
cy.contains('Album').click();
|
||||
cy.testid('TabsPanel_pinTabButton').click();
|
||||
cy.contains('Genre').click();
|
||||
cy.testid('TabsPanel_pinTabButton').click();
|
||||
cy.contains('Playlist').click();
|
||||
cy.testid('TabsPanel_pinTabButton').click();
|
||||
|
||||
cy.contains('Postgres-connection').click();
|
||||
cy.contains('PgChinook').click();
|
||||
cy.contains('customer').click();
|
||||
cy.contains('Leonie').click();
|
||||
cy.themeshot('common-data-browser');
|
||||
|
||||
cy.contains('invoice').click();
|
||||
cy.contains('invoice_line (invoice_id)').click();
|
||||
cy.themeshot('data-browser-master-detail');
|
||||
|
||||
cy.contains('9, Place Louis Barthou').click();
|
||||
cy.contains('Switch to form').click();
|
||||
cy.contains('Switch to table'); // test that we are in form view
|
||||
cy.themeshot('data-browser-form-view');
|
||||
});
|
||||
|
||||
it('Column search', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Customer').click();
|
||||
cy.testid('ColumnManager_searchColumns').clear().type('name,id{enter}');
|
||||
cy.contains('Company').should('not.exist');
|
||||
cy.themeshot('data-browser-column-search');
|
||||
});
|
||||
|
||||
it('SQL Gen', () => {
|
||||
cy.contains('Postgres-connection').click();
|
||||
cy.contains('PgChinook').rightclick();
|
||||
cy.contains('SQL Generator').click();
|
||||
cy.contains('Check all').click();
|
||||
cy.themeshot('sql-generator');
|
||||
});
|
||||
|
||||
it('Macros in DB', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Customer').click();
|
||||
cy.contains('Leonie').click();
|
||||
cy.contains('Ramos').click({ shiftKey: true });
|
||||
cy.testid('DataGrid_itemColumns').click();
|
||||
cy.testid('DataGrid_itemFilters').click();
|
||||
cy.testid('DataGrid_itemReferences').click();
|
||||
cy.testid('DataGrid_itemMacros').click();
|
||||
cy.contains('Change text case').click();
|
||||
cy.contains('NIELSEN');
|
||||
cy.themeshot('data-browser-macros');
|
||||
});
|
||||
|
||||
it('Perspectives', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Artist').rightclick();
|
||||
cy.contains('Design perspective query').click();
|
||||
|
||||
cy.testid('PerspectiveNodeRow_check_Artist_Album').click();
|
||||
cy.testid('PerspectiveNodeRow_expand_Artist_Album').click();
|
||||
cy.testid('PerspectiveNodeRow_check_Artist_Album_Track').click();
|
||||
|
||||
// check track is loaded
|
||||
cy.contains('Put The Finger On You');
|
||||
|
||||
cy.themeshot('perspective-designer');
|
||||
});
|
||||
|
||||
it('Query editor - code completion', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Customer').rightclick();
|
||||
cy.contains('SQL template').click();
|
||||
cy.contains('CREATE TABLE').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').realPress('PageDown');
|
||||
cy.get('body').realType('select * from Album where Album.');
|
||||
// code completion
|
||||
cy.contains('ArtistId');
|
||||
cy.themeshot('query-editor-code-completion');
|
||||
});
|
||||
|
||||
it('Query editor - join wizard', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('TabsPanel_buttonNewObject').click();
|
||||
cy.testid('NewObjectModal_query').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').realType('select * from Invoice');
|
||||
cy.get('body').realPress('{enter}');
|
||||
cy.get('body').realPress(['Control', 'j']);
|
||||
// JOIN wizard
|
||||
cy.contains('INNER JOIN Customer ON Invoice.CustomerId = Customer.CustomerId');
|
||||
cy.themeshot('query-editor-join-wizard');
|
||||
});
|
||||
|
||||
it('Mongo query JSON data view', () => {
|
||||
cy.contains('Mongo-connection').click();
|
||||
cy.contains('MgChinook').click();
|
||||
cy.contains('Customer').click();
|
||||
cy.testid('DataFilterControl_input_CustomerId').type('<=10{enter}');
|
||||
// test filter
|
||||
cy.contains('Rows: 10');
|
||||
cy.contains('Helena').rightclick();
|
||||
cy.contains('Open query').click();
|
||||
cy.wait(1000);
|
||||
cy.contains('Execute').click();
|
||||
cy.testid('TabContent_1').contains('Leonie').rightclick();
|
||||
cy.contains('Show cell data').click();
|
||||
// test JSON view
|
||||
cy.contains('Country: "Germany"');
|
||||
cy.themeshot('mongo-query-json-view');
|
||||
});
|
||||
|
||||
it('SQL preview', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Customer').rightclick();
|
||||
cy.contains('Show SQL').click();
|
||||
// index should be part of create script
|
||||
cy.contains('CREATE INDEX `IFK_CustomerSupportRepId`');
|
||||
cy.themeshot('sql-preview-create-index');
|
||||
});
|
||||
|
||||
it('Query designer', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('WidgetIconPanel_file').click();
|
||||
cy.contains('customer').click();
|
||||
// cy.contains('left join').rightclick();
|
||||
cy.themeshot('query-designer');
|
||||
});
|
||||
|
||||
it('Database diagram', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('WidgetIconPanel_file').click();
|
||||
cy.contains('chinook-diagram').click();
|
||||
cy.testid('WidgetIconPanel_file').click();
|
||||
// check diagram is shown
|
||||
cy.contains('MediaTypeId');
|
||||
cy.themeshot('database-diagram');
|
||||
});
|
||||
|
||||
// it('Charts', () => {
|
||||
// cy.testid('WidgetIconPanel_file').click();
|
||||
// cy.contains('pie-chart').click();
|
||||
// cy.contains('line-chart').click();
|
||||
// cy.testid('TabsPanel_buttonSplit').click();
|
||||
// cy.testid('WidgetIconPanel_file').click();
|
||||
// cy.themeshot('view-split-charts');
|
||||
// });
|
||||
|
||||
it('Keyboard configuration', () => {
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Keyboard shortcuts').click();
|
||||
cy.contains('dataForm.refresh').click();
|
||||
cy.testid('CommandModal_keyboardButton').click();
|
||||
cy.themeshot('keyboard-configuration');
|
||||
});
|
||||
|
||||
it('Command palette', () => {
|
||||
cy.contains('Connections');
|
||||
cy.testid('WidgetIconPanel_menu').click();
|
||||
cy.contains('Tools').click();
|
||||
cy.contains('Command palette').click();
|
||||
// cy.realPress('F1');
|
||||
cy.realPress('PageDown');
|
||||
cy.realPress('PageDown');
|
||||
cy.testid('CommandPalette_main').themeshot('command-palette', { padding: 50 });
|
||||
});
|
||||
|
||||
it('About window', () => {
|
||||
cy.contains('Connections');
|
||||
cy.testid('WidgetIconPanel_menu').click();
|
||||
cy.contains('Help').click();
|
||||
cy.contains('About').click();
|
||||
cy.testid('ModalBase_window').themeshot('about-window', { padding: 50 });
|
||||
});
|
||||
|
||||
it('Show map', () => {
|
||||
cy.contains('Postgres-connection').click();
|
||||
cy.contains('PgGeoData').click();
|
||||
cy.contains('cities').click();
|
||||
// clicking column header doesn't work, TODO FIX in app!!!
|
||||
// cy.contains('location').click();
|
||||
cy.contains('14.2').click();
|
||||
cy.contains('13.9').click({ shiftKey: true });
|
||||
cy.testid('WidgetIconPanel_database').click();
|
||||
cy.testid('TableDataTab_toggleCellDataView').click();
|
||||
cy.wait(2000);
|
||||
cy.themeshot('cell-map-view');
|
||||
});
|
||||
|
||||
it('Search in connections', () => {
|
||||
cy.testid('ConnectionList_search').type('my');
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
|
||||
cy.testid('SqlObjectList_search').type('album');
|
||||
cy.contains('Album').click();
|
||||
cy.testid('SqlObjectList_searchMenuDropDown').click();
|
||||
cy.contains('Column name').click();
|
||||
cy.themeshot('search-in-connections');
|
||||
});
|
||||
|
||||
it('Edit mongo data JSON', () => {
|
||||
// TODO FIX: Missing button+ctx menu Revert all changes, missing button+ctx menu add document
|
||||
// TODO: Dark theme - not visible changed and deleted document
|
||||
cy.contains('Mongo-connection').click();
|
||||
cy.contains('MgChinook').click();
|
||||
cy.contains('Customer').rightclick();
|
||||
cy.contains('Open JSON').click();
|
||||
cy.contains('Leonie').rightclick();
|
||||
cy.contains('Edit document').click();
|
||||
// cy.focused()
|
||||
// .type('{downArrow}'.repeat(11))
|
||||
// .type('{rightarrow}'.repeat(14))
|
||||
// .type('{del}'.repeat(7)) // 4*delete
|
||||
// .type('Italy'); // type "Italy"
|
||||
|
||||
Array.from({ length: 11 }).forEach(() => cy.realPress('ArrowDown'));
|
||||
Array.from({ length: 14 }).forEach(() => cy.realPress('ArrowRight'));
|
||||
Array.from({ length: 7 }).forEach(() => cy.realPress('Delete'));
|
||||
cy.realType('Italy');
|
||||
cy.testid('EditJsonModal_saveButton').click();
|
||||
|
||||
cy.contains('Helena').rightclick();
|
||||
cy.contains('Delete document').click();
|
||||
cy.contains('Save').click();
|
||||
cy.themeshot('save-changes-mongodb');
|
||||
});
|
||||
|
||||
it('Mongo JSON cell view', () => {
|
||||
// TODO FIX: Auto expand cell view
|
||||
cy.contains('Mongo-connection').click();
|
||||
cy.contains('MgRivers').click();
|
||||
cy.contains('RiverInfo').click();
|
||||
cy.testid('ColumnManagerRow_expand_countries').click();
|
||||
cy.testid('ColumnManagerRow_checkbox_countries.0').click();
|
||||
cy.testid('ColumnManagerRow_checkbox_countries.1').click();
|
||||
cy.testid('ColumnManagerRow_checkbox__id').click();
|
||||
cy.testid('DataFilterControl_input_countries.1').type('EXISTS{enter}');
|
||||
cy.contains('Austria').click();
|
||||
cy.testid('CollectionDataTab_toggleCellDataView').click();
|
||||
cy.themeshot('mongodb-json-cell-view');
|
||||
});
|
||||
|
||||
it('Table structure editor', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Customer').rightclick();
|
||||
cy.contains('Open structure').click();
|
||||
cy.contains('varchar(40)');
|
||||
cy.themeshot('table-structure-editor');
|
||||
cy.contains('EmployeeId').click();
|
||||
cy.contains('Ref column - Employee');
|
||||
cy.themeshot('foreign-key-editor');
|
||||
});
|
||||
|
||||
it('Compare database', () => {
|
||||
// TODO FIX: SQL diff is not dark in dark mode
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('MyChangedChinook').rightclick();
|
||||
cy.contains('Compare with').click();
|
||||
cy.testid('CompareModelTab_gridObjects_Customer_Customer').click();
|
||||
cy.testid('WidgetIconPanel_database').click();
|
||||
cy.testid('CompareModelTab_tabDdl').click();
|
||||
cy.themeshot('compare-database-models');
|
||||
cy.contains('Settings').click();
|
||||
cy.testid('CompareModelTab_tabOperations').click();
|
||||
cy.themeshot('compare-database-settings');
|
||||
});
|
||||
|
||||
it('Modify data', () => {
|
||||
// TODO FIX: delete references cascade not working
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Employee').click();
|
||||
cy.contains('Rows: 8');
|
||||
|
||||
cy.contains('Laura').click();
|
||||
cy.contains('Laura').click();
|
||||
cy.get('body').realType('Jane');
|
||||
// cy.contains('Peacock').click();
|
||||
// cy.testid('TableDataTab_deleteSelectedRows').click();
|
||||
cy.contains('King').click();
|
||||
cy.testid('TableDataTab_deleteSelectedRows').click();
|
||||
cy.testid('TableDataTab_insertNewRow').click();
|
||||
cy.get('body').realType('Novak');
|
||||
cy.get('body').realPress('{enter}');
|
||||
cy.realPress(['ArrowRight']);
|
||||
cy.get('body').realType('Karel');
|
||||
cy.testid('TableDataTab_save').click();
|
||||
cy.contains('INSERT INTO `Employee`');
|
||||
cy.contains("SET `FirstName`='Jane'");
|
||||
cy.contains('DELETE FROM `Employee`');
|
||||
cy.themeshot('data-browser-save-changes');
|
||||
|
||||
// cy.testid('ConfirmSqlModal_okButton').click();
|
||||
// cy.contains('Cannot delete or update a parent row')
|
||||
// cy.testid('ConfirmSqlModal_okButton').click();
|
||||
|
||||
// cy.testid('TableDataTab_save').click();
|
||||
// cy.testid('ConfirmSqlModal_deleteReferencesCascade').click();
|
||||
// cy.testid('ConfirmSqlModal_okButton').click();
|
||||
|
||||
cy.testid('ConfirmSqlModal_okButton').click();
|
||||
|
||||
cy.contains('Novak');
|
||||
cy.contains('Rows: 8');
|
||||
});
|
||||
|
||||
it('Export menu', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Album').click();
|
||||
cy.testid('DataFilterControl_input_ArtistId').type('22{enter}');
|
||||
// cy.contains('Presence').rightclick();
|
||||
// cy.contains('Coda').rightclick();
|
||||
// cy.testid('DropDownMenu-container-0').contains('Export').click();
|
||||
cy.contains('Export').click();
|
||||
// cy.wait(1000);
|
||||
cy.themeshot('data-browser-export-menu');
|
||||
});
|
||||
|
||||
it('MySQL native backup', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').rightclick();
|
||||
cy.contains('Create database backup').click();
|
||||
cy.contains('Customer');
|
||||
cy.themeshot('mysql-backup-configuration');
|
||||
});
|
||||
|
||||
it('View table YAML model', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').rightclick();
|
||||
cy.contains('Export DB model').click();
|
||||
cy.testid('ExportDbModelModal_archiveFolder').select('(Create new)');
|
||||
cy.testid('InputTextModal_value').clear().type('test-model');
|
||||
cy.testid('InputTextModal_ok').click();
|
||||
cy.testid('ModalBase_window').themeshot('export-database-model-window', { padding: 50 });
|
||||
cy.testid('ExportDbModelModal_exportButton').click();
|
||||
cy.contains('Album').click();
|
||||
cy.contains('autoIncrement');
|
||||
cy.themeshot('database-model-table-yaml');
|
||||
});
|
||||
|
||||
it('Data replicator', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('WidgetIconPanel_archive').click();
|
||||
cy.contains('chinook-archive').rightclick();
|
||||
cy.contains('Data deployer').click();
|
||||
cy.contains('Dry run').click();
|
||||
cy.testid('TableControl_row_2_checkbox').click();
|
||||
cy.testid('TableControl_row_2').click();
|
||||
cy.testid('DataDeploySettings_find_checkbox').click();
|
||||
cy.testid('DataDeploySettings_create_checkbox').click();
|
||||
cy.testid('WidgetIconPanel_archive').click();
|
||||
cy.themeshot('data-deployer');
|
||||
cy.testid('DataDeployTab_importIntoDb').click();
|
||||
cy.testid('ConfirmDataDeployModal_okButton').click();
|
||||
cy.contains('Replicated Customer, inserted 59 rows');
|
||||
cy.contains('Finished job script');
|
||||
cy.testid('DataDeployTab_importIntoDb').click();
|
||||
cy.themeshot('data-replicator');
|
||||
});
|
||||
|
||||
it('Form cell view', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Invoice').click();
|
||||
cy.contains('Rows: 412');
|
||||
cy.get('[data-row="0"][data-col="header"]').click();
|
||||
cy.get('[data-row="1"][data-col="header"]').click();
|
||||
cy.get('[data-row="0"][data-col="header"]').click();
|
||||
cy.contains('Autodetect - Form');
|
||||
cy.themeshot('form-cell-view');
|
||||
});
|
||||
|
||||
it('Group by', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Album').click();
|
||||
cy.testid('WidgetIconPanel_database').click();
|
||||
cy.testid('ColumnHeaderControl_dropdown_ArtistId').click();
|
||||
cy.contains('Group by').click();
|
||||
cy.testid('ColumnHeaderControl_dropdown_Title').first().click();
|
||||
cy.themeshot('data-browser-group-by');
|
||||
});
|
||||
|
||||
it('Filter by expanded column', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Album').click();
|
||||
cy.testid('WidgetIconPanel_database').click();
|
||||
cy.testid('ColumnManagerRow_expand_ArtistId').click();
|
||||
cy.testid('ColumnManagerRow_checkbox_ArtistId.Name').click();
|
||||
cy.testid('ColumnManagerRow_checkbox_ArtistId').click();
|
||||
cy.testid('DataFilterControl_input_ArtistId.Name').type('mich{enter}');
|
||||
cy.themeshot('data-browser-filter-by-expanded');
|
||||
});
|
||||
});
|
||||
285
e2e-tests/cypress/e2e/charts.cy.js
Normal file
285
e2e-tests/cypress/e2e/charts.cy.js
Normal file
@@ -0,0 +1,285 @@
|
||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
||||
// if the error message matches the one about WorkerGlobalScope importScripts
|
||||
if (err.message.includes("Failed to execute 'importScripts' on 'WorkerGlobalScope'")) {
|
||||
// return false to let Cypress know we intentionally want to ignore this error
|
||||
return false;
|
||||
}
|
||||
// otherwise let Cypress throw the error
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.viewport(1250, 900);
|
||||
});
|
||||
|
||||
describe('Charts', () => {
|
||||
it('Auto detect chart', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('charts_sample').click();
|
||||
cy.testid('WidgetIconPanel_file').click();
|
||||
cy.contains('chart1').click();
|
||||
cy.contains('department_name');
|
||||
// cy.testid('QueryTab_executeButton').click();
|
||||
// cy.testid('QueryTab_openChartButton').click();
|
||||
cy.testid('chart-canvas').should($c => expect($c[0].toDataURL()).to.match(/^data:image\/png;base64/));
|
||||
cy.themeshot('choose-detected-chart');
|
||||
});
|
||||
|
||||
it('Two line charts', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('TabsPanel_buttonNewObject').click();
|
||||
cy.testid('NewObjectModal_query').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').realType('SELECT InvoiceDate, Total from Invoice');
|
||||
cy.contains('Execute').click();
|
||||
cy.contains('Open chart').click();
|
||||
cy.testid('chart-canvas').should($c => expect($c[0].toDataURL()).to.match(/^data:image\/png;base64/));
|
||||
cy.themeshot('two-line-charts');
|
||||
});
|
||||
|
||||
it('Invoice naive autodetection', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('TabsPanel_buttonNewObject').click();
|
||||
cy.testid('NewObjectModal_query').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').realType('SELECT * from Invoice');
|
||||
cy.contains('Execute').click();
|
||||
cy.contains('Open chart').click();
|
||||
cy.testid('chart-canvas').should($c => expect($c[0].toDataURL()).to.match(/^data:image\/png;base64/));
|
||||
cy.themeshot('chart-naive-autodetection');
|
||||
});
|
||||
|
||||
it('Invoice by country - grouped chart', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('TabsPanel_buttonNewObject').click();
|
||||
cy.testid('NewObjectModal_query').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').realType(
|
||||
"SELECT InvoiceDate, Total, BillingCountry from Invoice where BillingCountry in ('USA', 'Canada', 'Brazil', 'France', 'Germany')"
|
||||
);
|
||||
cy.contains('Execute').click();
|
||||
cy.contains('Open chart').click();
|
||||
cy.testid('ChartSelector_chart_1').click();
|
||||
cy.testid('JslChart_customizeButton').click();
|
||||
|
||||
cy.testid('chart-canvas').should($c => expect($c[0].toDataURL()).to.match(/^data:image\/png;base64/));
|
||||
cy.themeshot('chart-grouped-autodetected');
|
||||
|
||||
cy.testid('ChartDefinitionEditor_chartTypeSelect').select('Bar');
|
||||
cy.testid('ChartDefinitionEditor_xAxisTransformSelect').select('Date (Year)');
|
||||
|
||||
cy.testid('chart-canvas').should($c => expect($c[0].toDataURL()).to.match(/^data:image\/png;base64/));
|
||||
cy.themeshot('chart-grouped-bars');
|
||||
});
|
||||
|
||||
it('Public Knowledge base - show chart', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('WidgetIconPanel_cloud-public').click();
|
||||
cy.testid('public-cloud-file-tag-mysql/folder-MySQL/tag-premium/top-tables-row-count.sql').click();
|
||||
cy.testid('chart-canvas').should($c => expect($c[0].toDataURL()).to.match(/^data:image\/png;base64/));
|
||||
cy.themeshot('public-knowledge-base-tables-sizes');
|
||||
});
|
||||
|
||||
it('Auto detect chart', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Invoice').rightclick();
|
||||
cy.contains('SQL template').click();
|
||||
cy.contains('SELECT').click();
|
||||
cy.testid('QueryTab_detectChartButton').click();
|
||||
cy.testid('QueryTab_executeButton').click();
|
||||
cy.contains('Chart 1').click();
|
||||
cy.testid('ChartSelector_chart_0').click();
|
||||
cy.testid('JslChart_customizeButton').click();
|
||||
cy.testid('ChartDefinitionEditor_chartTypeSelect').select('Bar');
|
||||
cy.testid('ChartDefinitionEditor_chartTypeSelect').select('Line');
|
||||
cy.testid('chart-canvas').should($c => expect($c[0].toDataURL()).to.match(/^data:image\/png;base64/));
|
||||
cy.themeshot('query-result-chart');
|
||||
});
|
||||
|
||||
it('New object window', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Invoice').click();
|
||||
cy.testid('WidgetIconPanel_addButton').click();
|
||||
cy.contains('Compare database');
|
||||
cy.themeshot('new-object-window');
|
||||
});
|
||||
|
||||
it.skip('Database chat - charts', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('TabsPanel_buttonNewObject').click();
|
||||
cy.testid('NewObjectModal_databaseChat').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').realType('show me chart of most popular genres');
|
||||
cy.get('body').realPress('{enter}');
|
||||
cy.testid('DatabaseChatTab_executeAllQueries', { timeout: 30000 }).click();
|
||||
cy.testid('chart-canvas', { timeout: 30000 }).should($c =>
|
||||
expect($c[0].toDataURL()).to.match(/^data:image\/png;base64/)
|
||||
);
|
||||
cy.themeshot('database-chat-chart');
|
||||
});
|
||||
|
||||
it.skip('Database chat', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('TabsPanel_buttonNewObject').click();
|
||||
cy.testid('NewObjectModal_databaseChat').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').realType('find most popular artist');
|
||||
cy.get('body').realPress('{enter}');
|
||||
cy.testid('DatabaseChatTab_executeAllQueries', { timeout: 30000 }).click();
|
||||
cy.wait(30000);
|
||||
// cy.contains('Iron Maiden');
|
||||
cy.themeshot('database-chat');
|
||||
|
||||
// cy.testid('DatabaseChatTab_promptInput').click();
|
||||
// cy.get('body').realType('I need top 10 songs with the biggest income');
|
||||
// cy.get('body').realPress('{enter}');
|
||||
// cy.contains('Hot Girl', { timeout: 20000 });
|
||||
// cy.wait(1000);
|
||||
// cy.themeshot('database-chat');
|
||||
});
|
||||
|
||||
it.skip('Explain query error', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('TabsPanel_buttonNewObject').click();
|
||||
cy.testid('NewObjectModal_query').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').realType('select * from Invoice2');
|
||||
cy.contains('Execute').click();
|
||||
cy.testid('MessageViewRow-explainErrorButton-1').click();
|
||||
cy.testid('ChatCodeRenderer_useSqlButton', { timeout: 30000 });
|
||||
cy.themeshot('explain-query-error');
|
||||
});
|
||||
|
||||
it('Switch language', () => {
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
|
||||
cy.testid('SettingsModal_languageSelect').select('Deutsch');
|
||||
cy.testid('ConfirmModal_okButton').click();
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Sprache');
|
||||
cy.themeshot('switch-language-de');
|
||||
|
||||
cy.testid('SettingsModal_languageSelect').select('Français');
|
||||
cy.testid('ConfirmModal_okButton').click();
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Langue');
|
||||
cy.themeshot('switch-language-fr');
|
||||
|
||||
cy.testid('SettingsModal_languageSelect').select('Español');
|
||||
cy.testid('ConfirmModal_okButton').click();
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Idioma');
|
||||
cy.themeshot('switch-language-es');
|
||||
|
||||
cy.testid('SettingsModal_languageSelect').select('Čeština');
|
||||
cy.testid('ConfirmModal_okButton').click();
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Jazyk');
|
||||
cy.themeshot('switch-language-cs');
|
||||
|
||||
cy.testid('SettingsModal_languageSelect').select('中文');
|
||||
cy.testid('ConfirmModal_okButton').click();
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('语言');
|
||||
cy.themeshot('switch-language-zh');
|
||||
|
||||
cy.testid('SettingsModal_languageSelect').select('English');
|
||||
cy.testid('ConfirmModal_okButton').click();
|
||||
cy.testid('WidgetIconPanel_settings');
|
||||
});
|
||||
|
||||
it('Settings', () => {
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.themeshot('app-settings-general');
|
||||
|
||||
cy.contains('Behaviour').click();
|
||||
cy.themeshot('app-settings-behaviour');
|
||||
cy.get('[data-testid=BehaviourSettings_useTabPreviewMode]').uncheck();
|
||||
|
||||
// SQL Editor
|
||||
cy.contains('SQL Editor').click();
|
||||
cy.get('[data-testid=SQLEditorSettings_sqlCommandsCase]').select('lowerCase');
|
||||
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('charts_sample').click();
|
||||
cy.contains('employees').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Customer').rightclick();
|
||||
cy.contains('SQL template').click();
|
||||
cy.contains('CREATE TABLE').click();
|
||||
cy.contains('create table');
|
||||
|
||||
// Default Actions
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Default Actions').click();
|
||||
cy.get('[data-testid=DefaultActionsSettings_useLastUsedAction]').uncheck();
|
||||
|
||||
// Themes
|
||||
cy.contains('Themes').click();
|
||||
cy.themeshot('app-settings-themes');
|
||||
cy.testid('ThemeSkeleton-Dark-built-in').click();
|
||||
cy.testid('ThemeSkeleton-Light-built-in').click();
|
||||
|
||||
// General
|
||||
cy.contains(/^General$/).click();
|
||||
cy.contains('charts_sample');
|
||||
cy.get('[data-testid=GeneralSettings_lockedDatabaseMode]').check();
|
||||
cy.contains('Connections').click();
|
||||
cy.contains('charts_sample').should('not.exist');
|
||||
|
||||
// Datagrid
|
||||
cy.contains('Data grid').click();
|
||||
cy.get('[data-testid=DataGridSettings_showHintColumns]').uncheck();
|
||||
cy.wait(500);
|
||||
cy.contains('Album').click();
|
||||
cy.contains('AC/DC').should('not.exist');
|
||||
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Keyboard shortcuts').click();
|
||||
cy.themeshot('app-settings-keyboard-shortcuts');
|
||||
cy.contains('Chart').click();
|
||||
cy.testid('CommandModal_keyboardButton').click();
|
||||
cy.realPress(['Control', 'g']);
|
||||
cy.realPress('Enter');
|
||||
cy.contains('OK').click();
|
||||
cy.contains('Ctrl+G');
|
||||
|
||||
cy.contains('AI').click();
|
||||
cy.themeshot('app-settings-ai');
|
||||
cy.get('[data-testid=AISettings_addProviderButton]').click();
|
||||
cy.contains('Provider 1');
|
||||
cy.get('[data-testid=AiProviderCard_removeButton]').click();
|
||||
cy.contains('Are you sure you want to remove Provider 1 provider?');
|
||||
cy.contains('OK').click();
|
||||
cy.contains('Provider 1').should('not.exist');
|
||||
});
|
||||
|
||||
it('Custom theme', () => {
|
||||
cy.testid('WidgetIconPanel_settings').click();
|
||||
cy.contains('Themes').click();
|
||||
cy.testid('ThemeSettings-themeList').contains('Green-Sample').click();
|
||||
cy.testid('WidgetIconPanel_file').click();
|
||||
cy.themeshot('green-theme', { keepTheme: true });
|
||||
|
||||
cy.testid('ThemeSettings-themeList').contains('Solarized-light').click();
|
||||
cy.testid('WidgetIconPanel_database').click();
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MyChinook').click();
|
||||
cy.contains('Customer').click();
|
||||
cy.contains('Leonie');
|
||||
cy.testid('WidgetIconPanel_file').click();
|
||||
|
||||
cy.themeshot('solarized-theme', { keepTheme: true });
|
||||
});
|
||||
});
|
||||
56
e2e-tests/cypress/e2e/cloud.cy.js
Normal file
56
e2e-tests/cypress/e2e/cloud.cy.js
Normal file
@@ -0,0 +1,56 @@
|
||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
||||
// if the error message matches the one about WorkerGlobalScope importScripts
|
||||
if (err.message.includes("Failed to execute 'importScripts' on 'WorkerGlobalScope'")) {
|
||||
// return false to let Cypress know we intentionally want to ignore this error
|
||||
return false;
|
||||
}
|
||||
// otherwise let Cypress throw the error
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.viewport(1250, 900);
|
||||
});
|
||||
|
||||
describe('Cloud tests', () => {
|
||||
it('Private cloud', () => {
|
||||
cy.testid('WidgetIconPanel_cloudAccount');
|
||||
cy.window().then(win => {
|
||||
win.__loginToCloudTest('dbgate.test@gmail.com');
|
||||
});
|
||||
cy.contains('dbgate.test@gmail.com');
|
||||
|
||||
// cy.testid('WidgetIconPanel_cloudAccount').click();
|
||||
|
||||
// cy.origin('https://identity.dbgate.io', () => {
|
||||
// cy.contains('Sign in with GitHub').click();
|
||||
// });
|
||||
|
||||
// cy.origin('https://github.com', () => {
|
||||
// cy.get('#login_field').type('dbgatetest');
|
||||
// cy.get('#password').type('Pwd2020Db');
|
||||
// cy.get('input[type="submit"]').click();
|
||||
// });
|
||||
|
||||
// cy.wait(3000);
|
||||
|
||||
// cy.location('origin').then(origin => {
|
||||
// if (origin === 'https://github.com') {
|
||||
// // Still on github.com → an authorization step is waiting
|
||||
// cy.origin('https://github.com', () => {
|
||||
// // Try once, don't wait the full default timeout
|
||||
// cy.get('button[data-octo-click="oauth_application_authorization"]', { timeout: 500, log: false }).click(); // if the button exists it will be clicked
|
||||
// // if not, the short timeout elapses and we drop out
|
||||
// });
|
||||
// } else {
|
||||
// // Already back on localhost – nothing to authorize
|
||||
// cy.log('OAuth redirect skipped the Authorize screen');
|
||||
// }
|
||||
// });
|
||||
|
||||
cy.contains('Testing Connections').rightclick();
|
||||
cy.contains('Administrate access').click();
|
||||
cy.contains('User email');
|
||||
cy.themeshot('administer-shared-folder');
|
||||
});
|
||||
});
|
||||
264
e2e-tests/cypress/e2e/multi-sql.cy.js
Normal file
264
e2e-tests/cypress/e2e/multi-sql.cy.js
Normal file
@@ -0,0 +1,264 @@
|
||||
const localconfig = require('../../.localconfig');
|
||||
const { formatQueryWithoutParams } = require('dbgate-tools');
|
||||
|
||||
global.DBGATE_PACKAGES = {
|
||||
'dbgate-tools': require('dbgate-tools'),
|
||||
'dbgate-sqltree': require('dbgate-sqltree'),
|
||||
'dbgate-datalib': require('dbgate-datalib'),
|
||||
};
|
||||
|
||||
function requireEngineDriver(engine) {
|
||||
const [shortName, packageName] = engine.split('@');
|
||||
const plugin = require(`../../../plugins/${packageName}/src/frontend/index`);
|
||||
if (plugin.drivers) {
|
||||
return plugin.drivers.find(x => x.engine == engine);
|
||||
}
|
||||
throw new Error(`Could not find engine driver ${engine}`);
|
||||
}
|
||||
|
||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
||||
// if the error message matches the one about WorkerGlobalScope importScripts
|
||||
if (err.message.includes("Failed to execute 'importScripts' on 'WorkerGlobalScope'")) {
|
||||
// return false to let Cypress know we intentionally want to ignore this error
|
||||
return false;
|
||||
}
|
||||
// otherwise let Cypress throw the error
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.viewport(1250, 900);
|
||||
});
|
||||
|
||||
function multiTest(testProps, testDefinition) {
|
||||
if (localconfig.mysql) {
|
||||
it('MySQL', () => testDefinition('MySql-connection', 'my_guitar_shop', 'mysql@dbgate-plugin-mysql'));
|
||||
}
|
||||
if (localconfig.postgres) {
|
||||
it('Postgres', () => testDefinition('Postgres-connection', 'my_guitar_shop', 'postgres@dbgate-plugin-postgres'));
|
||||
}
|
||||
if (localconfig.mssql) {
|
||||
it('Mssql', () => testDefinition('Mssql-connection', 'my_guitar_shop', 'mssql@dbgate-plugin-mssql'));
|
||||
}
|
||||
if (localconfig.oracle) {
|
||||
it('Oracle', () =>
|
||||
testDefinition('Oracle-connection', 'C##MY_GUITAR_SHOP', 'oracle@dbgate-plugin-oracle', {
|
||||
implicitTransactions: true,
|
||||
}));
|
||||
}
|
||||
if (localconfig.sqlite) {
|
||||
it('Sqlite', () => testDefinition('Sqlite-connection', null, 'sqlite@dbgate-plugin-sqlite'));
|
||||
}
|
||||
if (localconfig.mongo && !testProps.skipMongo) {
|
||||
it('MongoDB', () => testDefinition('Mongo-connection', 'my_guitar_shop', 'mongo@dbgate-plugin-mongo'));
|
||||
}
|
||||
}
|
||||
|
||||
describe('Transactions', () => {
|
||||
multiTest({ skipMongo: true }, (connectionName, databaseName, engine, options = {}) => {
|
||||
const driver = requireEngineDriver(engine);
|
||||
const implicitTransactions = options.implicitTransactions ?? false;
|
||||
|
||||
cy.contains(connectionName).click();
|
||||
if (databaseName) cy.contains(databaseName).click();
|
||||
cy.testid('TabsPanel_buttonNewObject').click();
|
||||
cy.testid('NewObjectModal_query').click();
|
||||
cy.wait(1000);
|
||||
cy.get('body').type(
|
||||
formatQueryWithoutParams(driver, "INSERT INTO ~categories (~category_id, ~category_name) VALUES (5, 'test');")
|
||||
);
|
||||
|
||||
// rollback
|
||||
if (!implicitTransactions) {
|
||||
cy.testid('QueryTab_beginTransactionButton').click();
|
||||
cy.contains('Begin Transaction finished');
|
||||
}
|
||||
cy.testid('QueryTab_executeButton').click();
|
||||
cy.contains('Query execution finished');
|
||||
cy.testid('QueryTab_rollbackTransactionButton').click();
|
||||
cy.contains('Rollback Transaction finished');
|
||||
|
||||
// should contain 4 rows
|
||||
cy.testid('SqlObjectList_container').contains('categories').click();
|
||||
cy.contains('Guitars').click();
|
||||
cy.testid('TableDataTab_refreshGrid').click();
|
||||
cy.contains('Rows: 4');
|
||||
|
||||
// commit
|
||||
cy.contains('Query #1').click();
|
||||
if (!implicitTransactions) {
|
||||
cy.testid('QueryTab_beginTransactionButton').click();
|
||||
cy.contains('Begin Transaction finished');
|
||||
}
|
||||
cy.testid('QueryTab_executeButton').click();
|
||||
cy.contains('Query execution finished');
|
||||
cy.testid('QueryTab_commitTransactionButton').click();
|
||||
cy.contains('Commit Transaction finished');
|
||||
|
||||
// should contain 5 rows
|
||||
cy.testid('SqlObjectList_container').contains('categories').click();
|
||||
cy.contains('Guitars').click();
|
||||
cy.testid('TableDataTab_refreshGrid').click();
|
||||
cy.contains('Rows: 5');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Backup table', () => {
|
||||
multiTest({ skipMongo: true }, (connectionName, databaseName, engine, options = {}) => {
|
||||
const implicitTransactions = options.implicitTransactions ?? false;
|
||||
|
||||
cy.contains(connectionName).click();
|
||||
if (databaseName) cy.contains(databaseName).click();
|
||||
cy.contains('addresses').rightclick();
|
||||
cy.contains('Create table backup').click();
|
||||
cy.testid('ConfirmSqlModal_okButton').click();
|
||||
cy.testid('app-object-group-items-table-backups').contains('addresses').click();
|
||||
cy.contains('Rows: 12').should('be.visible');
|
||||
cy.testid('app-object-group-items-tables').contains('addresses').click();
|
||||
|
||||
cy.contains('Ridgewood').click();
|
||||
cy.testid('TableDataTab_deleteSelectedRows').click();
|
||||
cy.contains('Rosewood').click();
|
||||
cy.testid('TableDataTab_deleteSelectedRows').click();
|
||||
|
||||
cy.contains('Vermont').click();
|
||||
cy.get('body').realType('Wermont{enter}');
|
||||
|
||||
cy.testid('TableDataTab_insertNewRow').click();
|
||||
cy.get('body').realType('Modranska{enter}');
|
||||
cy.realPress(['ArrowLeft']);
|
||||
cy.realPress(['ArrowLeft']);
|
||||
cy.get('body').realType('13{enter}');
|
||||
cy.realPress(['ArrowRight']);
|
||||
cy.get('body').realType('1{enter}');
|
||||
cy.realPress(['ArrowRight']);
|
||||
cy.realPress(['ArrowRight']);
|
||||
cy.realPress(['ArrowRight']);
|
||||
cy.get('body').realType('Prague{enter}');
|
||||
cy.realPress(['ArrowRight']);
|
||||
cy.get('body').realType('CZ{enter}');
|
||||
cy.realPress(['ArrowRight']);
|
||||
cy.get('body').realType('10000{enter}');
|
||||
cy.realPress(['ArrowRight']);
|
||||
cy.get('body').realType('111222333{enter}');
|
||||
|
||||
cy.testid('TableDataTab_save').click();
|
||||
cy.testid('ConfirmSqlModal_okButton', { timeout: 10000 }).click();
|
||||
cy.contains('Rows: 11').should('be.visible'); // wait for save
|
||||
|
||||
cy.testid('app-object-group-items-table-backups').contains('addresses').rightclick();
|
||||
cy.contains('restore script').click();
|
||||
cy.contains('UPDATE'); // wait for query
|
||||
cy.testid('QueryTab_executeButton').click();
|
||||
cy.contains('Query execution finished');
|
||||
|
||||
if (implicitTransactions) {
|
||||
cy.testid('QueryTab_commitTransactionButton').click();
|
||||
cy.contains('Commit Transaction finished');
|
||||
}
|
||||
|
||||
cy.realPress('F1');
|
||||
cy.realType('Close all');
|
||||
cy.realPress('Enter');
|
||||
// cy.testid('CloseTabModal_buttonConfirm').click();
|
||||
cy.wait(1000);
|
||||
|
||||
cy.testid('app-object-group-items-tables').contains('addresses', { timeout: 10000 }).click();
|
||||
|
||||
// check whether data was successfully restored
|
||||
cy.contains('Rows: 12').should('be.visible');
|
||||
cy.contains('Ridgewood');
|
||||
cy.contains('Vermont');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Truncate table', () => {
|
||||
multiTest({ skipMongo: true }, (connectionName, databaseName, engine, options = {}) => {
|
||||
cy.contains(connectionName).click();
|
||||
if (databaseName) cy.contains(databaseName).click();
|
||||
cy.contains('order_items').rightclick();
|
||||
cy.contains('Truncate table').click();
|
||||
cy.testid('ConfirmSqlModal_okButton').click();
|
||||
cy.contains('order_items').click();
|
||||
cy.contains('No rows loaded').should('be.visible');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Drop table', () => {
|
||||
multiTest({ skipMongo: true }, (connectionName, databaseName, engine, options = {}) => {
|
||||
cy.contains(connectionName).click();
|
||||
if (databaseName) cy.contains(databaseName).click();
|
||||
cy.contains('order_items').rightclick();
|
||||
cy.contains('Drop table').click();
|
||||
cy.testid('ConfirmSqlModal_okButton').click();
|
||||
cy.contains('order_items').should('not.exist');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Import CSV', () => {
|
||||
multiTest({}, (connectionName, databaseName, engine, options = {}) => {
|
||||
cy.contains(connectionName).click();
|
||||
if (databaseName) cy.contains(databaseName).click();
|
||||
cy.testid('ConnectionList_container')
|
||||
.contains(databaseName ?? connectionName)
|
||||
.rightclick();
|
||||
cy.contains('Import').click();
|
||||
|
||||
cy.get('input[type=file]').selectFile('cypress/fixtures/customers-20.csv', { force: true });
|
||||
cy.testid('ImportExportConfigurator_tableMappingSection').contains('customers-20');
|
||||
cy.testid('ImportExportTab_preview_content').contains('50ddd99fAdF48B3').should('be.visible');
|
||||
|
||||
cy.testid('ImportExportTab_executeButton').click();
|
||||
cy.testid('ImportExportConfigurator_tableMappingSection').contains('20 rows written').should('be.visible');
|
||||
|
||||
cy.testid('SqlObjectList_refreshButton').click();
|
||||
cy.testid('DatabasStatusMenu_refreshFull').click();
|
||||
// cy.contains('Refresh DB structure (incremental)').click();
|
||||
cy.testid('SqlObjectList_container').contains('customers-20').click();
|
||||
cy.contains('Rows: 20').should('be.visible');
|
||||
|
||||
// cy.get('table tbody tr')
|
||||
// .eq(1)
|
||||
// .within(() => {
|
||||
// cy.get('select').select('Append data');
|
||||
// });
|
||||
});
|
||||
});
|
||||
|
||||
describe('Import CSV - source error', () => {
|
||||
multiTest({}, (connectionName, databaseName, engine, options = {}) => {
|
||||
cy.contains(connectionName).click();
|
||||
if (databaseName) cy.contains(databaseName).click();
|
||||
cy.testid('ConnectionList_container')
|
||||
.contains(databaseName ?? connectionName)
|
||||
.rightclick();
|
||||
cy.contains('Import').click();
|
||||
|
||||
cy.get('input[type=file]').selectFile('cypress/fixtures/customers-20-err.csv', { force: true });
|
||||
cy.contains('customers-20-err');
|
||||
cy.testid('ImportExportTab_preview_content').contains('Invalid Closing Quote').should('be.visible');
|
||||
|
||||
cy.testid('ImportExportTab_executeButton').click();
|
||||
cy.testid('ImportExportConfigurator_errorInfoIcon_customers-20-err', { timeout: 10000 }).click();
|
||||
|
||||
cy.testid('ErrorMessageModal_message').contains('Invalid Closing Quote').should('be.visible');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Import CSV - target error', () => {
|
||||
multiTest({}, (connectionName, databaseName, engine, options = {}) => {
|
||||
cy.contains(connectionName).click();
|
||||
if (databaseName) cy.contains(databaseName).click();
|
||||
cy.testid('ConnectionList_container')
|
||||
.contains(databaseName ?? connectionName)
|
||||
.rightclick();
|
||||
cy.contains('Import').click();
|
||||
|
||||
cy.get('input[type=file]').selectFile('cypress/fixtures/customers-20.csv', { force: true });
|
||||
cy.contains('customers-20');
|
||||
cy.testid('ImportExportConfigurator_targetName_customers-20').clear().type('system."]`');
|
||||
cy.testid('ImportExportTab_executeButton').click();
|
||||
cy.testid('ImportExportConfigurator_errorInfoIcon_customers-20', { timeout: 10000 }).click();
|
||||
cy.testid('ErrorMessageModal_message').should('be.visible');
|
||||
});
|
||||
});
|
||||
49
e2e-tests/cypress/e2e/mykey
Normal file
49
e2e-tests/cypress/e2e/mykey
Normal file
@@ -0,0 +1,49 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
|
||||
NhAAAAAwEAAQAAAgEApTf7bvl+z1WKTAREA8MbchtKDbiqnCXQbnf7wVGpcmEqZYlzt9Ab
|
||||
AbrIwsgIfBDVZZZhk0Wk3KgFD4P78HpGgDBWbvRF5kLHYTxFksa5D5F1yrFq2VT7UVfJd8
|
||||
Lksv1S8W10S7o06SBBOQLvPHtghTd887oYPa77FxNHBo8mHvQsN1G/mKOq25xEiOxfibp9
|
||||
vf8A/ERfpES+XK+waw6DgUH+Mhnsa021DzGeG/EJRn11MGYZ+i5VlaFquwTEXpZ3yAJLgv
|
||||
i8Gr755DKlzCE5hmu7BtMzlwclu4hnT+k1lavSrPsgmaAAPZ3AJIJKcKDazkl0enTOVI67
|
||||
HydjWt99kH8SvDJgvpwYslyClGkGNhvFn5vdxkKg3Pt+PSRcB+GY4GFiZU3f1H0Qp+I99I
|
||||
8XtUSp47ecRqm9y/o/CX7kj3KI1kXpIPyvBsQZmjAnBHaoyBQ+DMXiFFt2xh3d9MJ7mZEz
|
||||
1pUpgBqztH2V49LNX5jgTBNOU4xPI7Mij5m9indyXbQrk64zoK2Ih2jH3L/1alYSL9pAio
|
||||
574QMQqnxnyscYHHqyLW67HxQL2GpNZMGXpQarhziukpDB+VoQ8obxmPmRdFm4Nwqcp5aS
|
||||
VbuBNy0oJWDW5CFqkt6QH/oaibV5fUhwi4ChVHAiM9GTUJE/j7VJUd5JaeqqD11Fq3C96X
|
||||
UAAAdAKwO+PisDvj4AAAAHc3NoLXJzYQAAAgEApTf7bvl+z1WKTAREA8MbchtKDbiqnCXQ
|
||||
bnf7wVGpcmEqZYlzt9AbAbrIwsgIfBDVZZZhk0Wk3KgFD4P78HpGgDBWbvRF5kLHYTxFks
|
||||
a5D5F1yrFq2VT7UVfJd8Lksv1S8W10S7o06SBBOQLvPHtghTd887oYPa77FxNHBo8mHvQs
|
||||
N1G/mKOq25xEiOxfibp9vf8A/ERfpES+XK+waw6DgUH+Mhnsa021DzGeG/EJRn11MGYZ+i
|
||||
5VlaFquwTEXpZ3yAJLgvi8Gr755DKlzCE5hmu7BtMzlwclu4hnT+k1lavSrPsgmaAAPZ3A
|
||||
JIJKcKDazkl0enTOVI67HydjWt99kH8SvDJgvpwYslyClGkGNhvFn5vdxkKg3Pt+PSRcB+
|
||||
GY4GFiZU3f1H0Qp+I99I8XtUSp47ecRqm9y/o/CX7kj3KI1kXpIPyvBsQZmjAnBHaoyBQ+
|
||||
DMXiFFt2xh3d9MJ7mZEz1pUpgBqztH2V49LNX5jgTBNOU4xPI7Mij5m9indyXbQrk64zoK
|
||||
2Ih2jH3L/1alYSL9pAio574QMQqnxnyscYHHqyLW67HxQL2GpNZMGXpQarhziukpDB+VoQ
|
||||
8obxmPmRdFm4Nwqcp5aSVbuBNy0oJWDW5CFqkt6QH/oaibV5fUhwi4ChVHAiM9GTUJE/j7
|
||||
VJUd5JaeqqD11Fq3C96XUAAAADAQABAAACAAOZKogKNbF8+BwbuQIpTP8Oim2uE0PUrFYb
|
||||
lYdqUznDKqc3d9ENs+jfu+DyIQKCuK2+ZAr5vf4dnVlEffIzgjbnK/ASsIsJR/UILlkPVu
|
||||
x4izY06FIqFackivtpao2zaAu2CeMJqn6r+H+uCVkp3rpIBm1QekKtqEOiZIOcuS8nZjx2
|
||||
MqliYdA9S7N9DRT0037rKjGpqOOXqQW1FdnfC7d+9nL6OY9EtqgeuTDRQ8BzRGAfeSVdE6
|
||||
QZ9eHI2CCvP5XtkYjICLYUaWDc8YYhRcggWdxrhnjIQRF1MRApJhpHubjmvJkGm7q70CQm
|
||||
FPT1q+OeRJko022SsOScI6p7qkJjEsHS4RLbSGkDAn84U9l1MnHbzOqOQbI/Mnn7vNyZt4
|
||||
e7n/ExUg9HglpdLgETl0oLIaiVgYGrJSLflfYtrgfEISGtoroQDj/X96HZsF+Aku+I3U4z
|
||||
OD7UasFDl3LsTO3bWz8/vqkCfi/ncejZ4keWUA6VahbtJUg8E/eEIWMz8gFoO/vWf1l0H0
|
||||
V51ISzInt1yVnqhdbRPH+Ce4NlNjq9JlhiZVJSsc6ke2580Okttc3JETzdHWNac7k+/0u4
|
||||
lPZK2sII1cq/d+9YAe3JVpUuiQyX6R4Crga2GIyevoqm3EyXUNN/vjDCx4qyToOtJUzHao
|
||||
tXI4tZZkBmtVrhqf1pAAABAQC3lG50iMbJXL8vVsB7P8UWLgmI13PqwHB8ldzsLrNtkU7q
|
||||
N3KYdz/ycGGPAKxfMJiGs00qT8/d107MZYmj7hHE84VuBiHVGSXbzmL5zeth0aN4oINee0
|
||||
jlvCPKjqhoImPtrU1fLglqOeTNJcZK7XzwiZry1ZHp0hXd4XPrWHZBZo37SYv9/t652zR4
|
||||
qmXlxwwwdtzuNFiAexTu0K4zY12hjmoGlvlCS2YJ+B2wJNd3E1RnL505m7dIA/dLnCLeEj
|
||||
zf8j1XiZ9i/m7mrU/g/e9SFP+HVwi5AV5eyHbNSPD6GZ7quWL4SlP+GGkNtKden+LIaB+G
|
||||
iRwCLTgCVThdIC6oAAABAQDA6Gm7luZuzOoWBQzVKc74AOf64Op+eZwQBCC3V+eHjmyIQW
|
||||
oBozvlvaNxapNxJZQjtnlckCkW59RheQxm155j/MV6aVvaD9WWNFB9k+0fujmPd4fPoZF1
|
||||
9y5J3L3l9hmv+51vZvKvky5mXxOGdONTQZkpGqGvmlZpVO9jWe4WWACokqRIrS9zwtfLgf
|
||||
hH+hUMh+9R1iIKACleNdfHbiqia+XIXxivbVdCtTgdPM6mW8i3gP1/oSTpYZI5KIRH4PTO
|
||||
6OgG8EvRCIPc/0mddXZqiabhpPM/r5qe0jKxcQHFf1siwq7EyZ/C8ctBxpEK4dVCNnCTX4
|
||||
k7+/JizOJzhzljAAABAQDbQT0BsBCM2Dl+LbwpAy6iaS0fWqhCnQ9B6ojWcfNouXuIW4tF
|
||||
6fwmoqyFU2SoORmj0G6ww1NiBr+gwSDo5wSEpCI78S1CnFcp7J1HhONGthmdYDclpDlci5
|
||||
t5AOIC7hhmdkqL46happxG9MH8oOua7/cqK7300nJo+ZS3XOo4O3siTjDVtVKXRAY5jWuG
|
||||
mLNXQ8JKCzqmFfLlAAgGWaY7rMaGu+9Rom+F4FEZ4IUitcsN77jFNBXMXqnWy/ayr8CJpe
|
||||
CxgwBm5JWQ7m+cmskMl3nmjkNr8nCiZoMcz4sIrVkZWS4PHoVFtN3jKYmo3c02kq8/378I
|
||||
jIy5WYf/zrVHAAAABHRlc3QBAgMEBQY=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
14
e2e-tests/cypress/e2e/oauth.cy.js
Normal file
14
e2e-tests/cypress/e2e/oauth.cy.js
Normal file
@@ -0,0 +1,14 @@
|
||||
describe('OAuth', () => {
|
||||
it('OAuth login', () => {
|
||||
cy.visit('http://localhost:3000');
|
||||
|
||||
// login on DEX
|
||||
cy.get('#login').clear().type('test@example.com');
|
||||
cy.get('#password').clear().type('test');
|
||||
cy.get('#submit-login').click();
|
||||
|
||||
// check DbGate connection
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('performance_schema');
|
||||
});
|
||||
});
|
||||
93
e2e-tests/cypress/e2e/portal.cy.js
Normal file
93
e2e-tests/cypress/e2e/portal.cy.js
Normal file
@@ -0,0 +1,93 @@
|
||||
describe('Run as portal', () => {
|
||||
it('successfully loads', () => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.contains('MySql-connection');
|
||||
cy.contains('Postgres-connection');
|
||||
});
|
||||
|
||||
// it('Delete chinook', () => {
|
||||
// cy.visit('http://localhost:3000');
|
||||
|
||||
// cy.contains('MySql-connection').rightclick();
|
||||
// cy.contains('New Query (server)').click();
|
||||
// cy.realType('drop database if exists Chinook');
|
||||
// cy.realPress('F5');
|
||||
// cy.contains('Query execution finished');
|
||||
|
||||
// cy.contains('Postgres-connection').rightclick();
|
||||
// cy.contains('New Query (server)').click();
|
||||
// cy.realType('drop database if exists "Chinook"');
|
||||
// cy.realPress('F5');
|
||||
// cy.contains('Query execution finished');
|
||||
|
||||
// // cy.realPress('F1');
|
||||
// // cy.realType('Close all');
|
||||
// // cy.realPress('Enter');
|
||||
// });
|
||||
|
||||
it('Create Chinook MySQL', () => {
|
||||
cy.visit('http://localhost:3000');
|
||||
|
||||
cy.contains('MySql-connection').click();
|
||||
cy.contains('MySql-connection').rightclick();
|
||||
cy.contains('Create database').click();
|
||||
cy.get('[data-testid=InputTextModal_value]').clear().type('Chinook');
|
||||
cy.get('[data-testid=InputTextModal_ok]').click();
|
||||
});
|
||||
|
||||
it('Create Chinook Postgres', () => {
|
||||
cy.visit('http://localhost:3000');
|
||||
|
||||
cy.contains('Postgres-connection').click();
|
||||
cy.contains('Postgres-connection').rightclick();
|
||||
cy.contains('Create database').click();
|
||||
cy.get('[data-testid=InputTextModal_value]').clear().type('Chinook');
|
||||
cy.get('[data-testid=InputTextModal_ok]').click();
|
||||
});
|
||||
|
||||
// it('Import Chinook MySQL', () => {
|
||||
// cy.visit('http://localhost:3000');
|
||||
// cy.contains('MySql-connection').click();
|
||||
// cy.get('[data-testid=DatabaseAppObject_Chinook]').rightclick();
|
||||
// cy.contains('Chinook').rightclick();
|
||||
// cy.contains('Restore/import SQL dump').click();
|
||||
// cy.get('#uploadFileButton').selectFile('data/chinook-mysql.sql', { force: true });
|
||||
// cy.wait(500);
|
||||
// cy.get('[data-testid=ImportDatabaseDumpModal_runImport]').click();
|
||||
// cy.contains('Importing database');
|
||||
// cy.contains('Finished job script');
|
||||
// cy.get('[data-testid=RunScriptModal_close]').click();
|
||||
// cy.contains('Chinook').click();
|
||||
// cy.contains('Album');
|
||||
// });
|
||||
|
||||
// it('Import Chinook Postgres', () => {
|
||||
// cy.visit('http://localhost:3000');
|
||||
// cy.contains('Postgres-connection').click();
|
||||
// cy.get('[data-testid=DatabaseAppObject_Chinook]').rightclick();
|
||||
// cy.contains('Restore/import SQL dump').click();
|
||||
// cy.get('#uploadFileButton').selectFile('data/chinook-postgres.sql', { force: true });
|
||||
// cy.wait(500);
|
||||
// cy.get('[data-testid=ImportDatabaseDumpModal_runImport]').click();
|
||||
// cy.contains('Importing database');
|
||||
// cy.contains('Finished job script');
|
||||
// cy.get('[data-testid=RunScriptModal_close]').click();
|
||||
// cy.contains('Chinook').click();
|
||||
// cy.contains('album');
|
||||
// });
|
||||
|
||||
it('Open ask pwd connection', () => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.contains('Postgres-ask-connection').click();
|
||||
cy.testid('DatabaseLoginModal_username').clear().type('postgres');
|
||||
cy.testid('DatabaseLoginModal_password').clear().type('Pwd2020Db');
|
||||
cy.testid('DatabaseLoginModal_connect').click();
|
||||
cy.contains('Chinook').click();
|
||||
// cy.contains('album');
|
||||
});
|
||||
|
||||
// it('import chinook DB', () => {
|
||||
// cy.visit('http://localhost:3000');
|
||||
// cy.get('[data-testid=ConnectionTab_buttonConnect]').click();
|
||||
// });
|
||||
});
|
||||
120
e2e-tests/cypress/e2e/redis.cy.js
Normal file
120
e2e-tests/cypress/e2e/redis.cy.js
Normal file
@@ -0,0 +1,120 @@
|
||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
||||
// if the error message matches the one about WorkerGlobalScope importScripts
|
||||
if (err.message.includes("Failed to execute 'importScripts' on 'WorkerGlobalScope'")) {
|
||||
// return false to let Cypress know we intentionally want to ignore this error
|
||||
return false;
|
||||
}
|
||||
// otherwise let Cypress throw the error
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.viewport(1250, 900);
|
||||
});
|
||||
|
||||
describe('Redis data', () => {
|
||||
it('String test', () => {
|
||||
cy.contains('Redis-connection').click();
|
||||
cy.contains('db1').click();
|
||||
cy.contains('app').click();
|
||||
cy.contains('version').click();
|
||||
cy.testid('RedisValueDetail_AceEditor').click().realPress('Backspace').realType('1');
|
||||
cy.contains('Save').click();
|
||||
cy.contains('OK').click();
|
||||
});
|
||||
|
||||
it('Hash test', () => {
|
||||
cy.contains('Redis-connection').click();
|
||||
cy.contains('db1').click();
|
||||
cy.contains('user').click();
|
||||
cy.contains('alice').click();
|
||||
cy.testid('RedisKeyDetailTab_RenameKeyButton').click();
|
||||
cy.themeshot('redis-rename-key');
|
||||
cy.realType('3');
|
||||
cy.contains('OK').click();
|
||||
cy.contains('age').click();
|
||||
cy.testid('RedisValueHashDetail_ValueSection').click().realPress('Backspace').realType('8');
|
||||
cy.contains('Add field').click();
|
||||
cy.testid('RedisValueListLikeEdit_key').click().realType('phone');
|
||||
cy.testid('RedisValueListLikeEdit_value').click().realType('123-456-7890');
|
||||
cy.contains('Refresh').click();
|
||||
cy.themeshot('redis-hash-edit');
|
||||
cy.contains('Save').click();
|
||||
cy.themeshot('redis-hash-script-edit');
|
||||
cy.contains('OK').click();
|
||||
});
|
||||
|
||||
it('List test', () => {
|
||||
cy.contains('Redis-connection').click();
|
||||
cy.contains('db1').click();
|
||||
cy.contains('queue').click();
|
||||
cy.contains('emails').click();
|
||||
cy.contains('Add field').click();
|
||||
cy.testid('RedisValueListLikeEdit_value').click().realType('reset');
|
||||
cy.contains('Save').click();
|
||||
cy.contains('OK').click();
|
||||
});
|
||||
|
||||
it('Set test', () => {
|
||||
cy.contains('Redis-connection').click();
|
||||
cy.contains('db1').click();
|
||||
cy.contains('tags').click();
|
||||
cy.contains('Add field').click();
|
||||
cy.testid('RedisValueListLikeEdit_value').click().realType('newtag');
|
||||
cy.contains('Save').click();
|
||||
cy.contains('OK').click();
|
||||
});
|
||||
|
||||
it('ZSet test', () => {
|
||||
cy.contains('Redis-connection').click();
|
||||
cy.contains('db1').click();
|
||||
cy.contains('leaderboard').click();
|
||||
cy.contains('alice').click();
|
||||
cy.testid('RedisValueZSetDetail_score')
|
||||
.click()
|
||||
.realPress('Backspace')
|
||||
.realPress('Backspace')
|
||||
.realPress('Backspace')
|
||||
.realType('35');
|
||||
cy.contains('Save').click();
|
||||
cy.contains('OK').click();
|
||||
cy.contains('35').should('exist');
|
||||
});
|
||||
|
||||
it('JSON test', () => {
|
||||
cy.contains('Redis-connection').click();
|
||||
cy.contains('db1').click();
|
||||
cy.contains('user').click();
|
||||
cy.contains('1:*').click();
|
||||
cy.contains('json').click();
|
||||
cy.testid('RedisValueDetail_displaySelect').select('JSON view');
|
||||
cy.themeshot('redis-json-detail');
|
||||
});
|
||||
|
||||
it('Stream test', () => {
|
||||
cy.contains('Redis-connection').click();
|
||||
cy.contains('db1').click();
|
||||
cy.contains('events').click();
|
||||
cy.contains('Add field').click();
|
||||
cy.testid('RedisValueListLikeEdit_field').click().realType('message');
|
||||
cy.testid('RedisValueListLikeEdit_value').click().realType('Hello, World!');
|
||||
cy.contains('Save').click();
|
||||
cy.contains('OK').click();
|
||||
cy.themeshot('redis-stream');
|
||||
});
|
||||
|
||||
it('Add key', () => {
|
||||
cy.contains('Redis-connection').click();
|
||||
cy.contains('db1').click();
|
||||
cy.testid('RedisKeysTree_addKeyDropdown').click();
|
||||
cy.contains('String').click();
|
||||
cy.testid('NewRedisKeyTab_keyName').click().realType('newstringkey');
|
||||
cy.testid('RedisValueDetail_AceEditor').click().realType('This is a new string key.');
|
||||
cy.contains('Save').click();
|
||||
cy.contains('OK').click();
|
||||
cy.contains('newstringkey').should('exist');
|
||||
cy.testid('RedisKeysTree_addKeyDropdown').click();
|
||||
cy.contains('Hash').click();
|
||||
cy.themeshot('redis-add-hash-key');
|
||||
});
|
||||
});
|
||||
39
e2e-tests/cypress/e2e/rest.cy.js
Normal file
39
e2e-tests/cypress/e2e/rest.cy.js
Normal file
@@ -0,0 +1,39 @@
|
||||
Cypress.on('uncaught:exception', err => {
|
||||
if (err.message.includes("Failed to execute 'importScripts' on 'WorkerGlobalScope'")) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.viewport(1250, 900);
|
||||
});
|
||||
|
||||
describe('REST API connections', () => {
|
||||
it('GraphQL test', () => {
|
||||
cy.contains('REST GraphQL').click();
|
||||
cy.contains('products').click();
|
||||
cy.testid('GraphQlExplorerNode_toggle_products').click();
|
||||
cy.testid('GraphQlExplorerNode_checkbox_products.name').click();
|
||||
cy.testid('GraphQlExplorerNode_checkbox_products.price').click();
|
||||
cy.testid('GraphQlExplorerNode_checkbox_products.description').click();
|
||||
cy.testid('GraphQlExplorerNode_checkbox_products.category').click();
|
||||
cy.testid('GraphQlQueryTab_execute').click();
|
||||
cy.contains('Electronics');
|
||||
cy.themeshot('rest-graphql-query');
|
||||
});
|
||||
it('REST OpenAPI test', () => {
|
||||
cy.contains('REST OpenAPI').click();
|
||||
cy.contains('/api/categories').click();
|
||||
cy.testid('RestApiEndpointTab_execute').click();
|
||||
cy.contains('Electronics');
|
||||
cy.themeshot('rest-openapi-query');
|
||||
});
|
||||
it('REST OData test', () => {
|
||||
cy.contains('REST OData').click();
|
||||
cy.contains('/Users').click();
|
||||
cy.testid('ODataEndpointTab_execute').click();
|
||||
cy.contains('Henry');
|
||||
cy.themeshot('rest-odata-query');
|
||||
});
|
||||
});
|
||||
151
e2e-tests/cypress/e2e/team.cy.js
Normal file
151
e2e-tests/cypress/e2e/team.cy.js
Normal file
@@ -0,0 +1,151 @@
|
||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
||||
// if the error message matches the one about WorkerGlobalScope importScripts
|
||||
if (err.message.includes("Failed to execute 'importScripts' on 'WorkerGlobalScope'")) {
|
||||
// return false to let Cypress know we intentionally want to ignore this error
|
||||
return false;
|
||||
}
|
||||
// otherwise let Cypress throw the error
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
cy.visit('http://localhost:3000');
|
||||
cy.viewport(1250, 900);
|
||||
});
|
||||
|
||||
describe('Team edition tests', () => {
|
||||
it('Team edition screens', () => {
|
||||
cy.testid('LoginPage_linkAdmin').click();
|
||||
cy.testid('LoginPage_password').type('adminpwd');
|
||||
cy.testid('LoginPage_submitLogin').click();
|
||||
|
||||
cy.testid('AdminMenuWidget_itemConnections').click();
|
||||
cy.contains('New connection').click();
|
||||
cy.testid('ConnectionDriverFields_connectionType').select('PostgreSQL');
|
||||
cy.contains('not granted').should('not.exist');
|
||||
cy.themeshot('connection-administration');
|
||||
|
||||
cy.testid('AdminMenuWidget_itemRoles').click();
|
||||
cy.contains('logged-user').click();
|
||||
cy.contains('not granted').should('not.exist');
|
||||
cy.themeshot('role-administration');
|
||||
|
||||
cy.testid('AdminMenuWidget_itemUsers').click();
|
||||
cy.contains('New user').click();
|
||||
cy.contains('not granted').should('not.exist');
|
||||
cy.themeshot('user-administration');
|
||||
|
||||
cy.testid('AdminMenuWidget_itemAuthentication').click();
|
||||
cy.contains('Add authentication').click();
|
||||
cy.contains('Use database login').click();
|
||||
cy.contains('Add authentication').click();
|
||||
cy.contains('OAuth 2.0').click();
|
||||
cy.contains('not granted').should('not.exist');
|
||||
cy.themeshot('authentication-administration');
|
||||
});
|
||||
|
||||
it('OAuth authentication', () => {
|
||||
cy.testid('LoginPage_linkAdmin').click();
|
||||
cy.testid('LoginPage_password').type('adminpwd');
|
||||
cy.testid('LoginPage_submitLogin').click();
|
||||
cy.testid('AdminMenuWidget_itemAuthentication').click();
|
||||
// cy.testid('AdminAuthForm_disableButton_local').click();
|
||||
// cy.testid('AdminAuthForm_disableButton_none').click();
|
||||
|
||||
// fill OAuth
|
||||
cy.contains('Add authentication').click();
|
||||
cy.contains('OAuth 2.0').click();
|
||||
cy.testid('AdminAuthForm_oauthAuth_oauth').type('http://localhost:16009/dex/auth');
|
||||
cy.testid('AdminAuthForm_oauthToken_oauth').type('http://localhost:16009/dex/token');
|
||||
cy.testid('AdminAuthForm_oauthScope_oauth').type('openid email profile');
|
||||
cy.testid('AdminAuthForm_oauthClient_oauth').type('my-app');
|
||||
cy.testid('AdminAuthForm_oauthClientSecret_oauth').type('my-secret');
|
||||
cy.testid('AdminAuthForm_oauthLoginField_oauth').type('name');
|
||||
cy.testid('AdminAuthForm_oauthSaveNotDefinedLogins_oauth').click();
|
||||
cy.testid('AdminAuthForm_oauthEmailField_oauth').type('email');
|
||||
cy.testid('AdminAuthTab_saveButton').click();
|
||||
|
||||
cy.testid('WidgetIconPanel_menu').click();
|
||||
cy.contains('File').click();
|
||||
cy.contains('Logout').click();
|
||||
cy.testid('LoginPage_linkRegularUser').click();
|
||||
|
||||
// login two times
|
||||
for (let index of [1, 2]) {
|
||||
// login as OAuth
|
||||
cy.testid('LoginPage_loginButton_OAuth 2.0').click();
|
||||
|
||||
// login on DEX
|
||||
cy.get('#login').clear().type('test@example.com');
|
||||
cy.get('#password').clear().type('test');
|
||||
cy.get('#submit-login').click();
|
||||
|
||||
// logout
|
||||
cy.testid('WidgetIconPanel_menu').click();
|
||||
cy.contains('File').click();
|
||||
cy.contains('Logout').click();
|
||||
cy.testid('NotLoggedPage_loginButton').click();
|
||||
}
|
||||
|
||||
// Logout and login again as admin
|
||||
cy.testid('LoginPage_linkAdmin').click();
|
||||
cy.testid('LoginPage_password').type('adminpwd');
|
||||
cy.testid('LoginPage_submitLogin').click();
|
||||
cy.testid('AdminMenuWidget_itemUsers').click();
|
||||
cy.contains('test@example.com');
|
||||
});
|
||||
|
||||
it('Audit logging', () => {
|
||||
cy.testid('LoginPage_linkAdmin').click();
|
||||
cy.testid('LoginPage_password').type('adminpwd');
|
||||
cy.testid('LoginPage_submitLogin').click();
|
||||
|
||||
cy.testid('AdminMenuWidget_itemAuditLog').click();
|
||||
cy.contains('Audit log is not enabled');
|
||||
cy.testid('AdminMenuWidget_itemSettings').click();
|
||||
cy.testid('AdminSettingsTab_auditLogCheckbox').click();
|
||||
cy.testid('AdminMenuWidget_itemAuditLog').click();
|
||||
cy.contains('No data for selected date');
|
||||
|
||||
cy.testid('AdminMenuWidget_itemConnections').click();
|
||||
cy.contains('Open table').click();
|
||||
cy.contains('displayName');
|
||||
cy.get('.toolstrip').contains('Export').click();
|
||||
cy.contains('CSV file').click();
|
||||
|
||||
cy.testid('AdminMenuWidget_itemUsers').click();
|
||||
cy.contains('Open table').click();
|
||||
cy.contains('login');
|
||||
cy.get('.toolstrip').contains('Export').click();
|
||||
cy.contains('XML file').click();
|
||||
|
||||
cy.testid('AdminMenuWidget_itemAuditLog').click();
|
||||
cy.testid('AdminAuditLogTab_refreshButton').click();
|
||||
cy.contains('Exporting query').click();
|
||||
cy.themeshot('auditlog');
|
||||
});
|
||||
|
||||
it('Edit database permissions', () => {
|
||||
cy.testid('LoginPage_linkAdmin').click();
|
||||
cy.testid('LoginPage_password').type('adminpwd');
|
||||
cy.testid('LoginPage_submitLogin').click();
|
||||
|
||||
cy.testid('AdminMenuWidget_itemRoles').click();
|
||||
cy.testid('AdminRolesTab_table').contains('superadmin').click();
|
||||
cy.testid('AdminRolesTab_databases').click();
|
||||
|
||||
cy.testid('AdminDatabasesPermissionsGrid_addButton').click();
|
||||
cy.testid('AdminDatabasesPermissionsGrid_addButton').click();
|
||||
cy.testid('AdminDatabasesPermissionsGrid_addButton').click();
|
||||
|
||||
cy.testid('AdminListOrRegexEditor_1_regexInput').type('^Chinook[\\d]*$');
|
||||
cy.testid('AdminListOrRegexEditor_2_listSwitch').click();
|
||||
cy.testid('AdminListOrRegexEditor_2_listInput').type('Nortwind\nSales');
|
||||
cy.testid('AdminDatabasesPermissionsGrid_roleSelect_0').select('-2');
|
||||
cy.testid('AdminDatabasesPermissionsGrid_roleSelect_1').select('-3');
|
||||
cy.testid('AdminDatabasesPermissionsGrid_roleSelect_2').select('-4');
|
||||
|
||||
cy.contains('not granted').should('not.exist');
|
||||
|
||||
cy.themeshot('database-permissions');
|
||||
});
|
||||
});
|
||||
21
e2e-tests/cypress/fixtures/customers-20-err.csv
Normal file
21
e2e-tests/cypress/fixtures/customers-20-err.csv
Normal file
@@ -0,0 +1,21 @@
|
||||
Index,Customer Id,First Name,Last Name,Company,City,Country,Phone 1,Phone 2,Email,Subscription Date,Website
|
||||
1,50ddd99fAdF48B3,Jessica,Navarro,"Tran, Odom and Graham",Port Terranceview,Jersey,(883)287-7947,479-044-3187,wmcintyre@myers.net,2023-03-11,http://pennington.com/
|
||||
"2,BD1AB97979DDcDe,Preston,Andrews,"Townsend, Lawrence and Davenport",Harringtonmouth,Croatia,188-270-5676x63873,001-428-148-4270,bradley63@jacobs.net,2023-11-15,http://burke.com/
|
||||
3,0FDDD9aCa501acE,Melissa,Mckay,Rivas-Cooke,Oliviabury,Cook Islands,8257631531,001-650-689-5600x927,ugalloway@maxwell-mcclain.com,2025-01-25,https://patrick.com/
|
||||
4,A7dA284B7c4AfaD,Frank,Livingston,"Lambert, Garner and Mathews",Mallorytown,Faroe Islands,766.182.6201x689,+1-476-912-2027x4370,tracie00@webster.biz,2021-03-27,https://www.hart.com/
|
||||
5,38bb1624e4f8211,Ross,Mendoza,Cook and Sons,New Perry,Bolivia,001-440-468-2236,165.562.4328x9274,austincarmen@abbott.com,2024-12-12,http://harmon.com/
|
||||
6,55c9Fda2BABFE1a,Jane,Tate,Knapp PLC,West Kathyshire,Morocco,001-606-447-0584x07975,(003)872-1307x285,carlosgomez@mcpherson-ramos.biz,2021-09-13,http://www.yu.com/
|
||||
7,A15eccAc67cCc5b,Tanya,Chung,Frost Inc,South Julieburgh,United States of America,778-360-8301x268,+1-034-169-4237,onewton@crosby.com,2024-10-01,http://www.gill-velez.biz/
|
||||
8,aFdab04acACaf90,Jackson,Moyer,Bowen Ltd,Port Triciabury,Bahrain,001-187-882-2891x169,154.903.2525,gabriela16@mejia.org,2023-06-20,http://www.david.biz/
|
||||
9,A2EaeAd3c6529B9,Kelly,Douglas,Phillips PLC,Weissberg,Qatar,767.177.3199x5576,5156730935,wigginsmercedes@tanner.com,2021-06-30,https://gonzalez.net/
|
||||
10,188175A5641d080,Mariah,Riddle,"Mata, Fuller and Good",Choiton,Namibia,092-993-3559x342,190.937.3937,eileen32@greer.biz,2021-04-17,http://www.bowen.info/
|
||||
11,B2BA817C7bC09f0,Kristine,Pennington,"Koch, Diaz and Valdez",Port Rachael,Suriname,877.152.6488x921,790-804-9979x3290,tonya00@flynn.com,2024-03-28,https://www.rocha.net/
|
||||
12,fFAD70B5Febc43a,Robert,Adams,Bender-Wolfe,Billfort,Tanzania,219-696-1912x93626,518-969-4058,jeffersoncolton@moss-ashley.com,2022-07-31,https://www.alvarez.com/
|
||||
13,9a44524E1261Ed6,Franklin,Costa,Werner Group,North Bradley,Cook Islands,(895)448-4681x1999,648-345-3083x88242,marksmith@novak.com,2024-12-03,http://thornton.com/
|
||||
14,0C360EfE17D06cc,Dan,Ballard,Sampson-Huff,Michaelchester,Sao Tome and Principe,+1-803-469-5237x2580,(729)574-6101x0605,molly54@acevedo.info,2022-10-24,https://www.sloan-gonzales.biz/
|
||||
15,fb5cE8cb1eF2954,Clifford,Moyer,Fry-Whitehead,Lake Gary,Japan,(504)263-0450,247.514.1614x551,rhonda34@orr.com,2020-03-08,https://norton.com/
|
||||
16,3e53DcaD1cB0054,Tonya,Durham,"Lowe, West and Reynolds",South Sylviaton,Brunei Darussalam,(613)893-8183,(461)399-6120,kiara96@meadows.biz,2022-08-04,https://www.reeves.com/
|
||||
17,83fDDE5812EbEde,Dale,Bishop,Shaw-Ray,Lake Miranda,Congo,(082)202-9241,+1-413-610-1854x79378,bhoward@hodges.biz,2023-05-08,http://www.escobar.com/
|
||||
18,8dB7ACe2C5758cE,Priscilla,Mills,Pope PLC,North Cliffordshire,South Georgia and the South Sandwich Islands,+1-465-802-4573x30191,044-393-6049x598,nathaniel28@hess.com,2020-09-08,https://www.watts.org/
|
||||
19,c1092ebDaF2ceED,Alice,Bond,Chan-Liu,West Wesley,Lithuania,+1-333-285-8515,(715)759-3158x77103,jose92@peters.com,2024-05-30,http://www.marquez.com/
|
||||
20,4d0c95579D095aF,Cole,Compton,Calderon PLC,Robertaville,Saudi Arabia,029.862.3387x470,001-319-474-2394,sspence@dorsey.com,2020-08-02,http://hamilton.net/
|
||||
|
Can't render this file because it contains an unexpected character in line 3 and column 36.
|
21
e2e-tests/cypress/fixtures/customers-20.csv
Normal file
21
e2e-tests/cypress/fixtures/customers-20.csv
Normal file
@@ -0,0 +1,21 @@
|
||||
Index,Customer Id,First Name,Last Name,Company,City,Country,Phone 1,Phone 2,Email,Subscription Date,Website
|
||||
1,50ddd99fAdF48B3,Jessica,Navarro,"Tran, Odom and Graham",Port Terranceview,Jersey,(883)287-7947,479-044-3187,wmcintyre@myers.net,2023-03-11,http://pennington.com/
|
||||
2,BD1AB97979DDcDe,Preston,Andrews,"Townsend, Lawrence and Davenport",Harringtonmouth,Croatia,188-270-5676x63873,001-428-148-4270,bradley63@jacobs.net,2023-11-15,http://burke.com/
|
||||
3,0FDDD9aCa501acE,Melissa,Mckay,Rivas-Cooke,Oliviabury,Cook Islands,8257631531,001-650-689-5600x927,ugalloway@maxwell-mcclain.com,2025-01-25,https://patrick.com/
|
||||
4,A7dA284B7c4AfaD,Frank,Livingston,"Lambert, Garner and Mathews",Mallorytown,Faroe Islands,766.182.6201x689,+1-476-912-2027x4370,tracie00@webster.biz,2021-03-27,https://www.hart.com/
|
||||
5,38bb1624e4f8211,Ross,Mendoza,Cook and Sons,New Perry,Bolivia,001-440-468-2236,165.562.4328x9274,austincarmen@abbott.com,2024-12-12,http://harmon.com/
|
||||
6,55c9Fda2BABFE1a,Jane,Tate,Knapp PLC,West Kathyshire,Morocco,001-606-447-0584x07975,(003)872-1307x285,carlosgomez@mcpherson-ramos.biz,2021-09-13,http://www.yu.com/
|
||||
7,A15eccAc67cCc5b,Tanya,Chung,Frost Inc,South Julieburgh,United States of America,778-360-8301x268,+1-034-169-4237,onewton@crosby.com,2024-10-01,http://www.gill-velez.biz/
|
||||
8,aFdab04acACaf90,Jackson,Moyer,Bowen Ltd,Port Triciabury,Bahrain,001-187-882-2891x169,154.903.2525,gabriela16@mejia.org,2023-06-20,http://www.david.biz/
|
||||
9,A2EaeAd3c6529B9,Kelly,Douglas,Phillips PLC,Weissberg,Qatar,767.177.3199x5576,5156730935,wigginsmercedes@tanner.com,2021-06-30,https://gonzalez.net/
|
||||
10,188175A5641d080,Mariah,Riddle,"Mata, Fuller and Good",Choiton,Namibia,092-993-3559x342,190.937.3937,eileen32@greer.biz,2021-04-17,http://www.bowen.info/
|
||||
11,B2BA817C7bC09f0,Kristine,Pennington,"Koch, Diaz and Valdez",Port Rachael,Suriname,877.152.6488x921,790-804-9979x3290,tonya00@flynn.com,2024-03-28,https://www.rocha.net/
|
||||
12,fFAD70B5Febc43a,Robert,Adams,Bender-Wolfe,Billfort,Tanzania,219-696-1912x93626,518-969-4058,jeffersoncolton@moss-ashley.com,2022-07-31,https://www.alvarez.com/
|
||||
13,9a44524E1261Ed6,Franklin,Costa,Werner Group,North Bradley,Cook Islands,(895)448-4681x1999,648-345-3083x88242,marksmith@novak.com,2024-12-03,http://thornton.com/
|
||||
14,0C360EfE17D06cc,Dan,Ballard,Sampson-Huff,Michaelchester,Sao Tome and Principe,+1-803-469-5237x2580,(729)574-6101x0605,molly54@acevedo.info,2022-10-24,https://www.sloan-gonzales.biz/
|
||||
15,fb5cE8cb1eF2954,Clifford,Moyer,Fry-Whitehead,Lake Gary,Japan,(504)263-0450,247.514.1614x551,rhonda34@orr.com,2020-03-08,https://norton.com/
|
||||
16,3e53DcaD1cB0054,Tonya,Durham,"Lowe, West and Reynolds",South Sylviaton,Brunei Darussalam,(613)893-8183,(461)399-6120,kiara96@meadows.biz,2022-08-04,https://www.reeves.com/
|
||||
17,83fDDE5812EbEde,Dale,Bishop,Shaw-Ray,Lake Miranda,Congo,(082)202-9241,+1-413-610-1854x79378,bhoward@hodges.biz,2023-05-08,http://www.escobar.com/
|
||||
18,8dB7ACe2C5758cE,Priscilla,Mills,Pope PLC,North Cliffordshire,South Georgia and the South Sandwich Islands,+1-465-802-4573x30191,044-393-6049x598,nathaniel28@hess.com,2020-09-08,https://www.watts.org/
|
||||
19,c1092ebDaF2ceED,Alice,Bond,Chan-Liu,West Wesley,Lithuania,+1-333-285-8515,(715)759-3158x77103,jose92@peters.com,2024-05-30,http://www.marquez.com/
|
||||
20,4d0c95579D095aF,Cole,Compton,Calderon PLC,Robertaville,Saudi Arabia,029.862.3387x470,001-319-474-2394,sspence@dorsey.com,2020-08-02,http://hamilton.net/
|
||||
|
5
e2e-tests/cypress/fixtures/example.json
Normal file
5
e2e-tests/cypress/fixtures/example.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "Using fixtures to represent data",
|
||||
"email": "hello@cypress.io",
|
||||
"body": "Fixtures are a great way to mock data for responses to routes"
|
||||
}
|
||||
97
e2e-tests/cypress/support/commands.js
Normal file
97
e2e-tests/cypress/support/commands.js
Normal file
@@ -0,0 +1,97 @@
|
||||
const path = require('path');
|
||||
|
||||
// ***********************************************
|
||||
// This example commands.js shows you how to
|
||||
// create various custom commands and overwrite
|
||||
// existing commands.
|
||||
//
|
||||
// For more comprehensive examples of custom
|
||||
// commands please read more here:
|
||||
// https://on.cypress.io/custom-commands
|
||||
// ***********************************************
|
||||
//
|
||||
//
|
||||
// -- This is a parent command --
|
||||
// Cypress.Commands.add('login', (email, password) => { ... })
|
||||
//
|
||||
//
|
||||
// -- This is a child command --
|
||||
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
|
||||
//
|
||||
//
|
||||
// -- This is a dual command --
|
||||
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
|
||||
//
|
||||
//
|
||||
// -- This will overwrite an existing command --
|
||||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
||||
|
||||
Cypress.Commands.add('testid', (testId, options = {}) => {
|
||||
return cy.get(`[data-testid="${testId}"]`, options);
|
||||
});
|
||||
|
||||
Cypress.Commands.add(
|
||||
'themeshot',
|
||||
{
|
||||
prevSubject: 'optional',
|
||||
},
|
||||
(subject, file, options) => {
|
||||
if (!options?.keepTheme) {
|
||||
cy.window().then(win => {
|
||||
win.__changeCurrentTheme('dark');
|
||||
});
|
||||
}
|
||||
|
||||
// cy.screenshot(`${file}-dark`, {
|
||||
// onAfterScreenshot: (doc, props) => {
|
||||
// cy.task('renameFile', {
|
||||
// from: props.path,
|
||||
// to: path.resolve(__dirname, `../../screenshots/${file}-dark.png`),
|
||||
// });
|
||||
|
||||
// // fs.rename(props.path, path.resolve(path.join(__dirname, `../../screenshots/${file}-dark.png`)));
|
||||
// },
|
||||
// });
|
||||
|
||||
if (subject) {
|
||||
cy.wrap(subject).screenshot(`${file}-dark`, options);
|
||||
} else {
|
||||
cy.screenshot(`${file}-dark`, options);
|
||||
}
|
||||
// .then(props => {
|
||||
// return cy.task('renameFile', {
|
||||
// from: props.path,
|
||||
// to: path.resolve(__dirname, `../../screenshots/${file}-dark.png`),
|
||||
// });
|
||||
// });
|
||||
|
||||
if (!options?.keepTheme) {
|
||||
cy.window().then(win => {
|
||||
win.__changeCurrentTheme('light');
|
||||
});
|
||||
}
|
||||
|
||||
if (subject) {
|
||||
cy.wrap(subject).screenshot(`${file}-light`, options);
|
||||
} else {
|
||||
cy.screenshot(`${file}-light`, options);
|
||||
}
|
||||
// .then(props => {
|
||||
// return cy.task('renameFile', {
|
||||
// from: props.path,
|
||||
// to: path.resolve(__dirname, `../../screenshots/${file}-light.png`),
|
||||
// });
|
||||
// });
|
||||
|
||||
// cy.screenshot(`${file}-light`, {
|
||||
// onAfterScreenshot: (doc, props) => {
|
||||
// cy.task('renameFile', {
|
||||
// from: props.path,
|
||||
// to: path.resolve(__dirname, `../../screenshots/${file}-light.png`),
|
||||
// });
|
||||
|
||||
// // fs.rename(props.path, path.resolve(path.join(__dirname, `../../screenshots/${file}-light.png`)));
|
||||
// },
|
||||
// });
|
||||
}
|
||||
);
|
||||
52
e2e-tests/cypress/support/e2e.js
Normal file
52
e2e-tests/cypress/support/e2e.js
Normal file
@@ -0,0 +1,52 @@
|
||||
// ***********************************************************
|
||||
// This example support/e2e.js is processed and
|
||||
// loaded automatically before your test files.
|
||||
//
|
||||
// This is a great place to put global configuration and
|
||||
// behavior that modifies Cypress.
|
||||
//
|
||||
// You can change the location of this file or turn off
|
||||
// automatically serving support files with the
|
||||
// 'supportFile' configuration option.
|
||||
//
|
||||
// You can read more here:
|
||||
// https://on.cypress.io/configuration
|
||||
// ***********************************************************
|
||||
|
||||
// Import commands.js using ES2015 syntax:
|
||||
import './commands';
|
||||
|
||||
// Alternatively you can use CommonJS syntax:
|
||||
// require('./commands')
|
||||
|
||||
import 'cypress-real-events';
|
||||
|
||||
beforeEach(() => {
|
||||
// Replace 'my-database-name' with the actual IndexedDB name
|
||||
cy.window().then(win => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const request = win.indexedDB.deleteDatabase('localforage');
|
||||
request.onsuccess = () => {
|
||||
// Database successfully deleted
|
||||
resolve();
|
||||
};
|
||||
request.onerror = () => {
|
||||
// Some error occurred
|
||||
reject(request.error);
|
||||
};
|
||||
request.onblocked = () => {
|
||||
// Might happen if there are open connections
|
||||
console.warn('IndexedDB deletion blocked');
|
||||
resolve();
|
||||
};
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Cypress.Screenshot.defaults({
|
||||
// onBeforeScreenshot() {
|
||||
// if (window.Chart) {
|
||||
// Object.values(window.Chart.instances).forEach(c => c.resize());
|
||||
// }
|
||||
// },
|
||||
// });
|
||||
6
e2e-tests/data/charts-sample/departments.jsonl
Normal file
6
e2e-tests/data/charts-sample/departments.jsonl
Normal file
@@ -0,0 +1,6 @@
|
||||
{"__isStreamHeader":true,"pureName":"departments","schemaName":"dbo","objectId":1205579333,"createDate":"2025-06-12T10:30:34.083Z","modifyDate":"2025-06-12T10:30:34.120Z","contentHash":"2025-06-12T10:30:34.120Z","columns":[{"columnName":"id","dataType":"int","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"name","dataType":"varchar(100)","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false}],"primaryKey":{"constraintName":"PK__departme__3213E83FE8E7043D","schemaName":"dbo","pureName":"departments","constraintType":"primaryKey","columns":[{"columnName":"id"}]},"foreignKeys":[],"indexes":[],"uniques":[],"engine":"mssql@dbgate-plugin-mssql"}
|
||||
{"id":1,"name":"IT"}
|
||||
{"id":2,"name":"Marketing"}
|
||||
{"id":3,"name":"Finance"}
|
||||
{"id":4,"name":"Human Resources"}
|
||||
{"id":5,"name":"Research and Development"}
|
||||
12
e2e-tests/data/charts-sample/departments.table.yaml
Normal file
12
e2e-tests/data/charts-sample/departments.table.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
name: departments
|
||||
columns:
|
||||
- name: id
|
||||
type: int
|
||||
default: null
|
||||
notNull: true
|
||||
- name: name
|
||||
type: varchar(100)
|
||||
default: null
|
||||
notNull: true
|
||||
primaryKey:
|
||||
- id
|
||||
39
e2e-tests/data/charts-sample/employee_project.jsonl
Normal file
39
e2e-tests/data/charts-sample/employee_project.jsonl
Normal file
@@ -0,0 +1,39 @@
|
||||
{"__isStreamHeader":true,"pureName":"employee_project","schemaName":"dbo","objectId":1333579789,"createDate":"2025-06-12T10:30:34.133Z","modifyDate":"2025-06-12T10:30:34.133Z","contentHash":"2025-06-12T10:30:34.133Z","columns":[{"columnName":"employee_id","dataType":"int","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"project_id","dataType":"int","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"role","dataType":"varchar(50)","notNull":false,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false}],"primaryKey":{"constraintName":"PK__employee__2EE9924949ED9668","schemaName":"dbo","pureName":"employee_project","constraintType":"primaryKey","columns":[{"columnName":"employee_id"},{"columnName":"project_id"}]},"foreignKeys":[{"constraintName":"FK__employee___emplo__5165187F","constraintType":"foreignKey","schemaName":"dbo","pureName":"employee_project","refSchemaName":"dbo","refTableName":"employees","updateAction":"NO ACTION","deleteAction":"NO ACTION","columns":[{"columnName":"employee_id","refColumnName":"id"}]},{"constraintName":"FK__employee___proje__52593CB8","constraintType":"foreignKey","schemaName":"dbo","pureName":"employee_project","refSchemaName":"dbo","refTableName":"projects","updateAction":"NO ACTION","deleteAction":"NO ACTION","columns":[{"columnName":"project_id","refColumnName":"id"}]}],"indexes":[],"uniques":[],"engine":"mssql@dbgate-plugin-mssql"}
|
||||
{"employee_id":1,"project_id":6,"role":"Manager"}
|
||||
{"employee_id":1,"project_id":8,"role":"Developer"}
|
||||
{"employee_id":2,"project_id":7,"role":"Tester"}
|
||||
{"employee_id":2,"project_id":8,"role":"Developer"}
|
||||
{"employee_id":3,"project_id":4,"role":"Analyst"}
|
||||
{"employee_id":3,"project_id":6,"role":"Developer"}
|
||||
{"employee_id":4,"project_id":2,"role":"Manager"}
|
||||
{"employee_id":4,"project_id":4,"role":"Analyst"}
|
||||
{"employee_id":4,"project_id":5,"role":"Analyst"}
|
||||
{"employee_id":5,"project_id":5,"role":"Tester"}
|
||||
{"employee_id":6,"project_id":1,"role":"Analyst"}
|
||||
{"employee_id":6,"project_id":6,"role":"Tester"}
|
||||
{"employee_id":6,"project_id":9,"role":"Manager"}
|
||||
{"employee_id":7,"project_id":8,"role":"Manager"}
|
||||
{"employee_id":8,"project_id":10,"role":"Analyst"}
|
||||
{"employee_id":9,"project_id":2,"role":"Analyst"}
|
||||
{"employee_id":9,"project_id":6,"role":"Analyst"}
|
||||
{"employee_id":9,"project_id":7,"role":"Developer"}
|
||||
{"employee_id":10,"project_id":2,"role":"Manager"}
|
||||
{"employee_id":10,"project_id":6,"role":"Analyst"}
|
||||
{"employee_id":11,"project_id":1,"role":"Tester"}
|
||||
{"employee_id":12,"project_id":4,"role":"Tester"}
|
||||
{"employee_id":13,"project_id":2,"role":"Developer"}
|
||||
{"employee_id":13,"project_id":3,"role":"Analyst"}
|
||||
{"employee_id":13,"project_id":7,"role":"Developer"}
|
||||
{"employee_id":14,"project_id":3,"role":"Developer"}
|
||||
{"employee_id":14,"project_id":9,"role":"Manager"}
|
||||
{"employee_id":15,"project_id":1,"role":"Developer"}
|
||||
{"employee_id":15,"project_id":5,"role":"Manager"}
|
||||
{"employee_id":16,"project_id":3,"role":"Tester"}
|
||||
{"employee_id":16,"project_id":5,"role":"Developer"}
|
||||
{"employee_id":17,"project_id":6,"role":"Analyst"}
|
||||
{"employee_id":18,"project_id":1,"role":"Tester"}
|
||||
{"employee_id":18,"project_id":5,"role":"Tester"}
|
||||
{"employee_id":18,"project_id":6,"role":"Manager"}
|
||||
{"employee_id":19,"project_id":6,"role":"Analyst"}
|
||||
{"employee_id":20,"project_id":2,"role":"Developer"}
|
||||
{"employee_id":20,"project_id":4,"role":"Developer"}
|
||||
18
e2e-tests/data/charts-sample/employee_project.table.yaml
Normal file
18
e2e-tests/data/charts-sample/employee_project.table.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
name: employee_project
|
||||
columns:
|
||||
- name: employee_id
|
||||
type: int
|
||||
default: null
|
||||
notNull: true
|
||||
references: employees
|
||||
- name: project_id
|
||||
type: int
|
||||
default: null
|
||||
notNull: true
|
||||
references: projects
|
||||
- name: role
|
||||
type: varchar(50)
|
||||
default: null
|
||||
primaryKey:
|
||||
- employee_id
|
||||
- project_id
|
||||
21
e2e-tests/data/charts-sample/employees.jsonl
Normal file
21
e2e-tests/data/charts-sample/employees.jsonl
Normal file
@@ -0,0 +1,21 @@
|
||||
{"__isStreamHeader":true,"pureName":"employees","schemaName":"dbo","objectId":1237579447,"createDate":"2025-06-12T10:30:34.113Z","modifyDate":"2025-06-12T12:35:22.140Z","contentHash":"2025-06-12T12:35:22.140Z","columns":[{"columnName":"id","dataType":"int","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"name","dataType":"varchar(100)","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"email","dataType":"varchar(100)","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"hire_date","dataType":"date","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"department_id","dataType":"int","notNull":false,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false}],"primaryKey":{"constraintName":"PK__employee__3213E83FE576E55A","schemaName":"dbo","pureName":"employees","constraintType":"primaryKey","columns":[{"columnName":"id"}]},"foreignKeys":[{"constraintName":"FK__employees__depar__4CA06362","constraintType":"foreignKey","schemaName":"dbo","pureName":"employees","refSchemaName":"dbo","refTableName":"departments","updateAction":"NO ACTION","deleteAction":"NO ACTION","columns":[{"columnName":"department_id","refColumnName":"id"}]}],"indexes":[],"uniques":[{"constraintName":"UQ__employee__AB6E6164E18D883F","columns":[{"columnName":"email"}]}],"engine":"mssql@dbgate-plugin-mssql"}
|
||||
{"id":1,"name":"John Smith","email":"john.smith@example.com","hire_date":"2018-07-09T00:00:00.000Z","department_id":2}
|
||||
{"id":2,"name":"Jane Garcia","email":"jane.garcia@example.com","hire_date":"2019-10-13T00:00:00.000Z","department_id":5}
|
||||
{"id":3,"name":"Grace Smith","email":"grace.smith@example.com","hire_date":"2019-03-16T00:00:00.000Z","department_id":1}
|
||||
{"id":4,"name":"Charlie Williams","email":"charlie.williams@example.com","hire_date":"2020-10-18T00:00:00.000Z","department_id":2}
|
||||
{"id":5,"name":"Eve Brown","email":"eve.brown@example.com","hire_date":"2018-04-12T00:00:00.000Z","department_id":4}
|
||||
{"id":6,"name":"Alice Moore","email":"alice.moore@example.com","hire_date":"2019-04-20T00:00:00.000Z","department_id":2}
|
||||
{"id":7,"name":"Eve Williams","email":"eve.williams@example.com","hire_date":"2020-04-26T00:00:00.000Z","department_id":4}
|
||||
{"id":8,"name":"Eve Jones","email":"eve.jones@example.com","hire_date":"2022-10-04T00:00:00.000Z","department_id":3}
|
||||
{"id":9,"name":"Diana Miller","email":"diana.miller@example.com","hire_date":"2021-03-28T00:00:00.000Z","department_id":1}
|
||||
{"id":10,"name":"Diana Smith","email":"diana.smith@example.com","hire_date":"2018-04-12T00:00:00.000Z","department_id":2}
|
||||
{"id":11,"name":"Hank Johnson","email":"hank.johnson@example.com","hire_date":"2020-09-16T00:00:00.000Z","department_id":2}
|
||||
{"id":12,"name":"Frank Miller","email":"frank.miller@example.com","hire_date":"2023-01-12T00:00:00.000Z","department_id":4}
|
||||
{"id":13,"name":"Jane Brown","email":"jane.brown@example.com","hire_date":"2023-05-07T00:00:00.000Z","department_id":3}
|
||||
{"id":14,"name":"Grace Davis","email":"grace.davis@example.com","hire_date":"2019-08-22T00:00:00.000Z","department_id":3}
|
||||
{"id":15,"name":"Jane Black","email":"jane.black@example.com","hire_date":"2019-04-28T00:00:00.000Z","department_id":2}
|
||||
{"id":16,"name":"Charlie Smith","email":"charlie.smith@example.com","hire_date":"2019-06-12T00:00:00.000Z","department_id":5}
|
||||
{"id":17,"name":"Eve Johnson","email":"eve.johnson@example.com","hire_date":"2020-11-07T00:00:00.000Z","department_id":5}
|
||||
{"id":18,"name":"Jane Johnson","email":"jane.johnson@example.com","hire_date":"2020-04-06T00:00:00.000Z","department_id":2}
|
||||
{"id":19,"name":"Hank Brown","email":"hank.brown@example.com","hire_date":"2023-05-10T00:00:00.000Z","department_id":2}
|
||||
{"id":20,"name":"Frank Jones","email":"frank.jones@example.com","hire_date":"2020-10-26T00:00:00.000Z","department_id":1}
|
||||
28
e2e-tests/data/charts-sample/employees.table.yaml
Normal file
28
e2e-tests/data/charts-sample/employees.table.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
name: employees
|
||||
columns:
|
||||
- name: id
|
||||
type: int
|
||||
default: null
|
||||
notNull: true
|
||||
- name: name
|
||||
type: varchar(100)
|
||||
default: null
|
||||
notNull: true
|
||||
- name: email
|
||||
type: varchar(100)
|
||||
default: null
|
||||
notNull: true
|
||||
- name: hire_date
|
||||
type: date
|
||||
default: null
|
||||
notNull: true
|
||||
- name: department_id
|
||||
type: int
|
||||
default: null
|
||||
references: departments
|
||||
primaryKey:
|
||||
- id
|
||||
uniques:
|
||||
- name: UQ__employee__AB6E6164E18D883F
|
||||
columns:
|
||||
- email
|
||||
141
e2e-tests/data/charts-sample/finance_reports.jsonl
Normal file
141
e2e-tests/data/charts-sample/finance_reports.jsonl
Normal file
@@ -0,0 +1,141 @@
|
||||
{"__isStreamHeader":true,"pureName":"finance_reports","schemaName":"dbo","objectId":338100245,"createDate":"2025-06-23T12:15:08.727Z","modifyDate":"2025-06-23T12:15:08.750Z","contentHash":"2025-06-23T12:15:08.750Z","columns":[{"columnName":"id","dataType":"int","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"date","dataType":"date","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"profit","dataType":"money","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false}],"foreignKeys":[{"constraintName":"project_id","constraintType":"foreignKey","schemaName":"dbo","pureName":"finance_reports","refSchemaName":"dbo","refTableName":"projects","updateAction":"NO ACTION","deleteAction":"NO ACTION","columns":[{"columnName":"id","refColumnName":"id"}]}],"indexes":[],"uniques":[],"engine":"mssql@dbgate-plugin-mssql"}
|
||||
{"id":1,"date":"2022-01-01T00:00:00.000Z","profit":73923.4}
|
||||
{"id":1,"date":"2022-01-31T00:00:00.000Z","profit":21837.75}
|
||||
{"id":1,"date":"2022-03-02T00:00:00.000Z","profit":67859.8}
|
||||
{"id":1,"date":"2022-04-01T00:00:00.000Z","profit":77403.3}
|
||||
{"id":1,"date":"2022-05-01T00:00:00.000Z","profit":84083.19}
|
||||
{"id":1,"date":"2022-05-31T00:00:00.000Z","profit":30040.55}
|
||||
{"id":1,"date":"2022-06-30T00:00:00.000Z","profit":50947.14}
|
||||
{"id":1,"date":"2022-07-30T00:00:00.000Z","profit":63345.62}
|
||||
{"id":1,"date":"2022-08-29T00:00:00.000Z","profit":23819.45}
|
||||
{"id":1,"date":"2022-09-28T00:00:00.000Z","profit":-25919.19}
|
||||
{"id":1,"date":"2022-10-28T00:00:00.000Z","profit":27967.6}
|
||||
{"id":1,"date":"2022-11-27T00:00:00.000Z","profit":-37402.36}
|
||||
{"id":1,"date":"2022-12-27T00:00:00.000Z","profit":94528.8}
|
||||
{"id":1,"date":"2023-01-26T00:00:00.000Z","profit":29491.03}
|
||||
{"id":1,"date":"2023-02-25T00:00:00.000Z","profit":81541.29}
|
||||
{"id":2,"date":"2022-01-01T00:00:00.000Z","profit":18070.94}
|
||||
{"id":2,"date":"2022-01-31T00:00:00.000Z","profit":-40609.87}
|
||||
{"id":2,"date":"2022-03-02T00:00:00.000Z","profit":42435.51}
|
||||
{"id":2,"date":"2022-04-01T00:00:00.000Z","profit":-11915.15}
|
||||
{"id":2,"date":"2022-05-01T00:00:00.000Z","profit":-37417.4}
|
||||
{"id":2,"date":"2022-05-31T00:00:00.000Z","profit":23028.66}
|
||||
{"id":2,"date":"2022-06-30T00:00:00.000Z","profit":-6895.49}
|
||||
{"id":2,"date":"2022-07-30T00:00:00.000Z","profit":63114.54}
|
||||
{"id":2,"date":"2022-08-29T00:00:00.000Z","profit":94646.99}
|
||||
{"id":2,"date":"2022-09-28T00:00:00.000Z","profit":99560.77}
|
||||
{"id":2,"date":"2022-10-28T00:00:00.000Z","profit":62216.22}
|
||||
{"id":2,"date":"2022-11-27T00:00:00.000Z","profit":85094.32}
|
||||
{"id":2,"date":"2022-12-27T00:00:00.000Z","profit":-23378.37}
|
||||
{"id":2,"date":"2023-01-26T00:00:00.000Z","profit":47635.86}
|
||||
{"id":2,"date":"2023-02-25T00:00:00.000Z","profit":33727.72}
|
||||
{"id":3,"date":"2022-01-01T00:00:00.000Z","profit":33088.03}
|
||||
{"id":3,"date":"2022-01-31T00:00:00.000Z","profit":66668.91}
|
||||
{"id":3,"date":"2022-03-02T00:00:00.000Z","profit":5344.27}
|
||||
{"id":3,"date":"2022-04-01T00:00:00.000Z","profit":22122.99}
|
||||
{"id":3,"date":"2022-05-01T00:00:00.000Z","profit":27342.01}
|
||||
{"id":3,"date":"2022-05-31T00:00:00.000Z","profit":55479.42}
|
||||
{"id":3,"date":"2022-06-30T00:00:00.000Z","profit":35956.11}
|
||||
{"id":3,"date":"2022-07-30T00:00:00.000Z","profit":9667.12}
|
||||
{"id":3,"date":"2022-08-29T00:00:00.000Z","profit":63430.18}
|
||||
{"id":3,"date":"2022-09-28T00:00:00.000Z","profit":-4883.41}
|
||||
{"id":3,"date":"2022-10-28T00:00:00.000Z","profit":38902.8}
|
||||
{"id":3,"date":"2022-11-27T00:00:00.000Z","profit":-25500.13}
|
||||
{"id":3,"date":"2022-12-27T00:00:00.000Z","profit":65074.21}
|
||||
{"id":3,"date":"2023-01-26T00:00:00.000Z","profit":12570.27}
|
||||
{"id":3,"date":"2023-02-25T00:00:00.000Z","profit":35418.36}
|
||||
{"id":4,"date":"2022-01-01T00:00:00.000Z","profit":68282.98}
|
||||
{"id":4,"date":"2022-01-31T00:00:00.000Z","profit":77778.99}
|
||||
{"id":4,"date":"2022-03-02T00:00:00.000Z","profit":95490.49}
|
||||
{"id":4,"date":"2022-04-01T00:00:00.000Z","profit":-44466.37}
|
||||
{"id":4,"date":"2022-05-01T00:00:00.000Z","profit":40215.71}
|
||||
{"id":4,"date":"2022-05-31T00:00:00.000Z","profit":-31228.87}
|
||||
{"id":4,"date":"2022-06-30T00:00:00.000Z","profit":60667.69}
|
||||
{"id":4,"date":"2022-07-30T00:00:00.000Z","profit":71439.16}
|
||||
{"id":4,"date":"2022-08-29T00:00:00.000Z","profit":-25077.4}
|
||||
{"id":4,"date":"2022-09-28T00:00:00.000Z","profit":-36128.2}
|
||||
{"id":4,"date":"2022-10-28T00:00:00.000Z","profit":36727.68}
|
||||
{"id":4,"date":"2022-11-27T00:00:00.000Z","profit":-24207.2}
|
||||
{"id":4,"date":"2022-12-27T00:00:00.000Z","profit":63846.96}
|
||||
{"id":5,"date":"2022-01-01T00:00:00.000Z","profit":21648.3}
|
||||
{"id":5,"date":"2022-01-31T00:00:00.000Z","profit":59263.22}
|
||||
{"id":5,"date":"2022-03-02T00:00:00.000Z","profit":49154.51}
|
||||
{"id":5,"date":"2022-04-01T00:00:00.000Z","profit":34787.48}
|
||||
{"id":5,"date":"2022-05-01T00:00:00.000Z","profit":-24120.19}
|
||||
{"id":5,"date":"2022-05-31T00:00:00.000Z","profit":98437.86}
|
||||
{"id":5,"date":"2022-06-30T00:00:00.000Z","profit":18614.77}
|
||||
{"id":5,"date":"2022-07-30T00:00:00.000Z","profit":17680.34}
|
||||
{"id":5,"date":"2022-08-29T00:00:00.000Z","profit":74406.86}
|
||||
{"id":5,"date":"2022-09-28T00:00:00.000Z","profit":61845.3}
|
||||
{"id":5,"date":"2022-10-28T00:00:00.000Z","profit":-37889.59}
|
||||
{"id":5,"date":"2022-11-27T00:00:00.000Z","profit":76651.05}
|
||||
{"id":5,"date":"2022-12-27T00:00:00.000Z","profit":58739.6}
|
||||
{"id":5,"date":"2023-01-26T00:00:00.000Z","profit":82605.85}
|
||||
{"id":6,"date":"2022-01-01T00:00:00.000Z","profit":-5206.8}
|
||||
{"id":6,"date":"2022-01-31T00:00:00.000Z","profit":27498.27}
|
||||
{"id":6,"date":"2022-03-02T00:00:00.000Z","profit":-2939.84}
|
||||
{"id":6,"date":"2022-04-01T00:00:00.000Z","profit":-37261.08}
|
||||
{"id":6,"date":"2022-05-01T00:00:00.000Z","profit":37069.04}
|
||||
{"id":6,"date":"2022-05-31T00:00:00.000Z","profit":524.88}
|
||||
{"id":6,"date":"2022-06-30T00:00:00.000Z","profit":-29620.85}
|
||||
{"id":6,"date":"2022-07-30T00:00:00.000Z","profit":35540.81}
|
||||
{"id":6,"date":"2022-08-29T00:00:00.000Z","profit":20608.94}
|
||||
{"id":6,"date":"2022-09-28T00:00:00.000Z","profit":34809.33}
|
||||
{"id":6,"date":"2022-10-28T00:00:00.000Z","profit":-44949.05}
|
||||
{"id":6,"date":"2022-11-27T00:00:00.000Z","profit":-22524.26}
|
||||
{"id":6,"date":"2022-12-27T00:00:00.000Z","profit":37841.58}
|
||||
{"id":7,"date":"2022-01-01T00:00:00.000Z","profit":6903.17}
|
||||
{"id":7,"date":"2022-01-31T00:00:00.000Z","profit":58480.84}
|
||||
{"id":7,"date":"2022-03-02T00:00:00.000Z","profit":48217.34}
|
||||
{"id":7,"date":"2022-04-01T00:00:00.000Z","profit":73592.44}
|
||||
{"id":7,"date":"2022-05-01T00:00:00.000Z","profit":-21831.18}
|
||||
{"id":7,"date":"2022-05-31T00:00:00.000Z","profit":-40926.16}
|
||||
{"id":7,"date":"2022-06-30T00:00:00.000Z","profit":62299.5}
|
||||
{"id":7,"date":"2022-07-30T00:00:00.000Z","profit":95376.53}
|
||||
{"id":7,"date":"2022-08-29T00:00:00.000Z","profit":-13317.36}
|
||||
{"id":7,"date":"2022-09-28T00:00:00.000Z","profit":81565.05}
|
||||
{"id":7,"date":"2022-10-28T00:00:00.000Z","profit":77420.52}
|
||||
{"id":7,"date":"2022-11-27T00:00:00.000Z","profit":-12052.47}
|
||||
{"id":7,"date":"2022-12-27T00:00:00.000Z","profit":37742.07}
|
||||
{"id":7,"date":"2023-01-26T00:00:00.000Z","profit":-8057.99}
|
||||
{"id":8,"date":"2022-01-01T00:00:00.000Z","profit":27213.73}
|
||||
{"id":8,"date":"2022-01-31T00:00:00.000Z","profit":34271.75}
|
||||
{"id":8,"date":"2022-03-02T00:00:00.000Z","profit":-44549.47}
|
||||
{"id":8,"date":"2022-04-01T00:00:00.000Z","profit":15236.34}
|
||||
{"id":8,"date":"2022-05-01T00:00:00.000Z","profit":-27759.81}
|
||||
{"id":8,"date":"2022-05-31T00:00:00.000Z","profit":7955.12}
|
||||
{"id":8,"date":"2022-06-30T00:00:00.000Z","profit":-34484.38}
|
||||
{"id":8,"date":"2022-07-30T00:00:00.000Z","profit":-49758.7}
|
||||
{"id":8,"date":"2022-08-29T00:00:00.000Z","profit":-41990.86}
|
||||
{"id":8,"date":"2022-09-28T00:00:00.000Z","profit":58123.01}
|
||||
{"id":8,"date":"2022-10-28T00:00:00.000Z","profit":30128.78}
|
||||
{"id":8,"date":"2022-11-27T00:00:00.000Z","profit":-10151.17}
|
||||
{"id":8,"date":"2022-12-27T00:00:00.000Z","profit":54048.33}
|
||||
{"id":8,"date":"2023-01-26T00:00:00.000Z","profit":-43123.17}
|
||||
{"id":9,"date":"2022-01-01T00:00:00.000Z","profit":61031.83}
|
||||
{"id":9,"date":"2022-01-31T00:00:00.000Z","profit":68577.58}
|
||||
{"id":9,"date":"2022-03-02T00:00:00.000Z","profit":88698.97}
|
||||
{"id":9,"date":"2022-04-01T00:00:00.000Z","profit":8906.03}
|
||||
{"id":9,"date":"2022-05-01T00:00:00.000Z","profit":28824.73}
|
||||
{"id":9,"date":"2022-05-31T00:00:00.000Z","profit":88280.34}
|
||||
{"id":9,"date":"2022-06-30T00:00:00.000Z","profit":35266.09}
|
||||
{"id":9,"date":"2022-07-30T00:00:00.000Z","profit":-38025.36}
|
||||
{"id":9,"date":"2022-08-29T00:00:00.000Z","profit":-12118.53}
|
||||
{"id":9,"date":"2022-09-28T00:00:00.000Z","profit":-27265.86}
|
||||
{"id":9,"date":"2022-10-28T00:00:00.000Z","profit":56870.57}
|
||||
{"id":9,"date":"2022-11-27T00:00:00.000Z","profit":88078.95}
|
||||
{"id":9,"date":"2022-12-27T00:00:00.000Z","profit":-24059.67}
|
||||
{"id":9,"date":"2023-01-26T00:00:00.000Z","profit":-13301.43}
|
||||
{"id":10,"date":"2022-01-01T00:00:00.000Z","profit":-22479.23}
|
||||
{"id":10,"date":"2022-01-31T00:00:00.000Z","profit":8106.27}
|
||||
{"id":10,"date":"2022-03-02T00:00:00.000Z","profit":69372.19}
|
||||
{"id":10,"date":"2022-04-01T00:00:00.000Z","profit":-11895.74}
|
||||
{"id":10,"date":"2022-05-01T00:00:00.000Z","profit":-33206.5}
|
||||
{"id":10,"date":"2022-05-31T00:00:00.000Z","profit":56073.34}
|
||||
{"id":10,"date":"2022-06-30T00:00:00.000Z","profit":67488.3}
|
||||
{"id":10,"date":"2022-07-30T00:00:00.000Z","profit":48529.23}
|
||||
{"id":10,"date":"2022-08-29T00:00:00.000Z","profit":28680.2}
|
||||
{"id":10,"date":"2022-09-28T00:00:00.000Z","profit":59311.16}
|
||||
{"id":10,"date":"2022-10-28T00:00:00.000Z","profit":25315.78}
|
||||
{"id":10,"date":"2022-11-27T00:00:00.000Z","profit":36116.38}
|
||||
{"id":10,"date":"2022-12-27T00:00:00.000Z","profit":-42040.4}
|
||||
15
e2e-tests/data/charts-sample/finance_reports.table.yaml
Normal file
15
e2e-tests/data/charts-sample/finance_reports.table.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
name: finance_reports
|
||||
columns:
|
||||
- name: id
|
||||
type: int
|
||||
default: null
|
||||
notNull: true
|
||||
references: projects
|
||||
- name: date
|
||||
type: date
|
||||
default: null
|
||||
notNull: true
|
||||
- name: profit
|
||||
type: money
|
||||
default: null
|
||||
notNull: true
|
||||
11
e2e-tests/data/charts-sample/projects.jsonl
Normal file
11
e2e-tests/data/charts-sample/projects.jsonl
Normal file
@@ -0,0 +1,11 @@
|
||||
{"__isStreamHeader":true,"pureName":"projects","schemaName":"dbo","objectId":1301579675,"createDate":"2025-06-12T10:30:34.127Z","modifyDate":"2025-06-23T12:15:08.750Z","contentHash":"2025-06-23T12:15:08.750Z","columns":[{"columnName":"id","dataType":"int","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"name","dataType":"varchar(100)","notNull":true,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"start_date","dataType":"date","notNull":false,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false},{"columnName":"end_date","dataType":"date","notNull":false,"autoIncrement":false,"defaultValue":null,"defaultConstraint":null,"computedExpression":null,"hasAutoValue":false}],"primaryKey":{"constraintName":"PK__projects__3213E83F26A7ED11","schemaName":"dbo","pureName":"projects","constraintType":"primaryKey","columns":[{"columnName":"id"}]},"foreignKeys":[],"indexes":[],"uniques":[],"engine":"mssql@dbgate-plugin-mssql"}
|
||||
{"id":1,"name":"Apollo Upgrade","start_date":"2020-04-27T00:00:00.000Z","end_date":"2020-10-19T00:00:00.000Z"}
|
||||
{"id":2,"name":"Market Expansion","start_date":"2022-08-04T00:00:00.000Z","end_date":"2023-06-20T00:00:00.000Z"}
|
||||
{"id":3,"name":"AI Integration","start_date":"2020-05-11T00:00:00.000Z","end_date":"2021-07-10T00:00:00.000Z"}
|
||||
{"id":4,"name":"Cost Reduction","start_date":"2022-01-08T00:00:00.000Z","end_date":"2022-07-12T00:00:00.000Z"}
|
||||
{"id":5,"name":"Cloud Migration","start_date":"2021-01-11T00:00:00.000Z","end_date":"2021-05-27T00:00:00.000Z"}
|
||||
{"id":6,"name":"Customer Portal","start_date":"2021-07-13T00:00:00.000Z","end_date":"2022-09-22T00:00:00.000Z"}
|
||||
{"id":7,"name":"Data Lake","start_date":"2021-02-25T00:00:00.000Z","end_date":"2021-08-21T00:00:00.000Z"}
|
||||
{"id":8,"name":"UX Overhaul","start_date":"2021-05-20T00:00:00.000Z","end_date":"2022-09-10T00:00:00.000Z"}
|
||||
{"id":9,"name":"Security Hardening","start_date":"2021-05-28T00:00:00.000Z","end_date":"2022-07-28T00:00:00.000Z"}
|
||||
{"id":10,"name":"Mobile App Revamp","start_date":"2021-11-17T00:00:00.000Z","end_date":"2022-06-04T00:00:00.000Z"}
|
||||
18
e2e-tests/data/charts-sample/projects.table.yaml
Normal file
18
e2e-tests/data/charts-sample/projects.table.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
name: projects
|
||||
columns:
|
||||
- name: id
|
||||
type: int
|
||||
default: null
|
||||
notNull: true
|
||||
- name: name
|
||||
type: varchar(100)
|
||||
default: null
|
||||
notNull: true
|
||||
- name: start_date
|
||||
type: date
|
||||
default: null
|
||||
- name: end_date
|
||||
type: date
|
||||
default: null
|
||||
primaryKey:
|
||||
- id
|
||||
347
e2e-tests/data/chinook-jsonl/Album.jsonl
Normal file
347
e2e-tests/data/chinook-jsonl/Album.jsonl
Normal file
@@ -0,0 +1,347 @@
|
||||
{"AlbumId":1,"Title":"For Those About To Rock We Salute You","ArtistId":1}
|
||||
{"AlbumId":2,"Title":"Balls to the Wall","ArtistId":2}
|
||||
{"AlbumId":3,"Title":"Restless and Wild","ArtistId":2}
|
||||
{"AlbumId":4,"Title":"Let There Be Rock","ArtistId":1}
|
||||
{"AlbumId":5,"Title":"Big Ones","ArtistId":3}
|
||||
{"AlbumId":6,"Title":"Jagged Little Pill","ArtistId":4}
|
||||
{"AlbumId":7,"Title":"Facelift","ArtistId":5}
|
||||
{"AlbumId":8,"Title":"Warner 25 Anos","ArtistId":6}
|
||||
{"AlbumId":9,"Title":"Plays Metallica By Four Cellos","ArtistId":7}
|
||||
{"AlbumId":10,"Title":"Audioslave","ArtistId":8}
|
||||
{"AlbumId":11,"Title":"Out Of Exile","ArtistId":8}
|
||||
{"AlbumId":12,"Title":"BackBeat Soundtrack","ArtistId":9}
|
||||
{"AlbumId":13,"Title":"The Best Of Billy Cobham","ArtistId":10}
|
||||
{"AlbumId":14,"Title":"Alcohol Fueled Brewtality Live! [Disc 1]","ArtistId":11}
|
||||
{"AlbumId":15,"Title":"Alcohol Fueled Brewtality Live! [Disc 2]","ArtistId":11}
|
||||
{"AlbumId":16,"Title":"Black Sabbath","ArtistId":12}
|
||||
{"AlbumId":17,"Title":"Black Sabbath Vol. 4 (Remaster)","ArtistId":12}
|
||||
{"AlbumId":18,"Title":"Body Count","ArtistId":13}
|
||||
{"AlbumId":19,"Title":"Chemical Wedding","ArtistId":14}
|
||||
{"AlbumId":20,"Title":"The Best Of Buddy Guy - The Millenium Collection","ArtistId":15}
|
||||
{"AlbumId":21,"Title":"Prenda Minha","ArtistId":16}
|
||||
{"AlbumId":22,"Title":"Sozinho Remix Ao Vivo","ArtistId":16}
|
||||
{"AlbumId":23,"Title":"Minha Historia","ArtistId":17}
|
||||
{"AlbumId":24,"Title":"Afrociberdelia","ArtistId":18}
|
||||
{"AlbumId":25,"Title":"Da Lama Ao Caos","ArtistId":18}
|
||||
{"AlbumId":26,"Title":"Acústico MTV [Live]","ArtistId":19}
|
||||
{"AlbumId":27,"Title":"Cidade Negra - Hits","ArtistId":19}
|
||||
{"AlbumId":28,"Title":"Na Pista","ArtistId":20}
|
||||
{"AlbumId":29,"Title":"Axé Bahia 2001","ArtistId":21}
|
||||
{"AlbumId":30,"Title":"BBC Sessions [Disc 1] [Live]","ArtistId":22}
|
||||
{"AlbumId":31,"Title":"Bongo Fury","ArtistId":23}
|
||||
{"AlbumId":32,"Title":"Carnaval 2001","ArtistId":21}
|
||||
{"AlbumId":33,"Title":"Chill: Brazil (Disc 1)","ArtistId":24}
|
||||
{"AlbumId":34,"Title":"Chill: Brazil (Disc 2)","ArtistId":6}
|
||||
{"AlbumId":35,"Title":"Garage Inc. (Disc 1)","ArtistId":50}
|
||||
{"AlbumId":36,"Title":"Greatest Hits II","ArtistId":51}
|
||||
{"AlbumId":37,"Title":"Greatest Kiss","ArtistId":52}
|
||||
{"AlbumId":38,"Title":"Heart of the Night","ArtistId":53}
|
||||
{"AlbumId":39,"Title":"International Superhits","ArtistId":54}
|
||||
{"AlbumId":40,"Title":"Into The Light","ArtistId":55}
|
||||
{"AlbumId":41,"Title":"Meus Momentos","ArtistId":56}
|
||||
{"AlbumId":42,"Title":"Minha História","ArtistId":57}
|
||||
{"AlbumId":43,"Title":"MK III The Final Concerts [Disc 1]","ArtistId":58}
|
||||
{"AlbumId":44,"Title":"Physical Graffiti [Disc 1]","ArtistId":22}
|
||||
{"AlbumId":45,"Title":"Sambas De Enredo 2001","ArtistId":21}
|
||||
{"AlbumId":46,"Title":"Supernatural","ArtistId":59}
|
||||
{"AlbumId":47,"Title":"The Best of Ed Motta","ArtistId":37}
|
||||
{"AlbumId":48,"Title":"The Essential Miles Davis [Disc 1]","ArtistId":68}
|
||||
{"AlbumId":49,"Title":"The Essential Miles Davis [Disc 2]","ArtistId":68}
|
||||
{"AlbumId":50,"Title":"The Final Concerts (Disc 2)","ArtistId":58}
|
||||
{"AlbumId":51,"Title":"Up An' Atom","ArtistId":69}
|
||||
{"AlbumId":52,"Title":"Vinícius De Moraes - Sem Limite","ArtistId":70}
|
||||
{"AlbumId":53,"Title":"Vozes do MPB","ArtistId":21}
|
||||
{"AlbumId":54,"Title":"Chronicle, Vol. 1","ArtistId":76}
|
||||
{"AlbumId":55,"Title":"Chronicle, Vol. 2","ArtistId":76}
|
||||
{"AlbumId":56,"Title":"Cássia Eller - Coleçăo Sem Limite [Disc 2]","ArtistId":77}
|
||||
{"AlbumId":57,"Title":"Cássia Eller - Sem Limite [Disc 1]","ArtistId":77}
|
||||
{"AlbumId":58,"Title":"Come Taste The Band","ArtistId":58}
|
||||
{"AlbumId":59,"Title":"Deep Purple In Rock","ArtistId":58}
|
||||
{"AlbumId":60,"Title":"Fireball","ArtistId":58}
|
||||
{"AlbumId":61,"Title":"Knocking at Your Back Door: The Best Of Deep Purple in the 80's","ArtistId":58}
|
||||
{"AlbumId":62,"Title":"Machine Head","ArtistId":58}
|
||||
{"AlbumId":63,"Title":"Purpendicular","ArtistId":58}
|
||||
{"AlbumId":64,"Title":"Slaves And Masters","ArtistId":58}
|
||||
{"AlbumId":65,"Title":"Stormbringer","ArtistId":58}
|
||||
{"AlbumId":66,"Title":"The Battle Rages On","ArtistId":58}
|
||||
{"AlbumId":67,"Title":"Vault: Def Leppard's Greatest Hits","ArtistId":78}
|
||||
{"AlbumId":68,"Title":"Outbreak","ArtistId":79}
|
||||
{"AlbumId":69,"Title":"Djavan Ao Vivo - Vol. 02","ArtistId":80}
|
||||
{"AlbumId":70,"Title":"Djavan Ao Vivo - Vol. 1","ArtistId":80}
|
||||
{"AlbumId":71,"Title":"Elis Regina-Minha História","ArtistId":41}
|
||||
{"AlbumId":72,"Title":"The Cream Of Clapton","ArtistId":81}
|
||||
{"AlbumId":73,"Title":"Unplugged","ArtistId":81}
|
||||
{"AlbumId":74,"Title":"Album Of The Year","ArtistId":82}
|
||||
{"AlbumId":75,"Title":"Angel Dust","ArtistId":82}
|
||||
{"AlbumId":76,"Title":"King For A Day Fool For A Lifetime","ArtistId":82}
|
||||
{"AlbumId":77,"Title":"The Real Thing","ArtistId":82}
|
||||
{"AlbumId":78,"Title":"Deixa Entrar","ArtistId":83}
|
||||
{"AlbumId":79,"Title":"In Your Honor [Disc 1]","ArtistId":84}
|
||||
{"AlbumId":80,"Title":"In Your Honor [Disc 2]","ArtistId":84}
|
||||
{"AlbumId":81,"Title":"One By One","ArtistId":84}
|
||||
{"AlbumId":82,"Title":"The Colour And The Shape","ArtistId":84}
|
||||
{"AlbumId":83,"Title":"My Way: The Best Of Frank Sinatra [Disc 1]","ArtistId":85}
|
||||
{"AlbumId":84,"Title":"Roda De Funk","ArtistId":86}
|
||||
{"AlbumId":85,"Title":"As Cançőes de Eu Tu Eles","ArtistId":27}
|
||||
{"AlbumId":86,"Title":"Quanta Gente Veio Ver (Live)","ArtistId":27}
|
||||
{"AlbumId":87,"Title":"Quanta Gente Veio ver--Bônus De Carnaval","ArtistId":27}
|
||||
{"AlbumId":88,"Title":"Faceless","ArtistId":87}
|
||||
{"AlbumId":89,"Title":"American Idiot","ArtistId":54}
|
||||
{"AlbumId":90,"Title":"Appetite for Destruction","ArtistId":88}
|
||||
{"AlbumId":91,"Title":"Use Your Illusion I","ArtistId":88}
|
||||
{"AlbumId":92,"Title":"Use Your Illusion II","ArtistId":88}
|
||||
{"AlbumId":93,"Title":"Blue Moods","ArtistId":89}
|
||||
{"AlbumId":94,"Title":"A Matter of Life and Death","ArtistId":90}
|
||||
{"AlbumId":95,"Title":"A Real Dead One","ArtistId":90}
|
||||
{"AlbumId":96,"Title":"A Real Live One","ArtistId":90}
|
||||
{"AlbumId":97,"Title":"Brave New World","ArtistId":90}
|
||||
{"AlbumId":98,"Title":"Dance Of Death","ArtistId":90}
|
||||
{"AlbumId":99,"Title":"Fear Of The Dark","ArtistId":90}
|
||||
{"AlbumId":100,"Title":"Iron Maiden","ArtistId":90}
|
||||
{"AlbumId":101,"Title":"Killers","ArtistId":90}
|
||||
{"AlbumId":102,"Title":"Live After Death","ArtistId":90}
|
||||
{"AlbumId":103,"Title":"Live At Donington 1992 (Disc 1)","ArtistId":90}
|
||||
{"AlbumId":104,"Title":"Live At Donington 1992 (Disc 2)","ArtistId":90}
|
||||
{"AlbumId":105,"Title":"No Prayer For The Dying","ArtistId":90}
|
||||
{"AlbumId":106,"Title":"Piece Of Mind","ArtistId":90}
|
||||
{"AlbumId":107,"Title":"Powerslave","ArtistId":90}
|
||||
{"AlbumId":108,"Title":"Rock In Rio [CD1]","ArtistId":90}
|
||||
{"AlbumId":109,"Title":"Rock In Rio [CD2]","ArtistId":90}
|
||||
{"AlbumId":110,"Title":"Seventh Son of a Seventh Son","ArtistId":90}
|
||||
{"AlbumId":111,"Title":"Somewhere in Time","ArtistId":90}
|
||||
{"AlbumId":112,"Title":"The Number of The Beast","ArtistId":90}
|
||||
{"AlbumId":113,"Title":"The X Factor","ArtistId":90}
|
||||
{"AlbumId":114,"Title":"Virtual XI","ArtistId":90}
|
||||
{"AlbumId":115,"Title":"Sex Machine","ArtistId":91}
|
||||
{"AlbumId":116,"Title":"Emergency On Planet Earth","ArtistId":92}
|
||||
{"AlbumId":117,"Title":"Synkronized","ArtistId":92}
|
||||
{"AlbumId":118,"Title":"The Return Of The Space Cowboy","ArtistId":92}
|
||||
{"AlbumId":119,"Title":"Get Born","ArtistId":93}
|
||||
{"AlbumId":120,"Title":"Are You Experienced?","ArtistId":94}
|
||||
{"AlbumId":121,"Title":"Surfing with the Alien (Remastered)","ArtistId":95}
|
||||
{"AlbumId":122,"Title":"Jorge Ben Jor 25 Anos","ArtistId":46}
|
||||
{"AlbumId":123,"Title":"Jota Quest-1995","ArtistId":96}
|
||||
{"AlbumId":124,"Title":"Cafezinho","ArtistId":97}
|
||||
{"AlbumId":125,"Title":"Living After Midnight","ArtistId":98}
|
||||
{"AlbumId":126,"Title":"Unplugged [Live]","ArtistId":52}
|
||||
{"AlbumId":127,"Title":"BBC Sessions [Disc 2] [Live]","ArtistId":22}
|
||||
{"AlbumId":128,"Title":"Coda","ArtistId":22}
|
||||
{"AlbumId":129,"Title":"Houses Of The Holy","ArtistId":22}
|
||||
{"AlbumId":130,"Title":"In Through The Out Door","ArtistId":22}
|
||||
{"AlbumId":131,"Title":"IV","ArtistId":22}
|
||||
{"AlbumId":132,"Title":"Led Zeppelin I","ArtistId":22}
|
||||
{"AlbumId":133,"Title":"Led Zeppelin II","ArtistId":22}
|
||||
{"AlbumId":134,"Title":"Led Zeppelin III","ArtistId":22}
|
||||
{"AlbumId":135,"Title":"Physical Graffiti [Disc 2]","ArtistId":22}
|
||||
{"AlbumId":136,"Title":"Presence","ArtistId":22}
|
||||
{"AlbumId":137,"Title":"The Song Remains The Same (Disc 1)","ArtistId":22}
|
||||
{"AlbumId":138,"Title":"The Song Remains The Same (Disc 2)","ArtistId":22}
|
||||
{"AlbumId":139,"Title":"A TempestadeTempestade Ou O Livro Dos Dias","ArtistId":99}
|
||||
{"AlbumId":140,"Title":"Mais Do Mesmo","ArtistId":99}
|
||||
{"AlbumId":141,"Title":"Greatest Hits","ArtistId":100}
|
||||
{"AlbumId":142,"Title":"Lulu Santos - RCA 100 Anos De Música - Álbum 01","ArtistId":101}
|
||||
{"AlbumId":143,"Title":"Lulu Santos - RCA 100 Anos De Música - Álbum 02","ArtistId":101}
|
||||
{"AlbumId":144,"Title":"Misplaced Childhood","ArtistId":102}
|
||||
{"AlbumId":145,"Title":"Barulhinho Bom","ArtistId":103}
|
||||
{"AlbumId":146,"Title":"Seek And Shall Find: More Of The Best (1963-1981)","ArtistId":104}
|
||||
{"AlbumId":147,"Title":"The Best Of Men At Work","ArtistId":105}
|
||||
{"AlbumId":148,"Title":"Black Album","ArtistId":50}
|
||||
{"AlbumId":149,"Title":"Garage Inc. (Disc 2)","ArtistId":50}
|
||||
{"AlbumId":150,"Title":"Kill 'Em All","ArtistId":50}
|
||||
{"AlbumId":151,"Title":"Load","ArtistId":50}
|
||||
{"AlbumId":152,"Title":"Master Of Puppets","ArtistId":50}
|
||||
{"AlbumId":153,"Title":"ReLoad","ArtistId":50}
|
||||
{"AlbumId":154,"Title":"Ride The Lightning","ArtistId":50}
|
||||
{"AlbumId":155,"Title":"St. Anger","ArtistId":50}
|
||||
{"AlbumId":156,"Title":"...And Justice For All","ArtistId":50}
|
||||
{"AlbumId":157,"Title":"Miles Ahead","ArtistId":68}
|
||||
{"AlbumId":158,"Title":"Milton Nascimento Ao Vivo","ArtistId":42}
|
||||
{"AlbumId":159,"Title":"Minas","ArtistId":42}
|
||||
{"AlbumId":160,"Title":"Ace Of Spades","ArtistId":106}
|
||||
{"AlbumId":161,"Title":"Demorou...","ArtistId":108}
|
||||
{"AlbumId":162,"Title":"Motley Crue Greatest Hits","ArtistId":109}
|
||||
{"AlbumId":163,"Title":"From The Muddy Banks Of The Wishkah [Live]","ArtistId":110}
|
||||
{"AlbumId":164,"Title":"Nevermind","ArtistId":110}
|
||||
{"AlbumId":165,"Title":"Compositores","ArtistId":111}
|
||||
{"AlbumId":166,"Title":"Olodum","ArtistId":112}
|
||||
{"AlbumId":167,"Title":"Acústico MTV","ArtistId":113}
|
||||
{"AlbumId":168,"Title":"Arquivo II","ArtistId":113}
|
||||
{"AlbumId":169,"Title":"Arquivo Os Paralamas Do Sucesso","ArtistId":113}
|
||||
{"AlbumId":170,"Title":"Bark at the Moon (Remastered)","ArtistId":114}
|
||||
{"AlbumId":171,"Title":"Blizzard of Ozz","ArtistId":114}
|
||||
{"AlbumId":172,"Title":"Diary of a Madman (Remastered)","ArtistId":114}
|
||||
{"AlbumId":173,"Title":"No More Tears (Remastered)","ArtistId":114}
|
||||
{"AlbumId":174,"Title":"Tribute","ArtistId":114}
|
||||
{"AlbumId":175,"Title":"Walking Into Clarksdale","ArtistId":115}
|
||||
{"AlbumId":176,"Title":"Original Soundtracks 1","ArtistId":116}
|
||||
{"AlbumId":177,"Title":"The Beast Live","ArtistId":117}
|
||||
{"AlbumId":178,"Title":"Live On Two Legs [Live]","ArtistId":118}
|
||||
{"AlbumId":179,"Title":"Pearl Jam","ArtistId":118}
|
||||
{"AlbumId":180,"Title":"Riot Act","ArtistId":118}
|
||||
{"AlbumId":181,"Title":"Ten","ArtistId":118}
|
||||
{"AlbumId":182,"Title":"Vs.","ArtistId":118}
|
||||
{"AlbumId":183,"Title":"Dark Side Of The Moon","ArtistId":120}
|
||||
{"AlbumId":184,"Title":"Os Căes Ladram Mas A Caravana Năo Pára","ArtistId":121}
|
||||
{"AlbumId":185,"Title":"Greatest Hits I","ArtistId":51}
|
||||
{"AlbumId":186,"Title":"News Of The World","ArtistId":51}
|
||||
{"AlbumId":187,"Title":"Out Of Time","ArtistId":122}
|
||||
{"AlbumId":188,"Title":"Green","ArtistId":124}
|
||||
{"AlbumId":189,"Title":"New Adventures In Hi-Fi","ArtistId":124}
|
||||
{"AlbumId":190,"Title":"The Best Of R.E.M.: The IRS Years","ArtistId":124}
|
||||
{"AlbumId":191,"Title":"Cesta Básica","ArtistId":125}
|
||||
{"AlbumId":192,"Title":"Raul Seixas","ArtistId":126}
|
||||
{"AlbumId":193,"Title":"Blood Sugar Sex Magik","ArtistId":127}
|
||||
{"AlbumId":194,"Title":"By The Way","ArtistId":127}
|
||||
{"AlbumId":195,"Title":"Californication","ArtistId":127}
|
||||
{"AlbumId":196,"Title":"Retrospective I (1974-1980)","ArtistId":128}
|
||||
{"AlbumId":197,"Title":"Santana - As Years Go By","ArtistId":59}
|
||||
{"AlbumId":198,"Title":"Santana Live","ArtistId":59}
|
||||
{"AlbumId":199,"Title":"Maquinarama","ArtistId":130}
|
||||
{"AlbumId":200,"Title":"O Samba Poconé","ArtistId":130}
|
||||
{"AlbumId":201,"Title":"Judas 0: B-Sides and Rarities","ArtistId":131}
|
||||
{"AlbumId":202,"Title":"Rotten Apples: Greatest Hits","ArtistId":131}
|
||||
{"AlbumId":203,"Title":"A-Sides","ArtistId":132}
|
||||
{"AlbumId":204,"Title":"Morning Dance","ArtistId":53}
|
||||
{"AlbumId":205,"Title":"In Step","ArtistId":133}
|
||||
{"AlbumId":206,"Title":"Core","ArtistId":134}
|
||||
{"AlbumId":207,"Title":"Mezmerize","ArtistId":135}
|
||||
{"AlbumId":208,"Title":"[1997] Black Light Syndrome","ArtistId":136}
|
||||
{"AlbumId":209,"Title":"Live [Disc 1]","ArtistId":137}
|
||||
{"AlbumId":210,"Title":"Live [Disc 2]","ArtistId":137}
|
||||
{"AlbumId":211,"Title":"The Singles","ArtistId":138}
|
||||
{"AlbumId":212,"Title":"Beyond Good And Evil","ArtistId":139}
|
||||
{"AlbumId":213,"Title":"Pure Cult: The Best Of The Cult (For Rockers, Ravers, Lovers & Sinners) [UK]","ArtistId":139}
|
||||
{"AlbumId":214,"Title":"The Doors","ArtistId":140}
|
||||
{"AlbumId":215,"Title":"The Police Greatest Hits","ArtistId":141}
|
||||
{"AlbumId":216,"Title":"Hot Rocks, 1964-1971 (Disc 1)","ArtistId":142}
|
||||
{"AlbumId":217,"Title":"No Security","ArtistId":142}
|
||||
{"AlbumId":218,"Title":"Voodoo Lounge","ArtistId":142}
|
||||
{"AlbumId":219,"Title":"Tangents","ArtistId":143}
|
||||
{"AlbumId":220,"Title":"Transmission","ArtistId":143}
|
||||
{"AlbumId":221,"Title":"My Generation - The Very Best Of The Who","ArtistId":144}
|
||||
{"AlbumId":222,"Title":"Serie Sem Limite (Disc 1)","ArtistId":145}
|
||||
{"AlbumId":223,"Title":"Serie Sem Limite (Disc 2)","ArtistId":145}
|
||||
{"AlbumId":224,"Title":"Acústico","ArtistId":146}
|
||||
{"AlbumId":225,"Title":"Volume Dois","ArtistId":146}
|
||||
{"AlbumId":226,"Title":"Battlestar Galactica: The Story So Far","ArtistId":147}
|
||||
{"AlbumId":227,"Title":"Battlestar Galactica, Season 3","ArtistId":147}
|
||||
{"AlbumId":228,"Title":"Heroes, Season 1","ArtistId":148}
|
||||
{"AlbumId":229,"Title":"Lost, Season 3","ArtistId":149}
|
||||
{"AlbumId":230,"Title":"Lost, Season 1","ArtistId":149}
|
||||
{"AlbumId":231,"Title":"Lost, Season 2","ArtistId":149}
|
||||
{"AlbumId":232,"Title":"Achtung Baby","ArtistId":150}
|
||||
{"AlbumId":233,"Title":"All That You Can't Leave Behind","ArtistId":150}
|
||||
{"AlbumId":234,"Title":"B-Sides 1980-1990","ArtistId":150}
|
||||
{"AlbumId":235,"Title":"How To Dismantle An Atomic Bomb","ArtistId":150}
|
||||
{"AlbumId":236,"Title":"Pop","ArtistId":150}
|
||||
{"AlbumId":237,"Title":"Rattle And Hum","ArtistId":150}
|
||||
{"AlbumId":238,"Title":"The Best Of 1980-1990","ArtistId":150}
|
||||
{"AlbumId":239,"Title":"War","ArtistId":150}
|
||||
{"AlbumId":240,"Title":"Zooropa","ArtistId":150}
|
||||
{"AlbumId":241,"Title":"UB40 The Best Of - Volume Two [UK]","ArtistId":151}
|
||||
{"AlbumId":242,"Title":"Diver Down","ArtistId":152}
|
||||
{"AlbumId":243,"Title":"The Best Of Van Halen, Vol. I","ArtistId":152}
|
||||
{"AlbumId":244,"Title":"Van Halen","ArtistId":152}
|
||||
{"AlbumId":245,"Title":"Van Halen III","ArtistId":152}
|
||||
{"AlbumId":246,"Title":"Contraband","ArtistId":153}
|
||||
{"AlbumId":247,"Title":"Vinicius De Moraes","ArtistId":72}
|
||||
{"AlbumId":248,"Title":"Ao Vivo [IMPORT]","ArtistId":155}
|
||||
{"AlbumId":249,"Title":"The Office, Season 1","ArtistId":156}
|
||||
{"AlbumId":250,"Title":"The Office, Season 2","ArtistId":156}
|
||||
{"AlbumId":251,"Title":"The Office, Season 3","ArtistId":156}
|
||||
{"AlbumId":252,"Title":"Un-Led-Ed","ArtistId":157}
|
||||
{"AlbumId":253,"Title":"Battlestar Galactica (Classic), Season 1","ArtistId":158}
|
||||
{"AlbumId":254,"Title":"Aquaman","ArtistId":159}
|
||||
{"AlbumId":255,"Title":"Instant Karma: The Amnesty International Campaign to Save Darfur","ArtistId":150}
|
||||
{"AlbumId":256,"Title":"Speak of the Devil","ArtistId":114}
|
||||
{"AlbumId":257,"Title":"20th Century Masters - The Millennium Collection: The Best of Scorpions","ArtistId":179}
|
||||
{"AlbumId":258,"Title":"House of Pain","ArtistId":180}
|
||||
{"AlbumId":259,"Title":"Radio Brasil (O Som da Jovem Vanguarda) - Seleccao de Henrique Amaro","ArtistId":36}
|
||||
{"AlbumId":260,"Title":"Cake: B-Sides and Rarities","ArtistId":196}
|
||||
{"AlbumId":261,"Title":"LOST, Season 4","ArtistId":149}
|
||||
{"AlbumId":262,"Title":"Quiet Songs","ArtistId":197}
|
||||
{"AlbumId":263,"Title":"Muso Ko","ArtistId":198}
|
||||
{"AlbumId":264,"Title":"Realize","ArtistId":199}
|
||||
{"AlbumId":265,"Title":"Every Kind of Light","ArtistId":200}
|
||||
{"AlbumId":266,"Title":"Duos II","ArtistId":201}
|
||||
{"AlbumId":267,"Title":"Worlds","ArtistId":202}
|
||||
{"AlbumId":268,"Title":"The Best of Beethoven","ArtistId":203}
|
||||
{"AlbumId":269,"Title":"Temple of the Dog","ArtistId":204}
|
||||
{"AlbumId":270,"Title":"Carry On","ArtistId":205}
|
||||
{"AlbumId":271,"Title":"Revelations","ArtistId":8}
|
||||
{"AlbumId":272,"Title":"Adorate Deum: Gregorian Chant from the Proper of the Mass","ArtistId":206}
|
||||
{"AlbumId":273,"Title":"Allegri: Miserere","ArtistId":207}
|
||||
{"AlbumId":274,"Title":"Pachelbel: Canon & Gigue","ArtistId":208}
|
||||
{"AlbumId":275,"Title":"Vivaldi: The Four Seasons","ArtistId":209}
|
||||
{"AlbumId":276,"Title":"Bach: Violin Concertos","ArtistId":210}
|
||||
{"AlbumId":277,"Title":"Bach: Goldberg Variations","ArtistId":211}
|
||||
{"AlbumId":278,"Title":"Bach: The Cello Suites","ArtistId":212}
|
||||
{"AlbumId":279,"Title":"Handel: The Messiah (Highlights)","ArtistId":213}
|
||||
{"AlbumId":280,"Title":"The World of Classical Favourites","ArtistId":214}
|
||||
{"AlbumId":281,"Title":"Sir Neville Marriner: A Celebration","ArtistId":215}
|
||||
{"AlbumId":282,"Title":"Mozart: Wind Concertos","ArtistId":216}
|
||||
{"AlbumId":283,"Title":"Haydn: Symphonies 99 - 104","ArtistId":217}
|
||||
{"AlbumId":284,"Title":"Beethoven: Symhonies Nos. 5 & 6","ArtistId":218}
|
||||
{"AlbumId":285,"Title":"A Soprano Inspired","ArtistId":219}
|
||||
{"AlbumId":286,"Title":"Great Opera Choruses","ArtistId":220}
|
||||
{"AlbumId":287,"Title":"Wagner: Favourite Overtures","ArtistId":221}
|
||||
{"AlbumId":288,"Title":"Fauré: Requiem, Ravel: Pavane & Others","ArtistId":222}
|
||||
{"AlbumId":289,"Title":"Tchaikovsky: The Nutcracker","ArtistId":223}
|
||||
{"AlbumId":290,"Title":"The Last Night of the Proms","ArtistId":224}
|
||||
{"AlbumId":291,"Title":"Puccini: Madama Butterfly - Highlights","ArtistId":225}
|
||||
{"AlbumId":292,"Title":"Holst: The Planets, Op. 32 & Vaughan Williams: Fantasies","ArtistId":226}
|
||||
{"AlbumId":293,"Title":"Pavarotti's Opera Made Easy","ArtistId":227}
|
||||
{"AlbumId":294,"Title":"Great Performances - Barber's Adagio and Other Romantic Favorites for Strings","ArtistId":228}
|
||||
{"AlbumId":295,"Title":"Carmina Burana","ArtistId":229}
|
||||
{"AlbumId":296,"Title":"A Copland Celebration, Vol. I","ArtistId":230}
|
||||
{"AlbumId":297,"Title":"Bach: Toccata & Fugue in D Minor","ArtistId":231}
|
||||
{"AlbumId":298,"Title":"Prokofiev: Symphony No.1","ArtistId":232}
|
||||
{"AlbumId":299,"Title":"Scheherazade","ArtistId":233}
|
||||
{"AlbumId":300,"Title":"Bach: The Brandenburg Concertos","ArtistId":234}
|
||||
{"AlbumId":301,"Title":"Chopin: Piano Concertos Nos. 1 & 2","ArtistId":235}
|
||||
{"AlbumId":302,"Title":"Mascagni: Cavalleria Rusticana","ArtistId":236}
|
||||
{"AlbumId":303,"Title":"Sibelius: Finlandia","ArtistId":237}
|
||||
{"AlbumId":304,"Title":"Beethoven Piano Sonatas: Moonlight & Pastorale","ArtistId":238}
|
||||
{"AlbumId":305,"Title":"Great Recordings of the Century - Mahler: Das Lied von der Erde","ArtistId":240}
|
||||
{"AlbumId":306,"Title":"Elgar: Cello Concerto & Vaughan Williams: Fantasias","ArtistId":241}
|
||||
{"AlbumId":307,"Title":"Adams, John: The Chairman Dances","ArtistId":242}
|
||||
{"AlbumId":308,"Title":"Tchaikovsky: 1812 Festival Overture, Op.49, Capriccio Italien & Beethoven: Wellington's Victory","ArtistId":243}
|
||||
{"AlbumId":309,"Title":"Palestrina: Missa Papae Marcelli & Allegri: Miserere","ArtistId":244}
|
||||
{"AlbumId":310,"Title":"Prokofiev: Romeo & Juliet","ArtistId":245}
|
||||
{"AlbumId":311,"Title":"Strauss: Waltzes","ArtistId":226}
|
||||
{"AlbumId":312,"Title":"Berlioz: Symphonie Fantastique","ArtistId":245}
|
||||
{"AlbumId":313,"Title":"Bizet: Carmen Highlights","ArtistId":246}
|
||||
{"AlbumId":314,"Title":"English Renaissance","ArtistId":247}
|
||||
{"AlbumId":315,"Title":"Handel: Music for the Royal Fireworks (Original Version 1749)","ArtistId":208}
|
||||
{"AlbumId":316,"Title":"Grieg: Peer Gynt Suites & Sibelius: Pelléas et Mélisande","ArtistId":248}
|
||||
{"AlbumId":317,"Title":"Mozart Gala: Famous Arias","ArtistId":249}
|
||||
{"AlbumId":318,"Title":"SCRIABIN: Vers la flamme","ArtistId":250}
|
||||
{"AlbumId":319,"Title":"Armada: Music from the Courts of England and Spain","ArtistId":251}
|
||||
{"AlbumId":320,"Title":"Mozart: Symphonies Nos. 40 & 41","ArtistId":248}
|
||||
{"AlbumId":321,"Title":"Back to Black","ArtistId":252}
|
||||
{"AlbumId":322,"Title":"Frank","ArtistId":252}
|
||||
{"AlbumId":323,"Title":"Carried to Dust (Bonus Track Version)","ArtistId":253}
|
||||
{"AlbumId":324,"Title":"Beethoven: Symphony No. 6 'Pastoral' Etc.","ArtistId":254}
|
||||
{"AlbumId":325,"Title":"Bartok: Violin & Viola Concertos","ArtistId":255}
|
||||
{"AlbumId":326,"Title":"Mendelssohn: A Midsummer Night's Dream","ArtistId":256}
|
||||
{"AlbumId":327,"Title":"Bach: Orchestral Suites Nos. 1 - 4","ArtistId":257}
|
||||
{"AlbumId":328,"Title":"Charpentier: Divertissements, Airs & Concerts","ArtistId":258}
|
||||
{"AlbumId":329,"Title":"South American Getaway","ArtistId":259}
|
||||
{"AlbumId":330,"Title":"Górecki: Symphony No. 3","ArtistId":260}
|
||||
{"AlbumId":331,"Title":"Purcell: The Fairy Queen","ArtistId":261}
|
||||
{"AlbumId":332,"Title":"The Ultimate Relexation Album","ArtistId":262}
|
||||
{"AlbumId":333,"Title":"Purcell: Music for the Queen Mary","ArtistId":263}
|
||||
{"AlbumId":334,"Title":"Weill: The Seven Deadly Sins","ArtistId":264}
|
||||
{"AlbumId":335,"Title":"J.S. Bach: Chaconne, Suite in E Minor, Partita in E Major & Prelude, Fugue and Allegro","ArtistId":265}
|
||||
{"AlbumId":336,"Title":"Prokofiev: Symphony No.5 & Stravinksy: Le Sacre Du Printemps","ArtistId":248}
|
||||
{"AlbumId":337,"Title":"Szymanowski: Piano Works, Vol. 1","ArtistId":266}
|
||||
{"AlbumId":338,"Title":"Nielsen: The Six Symphonies","ArtistId":267}
|
||||
{"AlbumId":339,"Title":"Great Recordings of the Century: Paganini's 24 Caprices","ArtistId":268}
|
||||
{"AlbumId":340,"Title":"Liszt - 12 Études D'Execution Transcendante","ArtistId":269}
|
||||
{"AlbumId":341,"Title":"Great Recordings of the Century - Shubert: Schwanengesang, 4 Lieder","ArtistId":270}
|
||||
{"AlbumId":342,"Title":"Locatelli: Concertos for Violin, Strings and Continuo, Vol. 3","ArtistId":271}
|
||||
{"AlbumId":343,"Title":"Respighi:Pines of Rome","ArtistId":226}
|
||||
{"AlbumId":344,"Title":"Schubert: The Late String Quartets & String Quintet (3 CD's)","ArtistId":272}
|
||||
{"AlbumId":345,"Title":"Monteverdi: L'Orfeo","ArtistId":273}
|
||||
{"AlbumId":346,"Title":"Mozart: Chamber Music","ArtistId":274}
|
||||
{"AlbumId":347,"Title":"Koyaanisqatsi (Soundtrack from the Motion Picture)","ArtistId":275}
|
||||
275
e2e-tests/data/chinook-jsonl/Artist.jsonl
Normal file
275
e2e-tests/data/chinook-jsonl/Artist.jsonl
Normal file
@@ -0,0 +1,275 @@
|
||||
{"ArtistId":1,"Name":"AC/DC"}
|
||||
{"ArtistId":2,"Name":"Accept"}
|
||||
{"ArtistId":3,"Name":"Aerosmith"}
|
||||
{"ArtistId":4,"Name":"Alanis Morissette"}
|
||||
{"ArtistId":5,"Name":"Alice In Chains"}
|
||||
{"ArtistId":6,"Name":"Antônio Carlos Jobim"}
|
||||
{"ArtistId":7,"Name":"Apocalyptica"}
|
||||
{"ArtistId":8,"Name":"Audioslave"}
|
||||
{"ArtistId":9,"Name":"BackBeat"}
|
||||
{"ArtistId":10,"Name":"Billy Cobham"}
|
||||
{"ArtistId":11,"Name":"Black Label Society"}
|
||||
{"ArtistId":12,"Name":"Black Sabbath"}
|
||||
{"ArtistId":13,"Name":"Body Count"}
|
||||
{"ArtistId":14,"Name":"Bruce Dickinson"}
|
||||
{"ArtistId":15,"Name":"Buddy Guy"}
|
||||
{"ArtistId":16,"Name":"Caetano Veloso"}
|
||||
{"ArtistId":17,"Name":"Chico Buarque"}
|
||||
{"ArtistId":18,"Name":"Chico Science & Naçăo Zumbi"}
|
||||
{"ArtistId":19,"Name":"Cidade Negra"}
|
||||
{"ArtistId":20,"Name":"Cláudio Zoli"}
|
||||
{"ArtistId":21,"Name":"Various Artists"}
|
||||
{"ArtistId":22,"Name":"Led Zeppelin"}
|
||||
{"ArtistId":23,"Name":"Frank Zappa & Captain Beefheart"}
|
||||
{"ArtistId":24,"Name":"Marcos Valle"}
|
||||
{"ArtistId":25,"Name":"Milton Nascimento & Bebeto"}
|
||||
{"ArtistId":26,"Name":"Azymuth"}
|
||||
{"ArtistId":27,"Name":"Gilberto Gil"}
|
||||
{"ArtistId":28,"Name":"Joăo Gilberto"}
|
||||
{"ArtistId":29,"Name":"Bebel Gilberto"}
|
||||
{"ArtistId":30,"Name":"Jorge Vercilo"}
|
||||
{"ArtistId":31,"Name":"Baby Consuelo"}
|
||||
{"ArtistId":32,"Name":"Ney Matogrosso"}
|
||||
{"ArtistId":33,"Name":"Luiz Melodia"}
|
||||
{"ArtistId":34,"Name":"Nando Reis"}
|
||||
{"ArtistId":35,"Name":"Pedro Luís & A Parede"}
|
||||
{"ArtistId":36,"Name":"O Rappa"}
|
||||
{"ArtistId":37,"Name":"Ed Motta"}
|
||||
{"ArtistId":38,"Name":"Banda Black Rio"}
|
||||
{"ArtistId":39,"Name":"Fernanda Porto"}
|
||||
{"ArtistId":40,"Name":"Os Cariocas"}
|
||||
{"ArtistId":41,"Name":"Elis Regina"}
|
||||
{"ArtistId":42,"Name":"Milton Nascimento"}
|
||||
{"ArtistId":43,"Name":"A Cor Do Som"}
|
||||
{"ArtistId":44,"Name":"Kid Abelha"}
|
||||
{"ArtistId":45,"Name":"Sandra De Sá"}
|
||||
{"ArtistId":46,"Name":"Jorge Ben"}
|
||||
{"ArtistId":47,"Name":"Hermeto Pascoal"}
|
||||
{"ArtistId":48,"Name":"Barăo Vermelho"}
|
||||
{"ArtistId":49,"Name":"Edson, DJ Marky & DJ Patife Featuring Fernanda Porto"}
|
||||
{"ArtistId":50,"Name":"Metallica"}
|
||||
{"ArtistId":51,"Name":"Queen"}
|
||||
{"ArtistId":52,"Name":"Kiss"}
|
||||
{"ArtistId":53,"Name":"Spyro Gyra"}
|
||||
{"ArtistId":54,"Name":"Green Day"}
|
||||
{"ArtistId":55,"Name":"David Coverdale"}
|
||||
{"ArtistId":56,"Name":"Gonzaguinha"}
|
||||
{"ArtistId":57,"Name":"Os Mutantes"}
|
||||
{"ArtistId":58,"Name":"Deep Purple"}
|
||||
{"ArtistId":59,"Name":"Santana"}
|
||||
{"ArtistId":60,"Name":"Santana Feat. Dave Matthews"}
|
||||
{"ArtistId":61,"Name":"Santana Feat. Everlast"}
|
||||
{"ArtistId":62,"Name":"Santana Feat. Rob Thomas"}
|
||||
{"ArtistId":63,"Name":"Santana Feat. Lauryn Hill & Cee-Lo"}
|
||||
{"ArtistId":64,"Name":"Santana Feat. The Project G&B"}
|
||||
{"ArtistId":65,"Name":"Santana Feat. Maná"}
|
||||
{"ArtistId":66,"Name":"Santana Feat. Eagle-Eye Cherry"}
|
||||
{"ArtistId":67,"Name":"Santana Feat. Eric Clapton"}
|
||||
{"ArtistId":68,"Name":"Miles Davis"}
|
||||
{"ArtistId":69,"Name":"Gene Krupa"}
|
||||
{"ArtistId":70,"Name":"Toquinho & Vinícius"}
|
||||
{"ArtistId":71,"Name":"Vinícius De Moraes & Baden Powell"}
|
||||
{"ArtistId":72,"Name":"Vinícius De Moraes"}
|
||||
{"ArtistId":73,"Name":"Vinícius E Qurteto Em Cy"}
|
||||
{"ArtistId":74,"Name":"Vinícius E Odette Lara"}
|
||||
{"ArtistId":75,"Name":"Vinicius, Toquinho & Quarteto Em Cy"}
|
||||
{"ArtistId":76,"Name":"Creedence Clearwater Revival"}
|
||||
{"ArtistId":77,"Name":"Cássia Eller"}
|
||||
{"ArtistId":78,"Name":"Def Leppard"}
|
||||
{"ArtistId":79,"Name":"Dennis Chambers"}
|
||||
{"ArtistId":80,"Name":"Djavan"}
|
||||
{"ArtistId":81,"Name":"Eric Clapton"}
|
||||
{"ArtistId":82,"Name":"Faith No More"}
|
||||
{"ArtistId":83,"Name":"Falamansa"}
|
||||
{"ArtistId":84,"Name":"Foo Fighters"}
|
||||
{"ArtistId":85,"Name":"Frank Sinatra"}
|
||||
{"ArtistId":86,"Name":"Funk Como Le Gusta"}
|
||||
{"ArtistId":87,"Name":"Godsmack"}
|
||||
{"ArtistId":88,"Name":"Guns N' Roses"}
|
||||
{"ArtistId":89,"Name":"Incognito"}
|
||||
{"ArtistId":90,"Name":"Iron Maiden"}
|
||||
{"ArtistId":91,"Name":"James Brown"}
|
||||
{"ArtistId":92,"Name":"Jamiroquai"}
|
||||
{"ArtistId":93,"Name":"JET"}
|
||||
{"ArtistId":94,"Name":"Jimi Hendrix"}
|
||||
{"ArtistId":95,"Name":"Joe Satriani"}
|
||||
{"ArtistId":96,"Name":"Jota Quest"}
|
||||
{"ArtistId":97,"Name":"Joăo Suplicy"}
|
||||
{"ArtistId":98,"Name":"Judas Priest"}
|
||||
{"ArtistId":99,"Name":"Legiăo Urbana"}
|
||||
{"ArtistId":100,"Name":"Lenny Kravitz"}
|
||||
{"ArtistId":101,"Name":"Lulu Santos"}
|
||||
{"ArtistId":102,"Name":"Marillion"}
|
||||
{"ArtistId":103,"Name":"Marisa Monte"}
|
||||
{"ArtistId":104,"Name":"Marvin Gaye"}
|
||||
{"ArtistId":105,"Name":"Men At Work"}
|
||||
{"ArtistId":106,"Name":"Motörhead"}
|
||||
{"ArtistId":107,"Name":"Motörhead & Girlschool"}
|
||||
{"ArtistId":108,"Name":"Mônica Marianno"}
|
||||
{"ArtistId":109,"Name":"Mötley Crüe"}
|
||||
{"ArtistId":110,"Name":"Nirvana"}
|
||||
{"ArtistId":111,"Name":"O Terço"}
|
||||
{"ArtistId":112,"Name":"Olodum"}
|
||||
{"ArtistId":113,"Name":"Os Paralamas Do Sucesso"}
|
||||
{"ArtistId":114,"Name":"Ozzy Osbourne"}
|
||||
{"ArtistId":115,"Name":"Page & Plant"}
|
||||
{"ArtistId":116,"Name":"Passengers"}
|
||||
{"ArtistId":117,"Name":"Paul D'Ianno"}
|
||||
{"ArtistId":118,"Name":"Pearl Jam"}
|
||||
{"ArtistId":119,"Name":"Peter Tosh"}
|
||||
{"ArtistId":120,"Name":"Pink Floyd"}
|
||||
{"ArtistId":121,"Name":"Planet Hemp"}
|
||||
{"ArtistId":122,"Name":"R.E.M. Feat. Kate Pearson"}
|
||||
{"ArtistId":123,"Name":"R.E.M. Feat. KRS-One"}
|
||||
{"ArtistId":124,"Name":"R.E.M."}
|
||||
{"ArtistId":125,"Name":"Raimundos"}
|
||||
{"ArtistId":126,"Name":"Raul Seixas"}
|
||||
{"ArtistId":127,"Name":"Red Hot Chili Peppers"}
|
||||
{"ArtistId":128,"Name":"Rush"}
|
||||
{"ArtistId":129,"Name":"Simply Red"}
|
||||
{"ArtistId":130,"Name":"Skank"}
|
||||
{"ArtistId":131,"Name":"Smashing Pumpkins"}
|
||||
{"ArtistId":132,"Name":"Soundgarden"}
|
||||
{"ArtistId":133,"Name":"Stevie Ray Vaughan & Double Trouble"}
|
||||
{"ArtistId":134,"Name":"Stone Temple Pilots"}
|
||||
{"ArtistId":135,"Name":"System Of A Down"}
|
||||
{"ArtistId":136,"Name":"Terry Bozzio, Tony Levin & Steve Stevens"}
|
||||
{"ArtistId":137,"Name":"The Black Crowes"}
|
||||
{"ArtistId":138,"Name":"The Clash"}
|
||||
{"ArtistId":139,"Name":"The Cult"}
|
||||
{"ArtistId":140,"Name":"The Doors"}
|
||||
{"ArtistId":141,"Name":"The Police"}
|
||||
{"ArtistId":142,"Name":"The Rolling Stones"}
|
||||
{"ArtistId":143,"Name":"The Tea Party"}
|
||||
{"ArtistId":144,"Name":"The Who"}
|
||||
{"ArtistId":145,"Name":"Tim Maia"}
|
||||
{"ArtistId":146,"Name":"Tităs"}
|
||||
{"ArtistId":147,"Name":"Battlestar Galactica"}
|
||||
{"ArtistId":148,"Name":"Heroes"}
|
||||
{"ArtistId":149,"Name":"Lost"}
|
||||
{"ArtistId":150,"Name":"U2"}
|
||||
{"ArtistId":151,"Name":"UB40"}
|
||||
{"ArtistId":152,"Name":"Van Halen"}
|
||||
{"ArtistId":153,"Name":"Velvet Revolver"}
|
||||
{"ArtistId":154,"Name":"Whitesnake"}
|
||||
{"ArtistId":155,"Name":"Zeca Pagodinho"}
|
||||
{"ArtistId":156,"Name":"The Office"}
|
||||
{"ArtistId":157,"Name":"Dread Zeppelin"}
|
||||
{"ArtistId":158,"Name":"Battlestar Galactica (Classic)"}
|
||||
{"ArtistId":159,"Name":"Aquaman"}
|
||||
{"ArtistId":160,"Name":"Christina Aguilera featuring BigElf"}
|
||||
{"ArtistId":161,"Name":"Aerosmith & Sierra Leone's Refugee Allstars"}
|
||||
{"ArtistId":162,"Name":"Los Lonely Boys"}
|
||||
{"ArtistId":163,"Name":"Corinne Bailey Rae"}
|
||||
{"ArtistId":164,"Name":"Dhani Harrison & Jakob Dylan"}
|
||||
{"ArtistId":165,"Name":"Jackson Browne"}
|
||||
{"ArtistId":166,"Name":"Avril Lavigne"}
|
||||
{"ArtistId":167,"Name":"Big & Rich"}
|
||||
{"ArtistId":168,"Name":"Youssou N'Dour"}
|
||||
{"ArtistId":169,"Name":"Black Eyed Peas"}
|
||||
{"ArtistId":170,"Name":"Jack Johnson"}
|
||||
{"ArtistId":171,"Name":"Ben Harper"}
|
||||
{"ArtistId":172,"Name":"Snow Patrol"}
|
||||
{"ArtistId":173,"Name":"Matisyahu"}
|
||||
{"ArtistId":174,"Name":"The Postal Service"}
|
||||
{"ArtistId":175,"Name":"Jaguares"}
|
||||
{"ArtistId":176,"Name":"The Flaming Lips"}
|
||||
{"ArtistId":177,"Name":"Jack's Mannequin & Mick Fleetwood"}
|
||||
{"ArtistId":178,"Name":"Regina Spektor"}
|
||||
{"ArtistId":179,"Name":"Scorpions"}
|
||||
{"ArtistId":180,"Name":"House Of Pain"}
|
||||
{"ArtistId":181,"Name":"Xis"}
|
||||
{"ArtistId":182,"Name":"Nega Gizza"}
|
||||
{"ArtistId":183,"Name":"Gustavo & Andres Veiga & Salazar"}
|
||||
{"ArtistId":184,"Name":"Rodox"}
|
||||
{"ArtistId":185,"Name":"Charlie Brown Jr."}
|
||||
{"ArtistId":186,"Name":"Pedro Luís E A Parede"}
|
||||
{"ArtistId":187,"Name":"Los Hermanos"}
|
||||
{"ArtistId":188,"Name":"Mundo Livre S/A"}
|
||||
{"ArtistId":189,"Name":"Otto"}
|
||||
{"ArtistId":190,"Name":"Instituto"}
|
||||
{"ArtistId":191,"Name":"Naçăo Zumbi"}
|
||||
{"ArtistId":192,"Name":"DJ Dolores & Orchestra Santa Massa"}
|
||||
{"ArtistId":193,"Name":"Seu Jorge"}
|
||||
{"ArtistId":194,"Name":"Sabotage E Instituto"}
|
||||
{"ArtistId":195,"Name":"Stereo Maracana"}
|
||||
{"ArtistId":196,"Name":"Cake"}
|
||||
{"ArtistId":197,"Name":"Aisha Duo"}
|
||||
{"ArtistId":198,"Name":"Habib Koité and Bamada"}
|
||||
{"ArtistId":199,"Name":"Karsh Kale"}
|
||||
{"ArtistId":200,"Name":"The Posies"}
|
||||
{"ArtistId":201,"Name":"Luciana Souza/Romero Lubambo"}
|
||||
{"ArtistId":202,"Name":"Aaron Goldberg"}
|
||||
{"ArtistId":203,"Name":"Nicolaus Esterhazy Sinfonia"}
|
||||
{"ArtistId":204,"Name":"Temple of the Dog"}
|
||||
{"ArtistId":205,"Name":"Chris Cornell"}
|
||||
{"ArtistId":206,"Name":"Alberto Turco & Nova Schola Gregoriana"}
|
||||
{"ArtistId":207,"Name":"Richard Marlow & The Choir of Trinity College, Cambridge"}
|
||||
{"ArtistId":208,"Name":"English Concert & Trevor Pinnock"}
|
||||
{"ArtistId":209,"Name":"Anne-Sophie Mutter, Herbert Von Karajan & Wiener Philharmoniker"}
|
||||
{"ArtistId":210,"Name":"Hilary Hahn, Jeffrey Kahane, Los Angeles Chamber Orchestra & Margaret Batjer"}
|
||||
{"ArtistId":211,"Name":"Wilhelm Kempff"}
|
||||
{"ArtistId":212,"Name":"Yo-Yo Ma"}
|
||||
{"ArtistId":213,"Name":"Scholars Baroque Ensemble"}
|
||||
{"ArtistId":214,"Name":"Academy of St. Martin in the Fields & Sir Neville Marriner"}
|
||||
{"ArtistId":215,"Name":"Academy of St. Martin in the Fields Chamber Ensemble & Sir Neville Marriner"}
|
||||
{"ArtistId":216,"Name":"Berliner Philharmoniker, Claudio Abbado & Sabine Meyer"}
|
||||
{"ArtistId":217,"Name":"Royal Philharmonic Orchestra & Sir Thomas Beecham"}
|
||||
{"ArtistId":218,"Name":"Orchestre Révolutionnaire et Romantique & John Eliot Gardiner"}
|
||||
{"ArtistId":219,"Name":"Britten Sinfonia, Ivor Bolton & Lesley Garrett"}
|
||||
{"ArtistId":220,"Name":"Chicago Symphony Chorus, Chicago Symphony Orchestra & Sir Georg Solti"}
|
||||
{"ArtistId":221,"Name":"Sir Georg Solti & Wiener Philharmoniker"}
|
||||
{"ArtistId":222,"Name":"Academy of St. Martin in the Fields, John Birch, Sir Neville Marriner & Sylvia McNair"}
|
||||
{"ArtistId":223,"Name":"London Symphony Orchestra & Sir Charles Mackerras"}
|
||||
{"ArtistId":224,"Name":"Barry Wordsworth & BBC Concert Orchestra"}
|
||||
{"ArtistId":225,"Name":"Herbert Von Karajan, Mirella Freni & Wiener Philharmoniker"}
|
||||
{"ArtistId":226,"Name":"Eugene Ormandy"}
|
||||
{"ArtistId":227,"Name":"Luciano Pavarotti"}
|
||||
{"ArtistId":228,"Name":"Leonard Bernstein & New York Philharmonic"}
|
||||
{"ArtistId":229,"Name":"Boston Symphony Orchestra & Seiji Ozawa"}
|
||||
{"ArtistId":230,"Name":"Aaron Copland & London Symphony Orchestra"}
|
||||
{"ArtistId":231,"Name":"Ton Koopman"}
|
||||
{"ArtistId":232,"Name":"Sergei Prokofiev & Yuri Temirkanov"}
|
||||
{"ArtistId":233,"Name":"Chicago Symphony Orchestra & Fritz Reiner"}
|
||||
{"ArtistId":234,"Name":"Orchestra of The Age of Enlightenment"}
|
||||
{"ArtistId":235,"Name":"Emanuel Ax, Eugene Ormandy & Philadelphia Orchestra"}
|
||||
{"ArtistId":236,"Name":"James Levine"}
|
||||
{"ArtistId":237,"Name":"Berliner Philharmoniker & Hans Rosbaud"}
|
||||
{"ArtistId":238,"Name":"Maurizio Pollini"}
|
||||
{"ArtistId":239,"Name":"Academy of St. Martin in the Fields, Sir Neville Marriner & William Bennett"}
|
||||
{"ArtistId":240,"Name":"Gustav Mahler"}
|
||||
{"ArtistId":241,"Name":"Felix Schmidt, London Symphony Orchestra & Rafael Frühbeck de Burgos"}
|
||||
{"ArtistId":242,"Name":"Edo de Waart & San Francisco Symphony"}
|
||||
{"ArtistId":243,"Name":"Antal Doráti & London Symphony Orchestra"}
|
||||
{"ArtistId":244,"Name":"Choir Of Westminster Abbey & Simon Preston"}
|
||||
{"ArtistId":245,"Name":"Michael Tilson Thomas & San Francisco Symphony"}
|
||||
{"ArtistId":246,"Name":"Chor der Wiener Staatsoper, Herbert Von Karajan & Wiener Philharmoniker"}
|
||||
{"ArtistId":247,"Name":"The King's Singers"}
|
||||
{"ArtistId":248,"Name":"Berliner Philharmoniker & Herbert Von Karajan"}
|
||||
{"ArtistId":249,"Name":"Sir Georg Solti, Sumi Jo & Wiener Philharmoniker"}
|
||||
{"ArtistId":250,"Name":"Christopher O'Riley"}
|
||||
{"ArtistId":251,"Name":"Fretwork"}
|
||||
{"ArtistId":252,"Name":"Amy Winehouse"}
|
||||
{"ArtistId":253,"Name":"Calexico"}
|
||||
{"ArtistId":254,"Name":"Otto Klemperer & Philharmonia Orchestra"}
|
||||
{"ArtistId":255,"Name":"Yehudi Menuhin"}
|
||||
{"ArtistId":256,"Name":"Philharmonia Orchestra & Sir Neville Marriner"}
|
||||
{"ArtistId":257,"Name":"Academy of St. Martin in the Fields, Sir Neville Marriner & Thurston Dart"}
|
||||
{"ArtistId":258,"Name":"Les Arts Florissants & William Christie"}
|
||||
{"ArtistId":259,"Name":"The 12 Cellists of The Berlin Philharmonic"}
|
||||
{"ArtistId":260,"Name":"Adrian Leaper & Doreen de Feis"}
|
||||
{"ArtistId":261,"Name":"Roger Norrington, London Classical Players"}
|
||||
{"ArtistId":262,"Name":"Charles Dutoit & L'Orchestre Symphonique de Montréal"}
|
||||
{"ArtistId":263,"Name":"Equale Brass Ensemble, John Eliot Gardiner & Munich Monteverdi Orchestra and Choir"}
|
||||
{"ArtistId":264,"Name":"Kent Nagano and Orchestre de l'Opéra de Lyon"}
|
||||
{"ArtistId":265,"Name":"Julian Bream"}
|
||||
{"ArtistId":266,"Name":"Martin Roscoe"}
|
||||
{"ArtistId":267,"Name":"Göteborgs Symfoniker & Neeme Järvi"}
|
||||
{"ArtistId":268,"Name":"Itzhak Perlman"}
|
||||
{"ArtistId":269,"Name":"Michele Campanella"}
|
||||
{"ArtistId":270,"Name":"Gerald Moore"}
|
||||
{"ArtistId":271,"Name":"Mela Tenenbaum, Pro Musica Prague & Richard Kapp"}
|
||||
{"ArtistId":272,"Name":"Emerson String Quartet"}
|
||||
{"ArtistId":273,"Name":"C. Monteverdi, Nigel Rogers - Chiaroscuro; London Baroque; London Cornett & Sackbu"}
|
||||
{"ArtistId":274,"Name":"Nash Ensemble"}
|
||||
{"ArtistId":275,"Name":"Philip Glass Ensemble"}
|
||||
59
e2e-tests/data/chinook-jsonl/Customer.jsonl
Normal file
59
e2e-tests/data/chinook-jsonl/Customer.jsonl
Normal file
@@ -0,0 +1,59 @@
|
||||
{"CustomerId":1,"FirstName":"Luís","LastName":"Gonçalves","Company":"Embraer - Empresa Brasileira de Aeronáutica S.A.","Address":"Av. Brigadeiro Faria Lima, 2170","City":"Săo José dos Campos","State":"SP","Country":"Brazil","PostalCode":"12227-000","Phone":"+55 (12) 3923-5555","Fax":"+55 (12) 3923-5566","Email":"luisg@embraer.com.br","SupportRepId":3}
|
||||
{"CustomerId":2,"FirstName":"Leonie","LastName":"Köhler","Company":null,"Address":"Theodor-Heuss-Straße 34","City":"Stuttgart","State":null,"Country":"Germany","PostalCode":"70174","Phone":"+49 0711 2842222","Fax":null,"Email":"leonekohler@surfeu.de","SupportRepId":5}
|
||||
{"CustomerId":3,"FirstName":"François","LastName":"Tremblay","Company":null,"Address":"1498 rue Bélanger","City":"Montréal","State":"QC","Country":"Canada","PostalCode":"H2G 1A7","Phone":"+1 (514) 721-4711","Fax":null,"Email":"ftremblay@gmail.com","SupportRepId":3}
|
||||
{"CustomerId":4,"FirstName":"Bjřrn","LastName":"Hansen","Company":null,"Address":"Ullevĺlsveien 14","City":"Oslo","State":null,"Country":"Norway","PostalCode":"0171","Phone":"+47 22 44 22 22","Fax":null,"Email":"bjorn.hansen@yahoo.no","SupportRepId":4}
|
||||
{"CustomerId":5,"FirstName":"Frantiek","LastName":"Wichterlová","Company":"JetBrains s.r.o.","Address":"Klanova 9/506","City":"Prague","State":null,"Country":"Czech Republic","PostalCode":"14700","Phone":"+420 2 4172 5555","Fax":"+420 2 4172 5555","Email":"frantisekw@jetbrains.com","SupportRepId":4}
|
||||
{"CustomerId":6,"FirstName":"Helena","LastName":"Holý","Company":null,"Address":"Rilská 3174/6","City":"Prague","State":null,"Country":"Czech Republic","PostalCode":"14300","Phone":"+420 2 4177 0449","Fax":null,"Email":"hholy@gmail.com","SupportRepId":5}
|
||||
{"CustomerId":7,"FirstName":"Astrid","LastName":"Gruber","Company":null,"Address":"Rotenturmstraße 4, 1010 Innere Stadt","City":"Vienne","State":null,"Country":"Austria","PostalCode":"1010","Phone":"+43 01 5134505","Fax":null,"Email":"astrid.gruber@apple.at","SupportRepId":5}
|
||||
{"CustomerId":8,"FirstName":"Daan","LastName":"Peeters","Company":null,"Address":"Grétrystraat 63","City":"Brussels","State":null,"Country":"Belgium","PostalCode":"1000","Phone":"+32 02 219 03 03","Fax":null,"Email":"daan_peeters@apple.be","SupportRepId":4}
|
||||
{"CustomerId":9,"FirstName":"Kara","LastName":"Nielsen","Company":null,"Address":"Sřnder Boulevard 51","City":"Copenhagen","State":null,"Country":"Denmark","PostalCode":"1720","Phone":"+453 3331 9991","Fax":null,"Email":"kara.nielsen@jubii.dk","SupportRepId":4}
|
||||
{"CustomerId":10,"FirstName":"Eduardo","LastName":"Martins","Company":"Woodstock Discos","Address":"Rua Dr. Falcăo Filho, 155","City":"Săo Paulo","State":"SP","Country":"Brazil","PostalCode":"01007-010","Phone":"+55 (11) 3033-5446","Fax":"+55 (11) 3033-4564","Email":"eduardo@woodstock.com.br","SupportRepId":4}
|
||||
{"CustomerId":11,"FirstName":"Alexandre","LastName":"Rocha","Company":"Banco do Brasil S.A.","Address":"Av. Paulista, 2022","City":"Săo Paulo","State":"SP","Country":"Brazil","PostalCode":"01310-200","Phone":"+55 (11) 3055-3278","Fax":"+55 (11) 3055-8131","Email":"alero@uol.com.br","SupportRepId":5}
|
||||
{"CustomerId":12,"FirstName":"Roberto","LastName":"Almeida","Company":"Riotur","Address":"Praça Pio X, 119","City":"Rio de Janeiro","State":"RJ","Country":"Brazil","PostalCode":"20040-020","Phone":"+55 (21) 2271-7000","Fax":"+55 (21) 2271-7070","Email":"roberto.almeida@riotur.gov.br","SupportRepId":3}
|
||||
{"CustomerId":13,"FirstName":"Fernanda","LastName":"Ramos","Company":null,"Address":"Qe 7 Bloco G","City":"Brasília","State":"DF","Country":"Brazil","PostalCode":"71020-677","Phone":"+55 (61) 3363-5547","Fax":"+55 (61) 3363-7855","Email":"fernadaramos4@uol.com.br","SupportRepId":4}
|
||||
{"CustomerId":14,"FirstName":"Mark","LastName":"Philips","Company":"Telus","Address":"8210 111 ST NW","City":"Edmonton","State":"AB","Country":"Canada","PostalCode":"T6G 2C7","Phone":"+1 (780) 434-4554","Fax":"+1 (780) 434-5565","Email":"mphilips12@shaw.ca","SupportRepId":5}
|
||||
{"CustomerId":15,"FirstName":"Jennifer","LastName":"Peterson","Company":"Rogers Canada","Address":"700 W Pender Street","City":"Vancouver","State":"BC","Country":"Canada","PostalCode":"V6C 1G8","Phone":"+1 (604) 688-2255","Fax":"+1 (604) 688-8756","Email":"jenniferp@rogers.ca","SupportRepId":3}
|
||||
{"CustomerId":16,"FirstName":"Frank","LastName":"Harris","Company":"Google Inc.","Address":"1600 Amphitheatre Parkway","City":"Mountain View","State":"CA","Country":"USA","PostalCode":"94043-1351","Phone":"+1 (650) 253-0000","Fax":"+1 (650) 253-0000","Email":"fharris@google.com","SupportRepId":4}
|
||||
{"CustomerId":17,"FirstName":"Jack","LastName":"Smith","Company":"Microsoft Corporation","Address":"1 Microsoft Way","City":"Redmond","State":"WA","Country":"USA","PostalCode":"98052-8300","Phone":"+1 (425) 882-8080","Fax":"+1 (425) 882-8081","Email":"jacksmith@microsoft.com","SupportRepId":5}
|
||||
{"CustomerId":18,"FirstName":"Michelle","LastName":"Brooks","Company":null,"Address":"627 Broadway","City":"New York","State":"NY","Country":"USA","PostalCode":"10012-2612","Phone":"+1 (212) 221-3546","Fax":"+1 (212) 221-4679","Email":"michelleb@aol.com","SupportRepId":3}
|
||||
{"CustomerId":19,"FirstName":"Tim","LastName":"Goyer","Company":"Apple Inc.","Address":"1 Infinite Loop","City":"Cupertino","State":"CA","Country":"USA","PostalCode":"95014","Phone":"+1 (408) 996-1010","Fax":"+1 (408) 996-1011","Email":"tgoyer@apple.com","SupportRepId":3}
|
||||
{"CustomerId":20,"FirstName":"Dan","LastName":"Miller","Company":null,"Address":"541 Del Medio Avenue","City":"Mountain View","State":"CA","Country":"USA","PostalCode":"94040-111","Phone":"+1 (650) 644-3358","Fax":null,"Email":"dmiller@comcast.com","SupportRepId":4}
|
||||
{"CustomerId":21,"FirstName":"Kathy","LastName":"Chase","Company":null,"Address":"801 W 4th Street","City":"Reno","State":"NV","Country":"USA","PostalCode":"89503","Phone":"+1 (775) 223-7665","Fax":null,"Email":"kachase@hotmail.com","SupportRepId":5}
|
||||
{"CustomerId":22,"FirstName":"Heather","LastName":"Leacock","Company":null,"Address":"120 S Orange Ave","City":"Orlando","State":"FL","Country":"USA","PostalCode":"32801","Phone":"+1 (407) 999-7788","Fax":null,"Email":"hleacock@gmail.com","SupportRepId":4}
|
||||
{"CustomerId":23,"FirstName":"John","LastName":"Gordon","Company":null,"Address":"69 Salem Street","City":"Boston","State":"MA","Country":"USA","PostalCode":"2113","Phone":"+1 (617) 522-1333","Fax":null,"Email":"johngordon22@yahoo.com","SupportRepId":4}
|
||||
{"CustomerId":24,"FirstName":"Frank","LastName":"Ralston","Company":null,"Address":"162 E Superior Street","City":"Chicago","State":"IL","Country":"USA","PostalCode":"60611","Phone":"+1 (312) 332-3232","Fax":null,"Email":"fralston@gmail.com","SupportRepId":3}
|
||||
{"CustomerId":25,"FirstName":"Victor","LastName":"Stevens","Company":null,"Address":"319 N. Frances Street","City":"Madison","State":"WI","Country":"USA","PostalCode":"53703","Phone":"+1 (608) 257-0597","Fax":null,"Email":"vstevens@yahoo.com","SupportRepId":5}
|
||||
{"CustomerId":26,"FirstName":"Richard","LastName":"Cunningham","Company":null,"Address":"2211 W Berry Street","City":"Fort Worth","State":"TX","Country":"USA","PostalCode":"76110","Phone":"+1 (817) 924-7272","Fax":null,"Email":"ricunningham@hotmail.com","SupportRepId":4}
|
||||
{"CustomerId":27,"FirstName":"Patrick","LastName":"Gray","Company":null,"Address":"1033 N Park Ave","City":"Tucson","State":"AZ","Country":"USA","PostalCode":"85719","Phone":"+1 (520) 622-4200","Fax":null,"Email":"patrick.gray@aol.com","SupportRepId":4}
|
||||
{"CustomerId":28,"FirstName":"Julia","LastName":"Barnett","Company":null,"Address":"302 S 700 E","City":"Salt Lake City","State":"UT","Country":"USA","PostalCode":"84102","Phone":"+1 (801) 531-7272","Fax":null,"Email":"jubarnett@gmail.com","SupportRepId":5}
|
||||
{"CustomerId":29,"FirstName":"Robert","LastName":"Brown","Company":null,"Address":"796 Dundas Street West","City":"Toronto","State":"ON","Country":"Canada","PostalCode":"M6J 1V1","Phone":"+1 (416) 363-8888","Fax":null,"Email":"robbrown@shaw.ca","SupportRepId":3}
|
||||
{"CustomerId":30,"FirstName":"Edward","LastName":"Francis","Company":null,"Address":"230 Elgin Street","City":"Ottawa","State":"ON","Country":"Canada","PostalCode":"K2P 1L7","Phone":"+1 (613) 234-3322","Fax":null,"Email":"edfrancis@yachoo.ca","SupportRepId":3}
|
||||
{"CustomerId":31,"FirstName":"Martha","LastName":"Silk","Company":null,"Address":"194A Chain Lake Drive","City":"Halifax","State":"NS","Country":"Canada","PostalCode":"B3S 1C5","Phone":"+1 (902) 450-0450","Fax":null,"Email":"marthasilk@gmail.com","SupportRepId":5}
|
||||
{"CustomerId":32,"FirstName":"Aaron","LastName":"Mitchell","Company":null,"Address":"696 Osborne Street","City":"Winnipeg","State":"MB","Country":"Canada","PostalCode":"R3L 2B9","Phone":"+1 (204) 452-6452","Fax":null,"Email":"aaronmitchell@yahoo.ca","SupportRepId":4}
|
||||
{"CustomerId":33,"FirstName":"Ellie","LastName":"Sullivan","Company":null,"Address":"5112 48 Street","City":"Yellowknife","State":"NT","Country":"Canada","PostalCode":"X1A 1N6","Phone":"+1 (867) 920-2233","Fax":null,"Email":"ellie.sullivan@shaw.ca","SupportRepId":3}
|
||||
{"CustomerId":34,"FirstName":"Joăo","LastName":"Fernandes","Company":null,"Address":"Rua da Assunçăo 53","City":"Lisbon","State":null,"Country":"Portugal","PostalCode":null,"Phone":"+351 (213) 466-111","Fax":null,"Email":"jfernandes@yahoo.pt","SupportRepId":4}
|
||||
{"CustomerId":35,"FirstName":"Madalena","LastName":"Sampaio","Company":null,"Address":"Rua dos Campeőes Europeus de Viena, 4350","City":"Porto","State":null,"Country":"Portugal","PostalCode":null,"Phone":"+351 (225) 022-448","Fax":null,"Email":"masampaio@sapo.pt","SupportRepId":4}
|
||||
{"CustomerId":36,"FirstName":"Hannah","LastName":"Schneider","Company":null,"Address":"Tauentzienstraße 8","City":"Berlin","State":null,"Country":"Germany","PostalCode":"10789","Phone":"+49 030 26550280","Fax":null,"Email":"hannah.schneider@yahoo.de","SupportRepId":5}
|
||||
{"CustomerId":37,"FirstName":"Fynn","LastName":"Zimmermann","Company":null,"Address":"Berger Straße 10","City":"Frankfurt","State":null,"Country":"Germany","PostalCode":"60316","Phone":"+49 069 40598889","Fax":null,"Email":"fzimmermann@yahoo.de","SupportRepId":3}
|
||||
{"CustomerId":38,"FirstName":"Niklas","LastName":"Schröder","Company":null,"Address":"Barbarossastraße 19","City":"Berlin","State":null,"Country":"Germany","PostalCode":"10779","Phone":"+49 030 2141444","Fax":null,"Email":"nschroder@surfeu.de","SupportRepId":3}
|
||||
{"CustomerId":39,"FirstName":"Camille","LastName":"Bernard","Company":null,"Address":"4, Rue Milton","City":"Paris","State":null,"Country":"France","PostalCode":"75009","Phone":"+33 01 49 70 65 65","Fax":null,"Email":"camille.bernard@yahoo.fr","SupportRepId":4}
|
||||
{"CustomerId":40,"FirstName":"Dominique","LastName":"Lefebvre","Company":null,"Address":"8, Rue Hanovre","City":"Paris","State":null,"Country":"France","PostalCode":"75002","Phone":"+33 01 47 42 71 71","Fax":null,"Email":"dominiquelefebvre@gmail.com","SupportRepId":4}
|
||||
{"CustomerId":41,"FirstName":"Marc","LastName":"Dubois","Company":null,"Address":"11, Place Bellecour","City":"Lyon","State":null,"Country":"France","PostalCode":"69002","Phone":"+33 04 78 30 30 30","Fax":null,"Email":"marc.dubois@hotmail.com","SupportRepId":5}
|
||||
{"CustomerId":42,"FirstName":"Wyatt","LastName":"Girard","Company":null,"Address":"9, Place Louis Barthou","City":"Bordeaux","State":null,"Country":"France","PostalCode":"33000","Phone":"+33 05 56 96 96 96","Fax":null,"Email":"wyatt.girard@yahoo.fr","SupportRepId":3}
|
||||
{"CustomerId":43,"FirstName":"Isabelle","LastName":"Mercier","Company":null,"Address":"68, Rue Jouvence","City":"Dijon","State":null,"Country":"France","PostalCode":"21000","Phone":"+33 03 80 73 66 99","Fax":null,"Email":"isabelle_mercier@apple.fr","SupportRepId":3}
|
||||
{"CustomerId":44,"FirstName":"Terhi","LastName":"Hämäläinen","Company":null,"Address":"Porthaninkatu 9","City":"Helsinki","State":null,"Country":"Finland","PostalCode":"00530","Phone":"+358 09 870 2000","Fax":null,"Email":"terhi.hamalainen@apple.fi","SupportRepId":3}
|
||||
{"CustomerId":45,"FirstName":"Ladislav","LastName":"Kovács","Company":null,"Address":"Erzsébet krt. 58.","City":"Budapest","State":null,"Country":"Hungary","PostalCode":"H-1073","Phone":null,"Fax":null,"Email":"ladislav_kovacs@apple.hu","SupportRepId":3}
|
||||
{"CustomerId":46,"FirstName":"Hugh","LastName":"O'Reilly","Company":null,"Address":"3 Chatham Street","City":"Dublin","State":"Dublin","Country":"Ireland","PostalCode":null,"Phone":"+353 01 6792424","Fax":null,"Email":"hughoreilly@apple.ie","SupportRepId":3}
|
||||
{"CustomerId":47,"FirstName":"Lucas","LastName":"Mancini","Company":null,"Address":"Via Degli Scipioni, 43","City":"Rome","State":"RM","Country":"Italy","PostalCode":"00192","Phone":"+39 06 39733434","Fax":null,"Email":"lucas.mancini@yahoo.it","SupportRepId":5}
|
||||
{"CustomerId":48,"FirstName":"Johannes","LastName":"Van der Berg","Company":null,"Address":"Lijnbaansgracht 120bg","City":"Amsterdam","State":"VV","Country":"Netherlands","PostalCode":"1016","Phone":"+31 020 6223130","Fax":null,"Email":"johavanderberg@yahoo.nl","SupportRepId":5}
|
||||
{"CustomerId":49,"FirstName":"Stanislaw","LastName":"Wójcik","Company":null,"Address":"Ordynacka 10","City":"Warsaw","State":null,"Country":"Poland","PostalCode":"00-358","Phone":"+48 22 828 37 39","Fax":null,"Email":"stanislaw.wójcik@wp.pl","SupportRepId":4}
|
||||
{"CustomerId":50,"FirstName":"Enrique","LastName":"Muńoz","Company":null,"Address":"C/ San Bernardo 85","City":"Madrid","State":null,"Country":"Spain","PostalCode":"28015","Phone":"+34 914 454 454","Fax":null,"Email":"enrique_munoz@yahoo.es","SupportRepId":5}
|
||||
{"CustomerId":51,"FirstName":"Joakim","LastName":"Johansson","Company":null,"Address":"Celsiusg. 9","City":"Stockholm","State":null,"Country":"Sweden","PostalCode":"11230","Phone":"+46 08-651 52 52","Fax":null,"Email":"joakim.johansson@yahoo.se","SupportRepId":5}
|
||||
{"CustomerId":52,"FirstName":"Emma","LastName":"Jones","Company":null,"Address":"202 Hoxton Street","City":"London","State":null,"Country":"United Kingdom","PostalCode":"N1 5LH","Phone":"+44 020 7707 0707","Fax":null,"Email":"emma_jones@hotmail.com","SupportRepId":3}
|
||||
{"CustomerId":53,"FirstName":"Phil","LastName":"Hughes","Company":null,"Address":"113 Lupus St","City":"London","State":null,"Country":"United Kingdom","PostalCode":"SW1V 3EN","Phone":"+44 020 7976 5722","Fax":null,"Email":"phil.hughes@gmail.com","SupportRepId":3}
|
||||
{"CustomerId":54,"FirstName":"Steve","LastName":"Murray","Company":null,"Address":"110 Raeburn Pl","City":"Edinburgh","State":null,"Country":"United Kingdom","PostalCode":"EH4 1HH","Phone":"+44 0131 315 3300","Fax":null,"Email":"steve.murray@yahoo.uk","SupportRepId":5}
|
||||
{"CustomerId":55,"FirstName":"Mark","LastName":"Taylor","Company":null,"Address":"421 Bourke Street","City":"Sidney","State":"NSW","Country":"Australia","PostalCode":"2010","Phone":"+61 (02) 9332 3633","Fax":null,"Email":"mark.taylor@yahoo.au","SupportRepId":4}
|
||||
{"CustomerId":56,"FirstName":"Diego","LastName":"Gutiérrez","Company":null,"Address":"307 Macacha Güemes","City":"Buenos Aires","State":null,"Country":"Argentina","PostalCode":"1106","Phone":"+54 (0)11 4311 4333","Fax":null,"Email":"diego.gutierrez@yahoo.ar","SupportRepId":4}
|
||||
{"CustomerId":57,"FirstName":"Luis","LastName":"Rojas","Company":null,"Address":"Calle Lira, 198","City":"Santiago","State":null,"Country":"Chile","PostalCode":null,"Phone":"+56 (0)2 635 4444","Fax":null,"Email":"luisrojas@yahoo.cl","SupportRepId":5}
|
||||
{"CustomerId":58,"FirstName":"Manoj","LastName":"Pareek","Company":null,"Address":"12,Community Centre","City":"Delhi","State":null,"Country":"India","PostalCode":"110017","Phone":"+91 0124 39883988","Fax":null,"Email":"manoj.pareek@rediff.com","SupportRepId":3}
|
||||
{"CustomerId":59,"FirstName":"Puja","LastName":"Srivastava","Company":null,"Address":"3,Raj Bhavan Road","City":"Bangalore","State":null,"Country":"India","PostalCode":"560001","Phone":"+91 080 22289999","Fax":null,"Email":"puja_srivastava@yahoo.in","SupportRepId":3}
|
||||
8
e2e-tests/data/chinook-jsonl/Employee.jsonl
Normal file
8
e2e-tests/data/chinook-jsonl/Employee.jsonl
Normal file
@@ -0,0 +1,8 @@
|
||||
{"EmployeeId":1,"LastName":"Adams","FirstName":"Andrew","Title":"General Manager","ReportsTo":null,"BirthDate":"1962-02-17T23:00:00.000Z","HireDate":"2002-08-13T22:00:00.000Z","Address":"11120 Jasper Ave NW","City":"Edmonton","State":"AB","Country":"Canada","PostalCode":"T5K 2N1","Phone":"+1 (780) 428-9482","Fax":"+1 (780) 428-3457","Email":"andrew@chinookcorp.com"}
|
||||
{"EmployeeId":2,"LastName":"Edwards","FirstName":"Nancy","Title":"Sales Manager","ReportsTo":1,"BirthDate":"1958-12-07T23:00:00.000Z","HireDate":"2002-04-30T22:00:00.000Z","Address":"825 8 Ave SW","City":"Calgary","State":"AB","Country":"Canada","PostalCode":"T2P 2T3","Phone":"+1 (403) 262-3443","Fax":"+1 (403) 262-3322","Email":"nancy@chinookcorp.com"}
|
||||
{"EmployeeId":3,"LastName":"Peacock","FirstName":"Jane","Title":"Sales Support Agent","ReportsTo":2,"BirthDate":"1973-08-28T23:00:00.000Z","HireDate":"2002-03-31T22:00:00.000Z","Address":"1111 6 Ave SW","City":"Calgary","State":"AB","Country":"Canada","PostalCode":"T2P 5M5","Phone":"+1 (403) 262-3443","Fax":"+1 (403) 262-6712","Email":"jane@chinookcorp.com"}
|
||||
{"EmployeeId":4,"LastName":"Park","FirstName":"Margaret","Title":"Sales Support Agent","ReportsTo":2,"BirthDate":"1947-09-18T22:00:00.000Z","HireDate":"2003-05-02T22:00:00.000Z","Address":"683 10 Street SW","City":"Calgary","State":"AB","Country":"Canada","PostalCode":"T2P 5G3","Phone":"+1 (403) 263-4423","Fax":"+1 (403) 263-4289","Email":"margaret@chinookcorp.com"}
|
||||
{"EmployeeId":5,"LastName":"Johnson","FirstName":"Steve","Title":"Sales Support Agent","ReportsTo":2,"BirthDate":"1965-03-02T23:00:00.000Z","HireDate":"2003-10-16T22:00:00.000Z","Address":"7727B 41 Ave","City":"Calgary","State":"AB","Country":"Canada","PostalCode":"T3B 1Y7","Phone":"1 (780) 836-9987","Fax":"1 (780) 836-9543","Email":"steve@chinookcorp.com"}
|
||||
{"EmployeeId":6,"LastName":"Mitchell","FirstName":"Michael","Title":"IT Manager","ReportsTo":1,"BirthDate":"1973-06-30T23:00:00.000Z","HireDate":"2003-10-16T22:00:00.000Z","Address":"5827 Bowness Road NW","City":"Calgary","State":"AB","Country":"Canada","PostalCode":"T3B 0C5","Phone":"+1 (403) 246-9887","Fax":"+1 (403) 246-9899","Email":"michael@chinookcorp.com"}
|
||||
{"EmployeeId":7,"LastName":"King","FirstName":"Robert","Title":"IT Staff","ReportsTo":6,"BirthDate":"1970-05-28T23:00:00.000Z","HireDate":"2004-01-01T23:00:00.000Z","Address":"590 Columbia Boulevard West","City":"Lethbridge","State":"AB","Country":"Canada","PostalCode":"T1K 5N8","Phone":"+1 (403) 456-9986","Fax":"+1 (403) 456-8485","Email":"robert@chinookcorp.com"}
|
||||
{"EmployeeId":8,"LastName":"Callahan","FirstName":"Laura","Title":"IT Staff","ReportsTo":6,"BirthDate":"1968-01-08T23:00:00.000Z","HireDate":"2004-03-03T23:00:00.000Z","Address":"923 7 ST NW","City":"Lethbridge","State":"AB","Country":"Canada","PostalCode":"T1H 1Y8","Phone":"+1 (403) 467-3351","Fax":"+1 (403) 467-8772","Email":"laura@chinookcorp.com"}
|
||||
25
e2e-tests/data/chinook-jsonl/Genre.jsonl
Normal file
25
e2e-tests/data/chinook-jsonl/Genre.jsonl
Normal file
@@ -0,0 +1,25 @@
|
||||
{"GenreId":1,"Name":"Rock"}
|
||||
{"GenreId":2,"Name":"Jazz"}
|
||||
{"GenreId":3,"Name":"Metal"}
|
||||
{"GenreId":4,"Name":"Alternative & Punk"}
|
||||
{"GenreId":5,"Name":"Rock And Roll"}
|
||||
{"GenreId":6,"Name":"Blues"}
|
||||
{"GenreId":7,"Name":"Latin"}
|
||||
{"GenreId":8,"Name":"Reggae"}
|
||||
{"GenreId":9,"Name":"Pop"}
|
||||
{"GenreId":10,"Name":"Soundtrack"}
|
||||
{"GenreId":11,"Name":"Bossa Nova"}
|
||||
{"GenreId":12,"Name":"Easy Listening"}
|
||||
{"GenreId":13,"Name":"Heavy Metal"}
|
||||
{"GenreId":14,"Name":"R&B/Soul"}
|
||||
{"GenreId":15,"Name":"Electronica/Dance"}
|
||||
{"GenreId":16,"Name":"World"}
|
||||
{"GenreId":17,"Name":"Hip Hop/Rap"}
|
||||
{"GenreId":18,"Name":"Science Fiction"}
|
||||
{"GenreId":19,"Name":"TV Shows"}
|
||||
{"GenreId":20,"Name":"Sci Fi & Fantasy"}
|
||||
{"GenreId":21,"Name":"Drama"}
|
||||
{"GenreId":22,"Name":"Comedy"}
|
||||
{"GenreId":23,"Name":"Alternative"}
|
||||
{"GenreId":24,"Name":"Classical"}
|
||||
{"GenreId":25,"Name":"Opera"}
|
||||
412
e2e-tests/data/chinook-jsonl/Invoice.jsonl
Normal file
412
e2e-tests/data/chinook-jsonl/Invoice.jsonl
Normal file
@@ -0,0 +1,412 @@
|
||||
{"InvoiceId":1,"CustomerId":2,"InvoiceDate":"2008-12-31T23:00:00.000Z","BillingAddress":"Theodor-Heuss-Straße 34","BillingCity":"Stuttgart","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"70174","Total":"1.98"}
|
||||
{"InvoiceId":2,"CustomerId":4,"InvoiceDate":"2009-01-01T23:00:00.000Z","BillingAddress":"Ullevĺlsveien 14","BillingCity":"Oslo","BillingState":null,"BillingCountry":"Norway","BillingPostalCode":"0171","Total":"3.96"}
|
||||
{"InvoiceId":3,"CustomerId":8,"InvoiceDate":"2009-01-02T23:00:00.000Z","BillingAddress":"Grétrystraat 63","BillingCity":"Brussels","BillingState":null,"BillingCountry":"Belgium","BillingPostalCode":"1000","Total":"5.94"}
|
||||
{"InvoiceId":4,"CustomerId":14,"InvoiceDate":"2009-01-05T23:00:00.000Z","BillingAddress":"8210 111 ST NW","BillingCity":"Edmonton","BillingState":"AB","BillingCountry":"Canada","BillingPostalCode":"T6G 2C7","Total":"8.91"}
|
||||
{"InvoiceId":5,"CustomerId":23,"InvoiceDate":"2009-01-10T23:00:00.000Z","BillingAddress":"69 Salem Street","BillingCity":"Boston","BillingState":"MA","BillingCountry":"USA","BillingPostalCode":"2113","Total":"13.86"}
|
||||
{"InvoiceId":6,"CustomerId":37,"InvoiceDate":"2009-01-18T23:00:00.000Z","BillingAddress":"Berger Straße 10","BillingCity":"Frankfurt","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"60316","Total":"0.99"}
|
||||
{"InvoiceId":7,"CustomerId":38,"InvoiceDate":"2009-01-31T23:00:00.000Z","BillingAddress":"Barbarossastraße 19","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10779","Total":"1.98"}
|
||||
{"InvoiceId":8,"CustomerId":40,"InvoiceDate":"2009-01-31T23:00:00.000Z","BillingAddress":"8, Rue Hanovre","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75002","Total":"1.98"}
|
||||
{"InvoiceId":9,"CustomerId":42,"InvoiceDate":"2009-02-01T23:00:00.000Z","BillingAddress":"9, Place Louis Barthou","BillingCity":"Bordeaux","BillingState":null,"BillingCountry":"France","BillingPostalCode":"33000","Total":"3.96"}
|
||||
{"InvoiceId":10,"CustomerId":46,"InvoiceDate":"2009-02-02T23:00:00.000Z","BillingAddress":"3 Chatham Street","BillingCity":"Dublin","BillingState":"Dublin","BillingCountry":"Ireland","BillingPostalCode":null,"Total":"5.94"}
|
||||
{"InvoiceId":11,"CustomerId":52,"InvoiceDate":"2009-02-05T23:00:00.000Z","BillingAddress":"202 Hoxton Street","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"N1 5LH","Total":"8.91"}
|
||||
{"InvoiceId":12,"CustomerId":2,"InvoiceDate":"2009-02-10T23:00:00.000Z","BillingAddress":"Theodor-Heuss-Straße 34","BillingCity":"Stuttgart","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"70174","Total":"13.86"}
|
||||
{"InvoiceId":13,"CustomerId":16,"InvoiceDate":"2009-02-18T23:00:00.000Z","BillingAddress":"1600 Amphitheatre Parkway","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94043-1351","Total":"0.99"}
|
||||
{"InvoiceId":14,"CustomerId":17,"InvoiceDate":"2009-03-03T23:00:00.000Z","BillingAddress":"1 Microsoft Way","BillingCity":"Redmond","BillingState":"WA","BillingCountry":"USA","BillingPostalCode":"98052-8300","Total":"1.98"}
|
||||
{"InvoiceId":15,"CustomerId":19,"InvoiceDate":"2009-03-03T23:00:00.000Z","BillingAddress":"1 Infinite Loop","BillingCity":"Cupertino","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"95014","Total":"1.98"}
|
||||
{"InvoiceId":16,"CustomerId":21,"InvoiceDate":"2009-03-04T23:00:00.000Z","BillingAddress":"801 W 4th Street","BillingCity":"Reno","BillingState":"NV","BillingCountry":"USA","BillingPostalCode":"89503","Total":"3.96"}
|
||||
{"InvoiceId":17,"CustomerId":25,"InvoiceDate":"2009-03-05T23:00:00.000Z","BillingAddress":"319 N. Frances Street","BillingCity":"Madison","BillingState":"WI","BillingCountry":"USA","BillingPostalCode":"53703","Total":"5.94"}
|
||||
{"InvoiceId":18,"CustomerId":31,"InvoiceDate":"2009-03-08T23:00:00.000Z","BillingAddress":"194A Chain Lake Drive","BillingCity":"Halifax","BillingState":"NS","BillingCountry":"Canada","BillingPostalCode":"B3S 1C5","Total":"8.91"}
|
||||
{"InvoiceId":19,"CustomerId":40,"InvoiceDate":"2009-03-13T23:00:00.000Z","BillingAddress":"8, Rue Hanovre","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75002","Total":"13.86"}
|
||||
{"InvoiceId":20,"CustomerId":54,"InvoiceDate":"2009-03-21T23:00:00.000Z","BillingAddress":"110 Raeburn Pl","BillingCity":"Edinburgh","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"EH4 1HH","Total":"0.99"}
|
||||
{"InvoiceId":21,"CustomerId":55,"InvoiceDate":"2009-04-03T22:00:00.000Z","BillingAddress":"421 Bourke Street","BillingCity":"Sidney","BillingState":"NSW","BillingCountry":"Australia","BillingPostalCode":"2010","Total":"1.98"}
|
||||
{"InvoiceId":22,"CustomerId":57,"InvoiceDate":"2009-04-03T22:00:00.000Z","BillingAddress":"Calle Lira, 198","BillingCity":"Santiago","BillingState":null,"BillingCountry":"Chile","BillingPostalCode":null,"Total":"1.98"}
|
||||
{"InvoiceId":23,"CustomerId":59,"InvoiceDate":"2009-04-04T22:00:00.000Z","BillingAddress":"3,Raj Bhavan Road","BillingCity":"Bangalore","BillingState":null,"BillingCountry":"India","BillingPostalCode":"560001","Total":"3.96"}
|
||||
{"InvoiceId":24,"CustomerId":4,"InvoiceDate":"2009-04-05T22:00:00.000Z","BillingAddress":"Ullevĺlsveien 14","BillingCity":"Oslo","BillingState":null,"BillingCountry":"Norway","BillingPostalCode":"0171","Total":"5.94"}
|
||||
{"InvoiceId":25,"CustomerId":10,"InvoiceDate":"2009-04-08T22:00:00.000Z","BillingAddress":"Rua Dr. Falcăo Filho, 155","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01007-010","Total":"8.91"}
|
||||
{"InvoiceId":26,"CustomerId":19,"InvoiceDate":"2009-04-13T22:00:00.000Z","BillingAddress":"1 Infinite Loop","BillingCity":"Cupertino","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"95014","Total":"13.86"}
|
||||
{"InvoiceId":27,"CustomerId":33,"InvoiceDate":"2009-04-21T22:00:00.000Z","BillingAddress":"5112 48 Street","BillingCity":"Yellowknife","BillingState":"NT","BillingCountry":"Canada","BillingPostalCode":"X1A 1N6","Total":"0.99"}
|
||||
{"InvoiceId":28,"CustomerId":34,"InvoiceDate":"2009-05-04T22:00:00.000Z","BillingAddress":"Rua da Assunçăo 53","BillingCity":"Lisbon","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"1.98"}
|
||||
{"InvoiceId":29,"CustomerId":36,"InvoiceDate":"2009-05-04T22:00:00.000Z","BillingAddress":"Tauentzienstraße 8","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10789","Total":"1.98"}
|
||||
{"InvoiceId":30,"CustomerId":38,"InvoiceDate":"2009-05-05T22:00:00.000Z","BillingAddress":"Barbarossastraße 19","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10779","Total":"3.96"}
|
||||
{"InvoiceId":31,"CustomerId":42,"InvoiceDate":"2009-05-06T22:00:00.000Z","BillingAddress":"9, Place Louis Barthou","BillingCity":"Bordeaux","BillingState":null,"BillingCountry":"France","BillingPostalCode":"33000","Total":"5.94"}
|
||||
{"InvoiceId":32,"CustomerId":48,"InvoiceDate":"2009-05-09T22:00:00.000Z","BillingAddress":"Lijnbaansgracht 120bg","BillingCity":"Amsterdam","BillingState":"VV","BillingCountry":"Netherlands","BillingPostalCode":"1016","Total":"8.91"}
|
||||
{"InvoiceId":33,"CustomerId":57,"InvoiceDate":"2009-05-14T22:00:00.000Z","BillingAddress":"Calle Lira, 198","BillingCity":"Santiago","BillingState":null,"BillingCountry":"Chile","BillingPostalCode":null,"Total":"13.86"}
|
||||
{"InvoiceId":34,"CustomerId":12,"InvoiceDate":"2009-05-22T22:00:00.000Z","BillingAddress":"Praça Pio X, 119","BillingCity":"Rio de Janeiro","BillingState":"RJ","BillingCountry":"Brazil","BillingPostalCode":"20040-020","Total":"0.99"}
|
||||
{"InvoiceId":35,"CustomerId":13,"InvoiceDate":"2009-06-04T22:00:00.000Z","BillingAddress":"Qe 7 Bloco G","BillingCity":"Brasília","BillingState":"DF","BillingCountry":"Brazil","BillingPostalCode":"71020-677","Total":"1.98"}
|
||||
{"InvoiceId":36,"CustomerId":15,"InvoiceDate":"2009-06-04T22:00:00.000Z","BillingAddress":"700 W Pender Street","BillingCity":"Vancouver","BillingState":"BC","BillingCountry":"Canada","BillingPostalCode":"V6C 1G8","Total":"1.98"}
|
||||
{"InvoiceId":37,"CustomerId":17,"InvoiceDate":"2009-06-05T22:00:00.000Z","BillingAddress":"1 Microsoft Way","BillingCity":"Redmond","BillingState":"WA","BillingCountry":"USA","BillingPostalCode":"98052-8300","Total":"3.96"}
|
||||
{"InvoiceId":38,"CustomerId":21,"InvoiceDate":"2009-06-06T22:00:00.000Z","BillingAddress":"801 W 4th Street","BillingCity":"Reno","BillingState":"NV","BillingCountry":"USA","BillingPostalCode":"89503","Total":"5.94"}
|
||||
{"InvoiceId":39,"CustomerId":27,"InvoiceDate":"2009-06-09T22:00:00.000Z","BillingAddress":"1033 N Park Ave","BillingCity":"Tucson","BillingState":"AZ","BillingCountry":"USA","BillingPostalCode":"85719","Total":"8.91"}
|
||||
{"InvoiceId":40,"CustomerId":36,"InvoiceDate":"2009-06-14T22:00:00.000Z","BillingAddress":"Tauentzienstraße 8","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10789","Total":"13.86"}
|
||||
{"InvoiceId":41,"CustomerId":50,"InvoiceDate":"2009-06-22T22:00:00.000Z","BillingAddress":"C/ San Bernardo 85","BillingCity":"Madrid","BillingState":null,"BillingCountry":"Spain","BillingPostalCode":"28015","Total":"0.99"}
|
||||
{"InvoiceId":42,"CustomerId":51,"InvoiceDate":"2009-07-05T22:00:00.000Z","BillingAddress":"Celsiusg. 9","BillingCity":"Stockholm","BillingState":null,"BillingCountry":"Sweden","BillingPostalCode":"11230","Total":"1.98"}
|
||||
{"InvoiceId":43,"CustomerId":53,"InvoiceDate":"2009-07-05T22:00:00.000Z","BillingAddress":"113 Lupus St","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"SW1V 3EN","Total":"1.98"}
|
||||
{"InvoiceId":44,"CustomerId":55,"InvoiceDate":"2009-07-06T22:00:00.000Z","BillingAddress":"421 Bourke Street","BillingCity":"Sidney","BillingState":"NSW","BillingCountry":"Australia","BillingPostalCode":"2010","Total":"3.96"}
|
||||
{"InvoiceId":45,"CustomerId":59,"InvoiceDate":"2009-07-07T22:00:00.000Z","BillingAddress":"3,Raj Bhavan Road","BillingCity":"Bangalore","BillingState":null,"BillingCountry":"India","BillingPostalCode":"560001","Total":"5.94"}
|
||||
{"InvoiceId":46,"CustomerId":6,"InvoiceDate":"2009-07-10T22:00:00.000Z","BillingAddress":"Rilská 3174/6","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14300","Total":"8.91"}
|
||||
{"InvoiceId":47,"CustomerId":15,"InvoiceDate":"2009-07-15T22:00:00.000Z","BillingAddress":"700 W Pender Street","BillingCity":"Vancouver","BillingState":"BC","BillingCountry":"Canada","BillingPostalCode":"V6C 1G8","Total":"13.86"}
|
||||
{"InvoiceId":48,"CustomerId":29,"InvoiceDate":"2009-07-23T22:00:00.000Z","BillingAddress":"796 Dundas Street West","BillingCity":"Toronto","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"M6J 1V1","Total":"0.99"}
|
||||
{"InvoiceId":49,"CustomerId":30,"InvoiceDate":"2009-08-05T22:00:00.000Z","BillingAddress":"230 Elgin Street","BillingCity":"Ottawa","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"K2P 1L7","Total":"1.98"}
|
||||
{"InvoiceId":50,"CustomerId":32,"InvoiceDate":"2009-08-05T22:00:00.000Z","BillingAddress":"696 Osborne Street","BillingCity":"Winnipeg","BillingState":"MB","BillingCountry":"Canada","BillingPostalCode":"R3L 2B9","Total":"1.98"}
|
||||
{"InvoiceId":51,"CustomerId":34,"InvoiceDate":"2009-08-06T22:00:00.000Z","BillingAddress":"Rua da Assunçăo 53","BillingCity":"Lisbon","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"3.96"}
|
||||
{"InvoiceId":52,"CustomerId":38,"InvoiceDate":"2009-08-07T22:00:00.000Z","BillingAddress":"Barbarossastraße 19","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10779","Total":"5.94"}
|
||||
{"InvoiceId":53,"CustomerId":44,"InvoiceDate":"2009-08-10T22:00:00.000Z","BillingAddress":"Porthaninkatu 9","BillingCity":"Helsinki","BillingState":null,"BillingCountry":"Finland","BillingPostalCode":"00530","Total":"8.91"}
|
||||
{"InvoiceId":54,"CustomerId":53,"InvoiceDate":"2009-08-15T22:00:00.000Z","BillingAddress":"113 Lupus St","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"SW1V 3EN","Total":"13.86"}
|
||||
{"InvoiceId":55,"CustomerId":8,"InvoiceDate":"2009-08-23T22:00:00.000Z","BillingAddress":"Grétrystraat 63","BillingCity":"Brussels","BillingState":null,"BillingCountry":"Belgium","BillingPostalCode":"1000","Total":"0.99"}
|
||||
{"InvoiceId":56,"CustomerId":9,"InvoiceDate":"2009-09-05T22:00:00.000Z","BillingAddress":"Sřnder Boulevard 51","BillingCity":"Copenhagen","BillingState":null,"BillingCountry":"Denmark","BillingPostalCode":"1720","Total":"1.98"}
|
||||
{"InvoiceId":57,"CustomerId":11,"InvoiceDate":"2009-09-05T22:00:00.000Z","BillingAddress":"Av. Paulista, 2022","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01310-200","Total":"1.98"}
|
||||
{"InvoiceId":58,"CustomerId":13,"InvoiceDate":"2009-09-06T22:00:00.000Z","BillingAddress":"Qe 7 Bloco G","BillingCity":"Brasília","BillingState":"DF","BillingCountry":"Brazil","BillingPostalCode":"71020-677","Total":"3.96"}
|
||||
{"InvoiceId":59,"CustomerId":17,"InvoiceDate":"2009-09-07T22:00:00.000Z","BillingAddress":"1 Microsoft Way","BillingCity":"Redmond","BillingState":"WA","BillingCountry":"USA","BillingPostalCode":"98052-8300","Total":"5.94"}
|
||||
{"InvoiceId":60,"CustomerId":23,"InvoiceDate":"2009-09-10T22:00:00.000Z","BillingAddress":"69 Salem Street","BillingCity":"Boston","BillingState":"MA","BillingCountry":"USA","BillingPostalCode":"2113","Total":"8.91"}
|
||||
{"InvoiceId":61,"CustomerId":32,"InvoiceDate":"2009-09-15T22:00:00.000Z","BillingAddress":"696 Osborne Street","BillingCity":"Winnipeg","BillingState":"MB","BillingCountry":"Canada","BillingPostalCode":"R3L 2B9","Total":"13.86"}
|
||||
{"InvoiceId":62,"CustomerId":46,"InvoiceDate":"2009-09-23T22:00:00.000Z","BillingAddress":"3 Chatham Street","BillingCity":"Dublin","BillingState":"Dublin","BillingCountry":"Ireland","BillingPostalCode":null,"Total":"0.99"}
|
||||
{"InvoiceId":63,"CustomerId":47,"InvoiceDate":"2009-10-06T22:00:00.000Z","BillingAddress":"Via Degli Scipioni, 43","BillingCity":"Rome","BillingState":"RM","BillingCountry":"Italy","BillingPostalCode":"00192","Total":"1.98"}
|
||||
{"InvoiceId":64,"CustomerId":49,"InvoiceDate":"2009-10-06T22:00:00.000Z","BillingAddress":"Ordynacka 10","BillingCity":"Warsaw","BillingState":null,"BillingCountry":"Poland","BillingPostalCode":"00-358","Total":"1.98"}
|
||||
{"InvoiceId":65,"CustomerId":51,"InvoiceDate":"2009-10-07T22:00:00.000Z","BillingAddress":"Celsiusg. 9","BillingCity":"Stockholm","BillingState":null,"BillingCountry":"Sweden","BillingPostalCode":"11230","Total":"3.96"}
|
||||
{"InvoiceId":66,"CustomerId":55,"InvoiceDate":"2009-10-08T22:00:00.000Z","BillingAddress":"421 Bourke Street","BillingCity":"Sidney","BillingState":"NSW","BillingCountry":"Australia","BillingPostalCode":"2010","Total":"5.94"}
|
||||
{"InvoiceId":67,"CustomerId":2,"InvoiceDate":"2009-10-11T22:00:00.000Z","BillingAddress":"Theodor-Heuss-Straße 34","BillingCity":"Stuttgart","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"70174","Total":"8.91"}
|
||||
{"InvoiceId":68,"CustomerId":11,"InvoiceDate":"2009-10-16T22:00:00.000Z","BillingAddress":"Av. Paulista, 2022","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01310-200","Total":"13.86"}
|
||||
{"InvoiceId":69,"CustomerId":25,"InvoiceDate":"2009-10-24T22:00:00.000Z","BillingAddress":"319 N. Frances Street","BillingCity":"Madison","BillingState":"WI","BillingCountry":"USA","BillingPostalCode":"53703","Total":"0.99"}
|
||||
{"InvoiceId":70,"CustomerId":26,"InvoiceDate":"2009-11-06T23:00:00.000Z","BillingAddress":"2211 W Berry Street","BillingCity":"Fort Worth","BillingState":"TX","BillingCountry":"USA","BillingPostalCode":"76110","Total":"1.98"}
|
||||
{"InvoiceId":71,"CustomerId":28,"InvoiceDate":"2009-11-06T23:00:00.000Z","BillingAddress":"302 S 700 E","BillingCity":"Salt Lake City","BillingState":"UT","BillingCountry":"USA","BillingPostalCode":"84102","Total":"1.98"}
|
||||
{"InvoiceId":72,"CustomerId":30,"InvoiceDate":"2009-11-07T23:00:00.000Z","BillingAddress":"230 Elgin Street","BillingCity":"Ottawa","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"K2P 1L7","Total":"3.96"}
|
||||
{"InvoiceId":73,"CustomerId":34,"InvoiceDate":"2009-11-08T23:00:00.000Z","BillingAddress":"Rua da Assunçăo 53","BillingCity":"Lisbon","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"5.94"}
|
||||
{"InvoiceId":74,"CustomerId":40,"InvoiceDate":"2009-11-11T23:00:00.000Z","BillingAddress":"8, Rue Hanovre","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75002","Total":"8.91"}
|
||||
{"InvoiceId":75,"CustomerId":49,"InvoiceDate":"2009-11-16T23:00:00.000Z","BillingAddress":"Ordynacka 10","BillingCity":"Warsaw","BillingState":null,"BillingCountry":"Poland","BillingPostalCode":"00-358","Total":"13.86"}
|
||||
{"InvoiceId":76,"CustomerId":4,"InvoiceDate":"2009-11-24T23:00:00.000Z","BillingAddress":"Ullevĺlsveien 14","BillingCity":"Oslo","BillingState":null,"BillingCountry":"Norway","BillingPostalCode":"0171","Total":"0.99"}
|
||||
{"InvoiceId":77,"CustomerId":5,"InvoiceDate":"2009-12-07T23:00:00.000Z","BillingAddress":"Klanova 9/506","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14700","Total":"1.98"}
|
||||
{"InvoiceId":78,"CustomerId":7,"InvoiceDate":"2009-12-07T23:00:00.000Z","BillingAddress":"Rotenturmstraße 4, 1010 Innere Stadt","BillingCity":"Vienne","BillingState":null,"BillingCountry":"Austria","BillingPostalCode":"1010","Total":"1.98"}
|
||||
{"InvoiceId":79,"CustomerId":9,"InvoiceDate":"2009-12-08T23:00:00.000Z","BillingAddress":"Sřnder Boulevard 51","BillingCity":"Copenhagen","BillingState":null,"BillingCountry":"Denmark","BillingPostalCode":"1720","Total":"3.96"}
|
||||
{"InvoiceId":80,"CustomerId":13,"InvoiceDate":"2009-12-09T23:00:00.000Z","BillingAddress":"Qe 7 Bloco G","BillingCity":"Brasília","BillingState":"DF","BillingCountry":"Brazil","BillingPostalCode":"71020-677","Total":"5.94"}
|
||||
{"InvoiceId":81,"CustomerId":19,"InvoiceDate":"2009-12-12T23:00:00.000Z","BillingAddress":"1 Infinite Loop","BillingCity":"Cupertino","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"95014","Total":"8.91"}
|
||||
{"InvoiceId":82,"CustomerId":28,"InvoiceDate":"2009-12-17T23:00:00.000Z","BillingAddress":"302 S 700 E","BillingCity":"Salt Lake City","BillingState":"UT","BillingCountry":"USA","BillingPostalCode":"84102","Total":"13.86"}
|
||||
{"InvoiceId":83,"CustomerId":42,"InvoiceDate":"2009-12-25T23:00:00.000Z","BillingAddress":"9, Place Louis Barthou","BillingCity":"Bordeaux","BillingState":null,"BillingCountry":"France","BillingPostalCode":"33000","Total":"0.99"}
|
||||
{"InvoiceId":84,"CustomerId":43,"InvoiceDate":"2010-01-07T23:00:00.000Z","BillingAddress":"68, Rue Jouvence","BillingCity":"Dijon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"21000","Total":"1.98"}
|
||||
{"InvoiceId":85,"CustomerId":45,"InvoiceDate":"2010-01-07T23:00:00.000Z","BillingAddress":"Erzsébet krt. 58.","BillingCity":"Budapest","BillingState":null,"BillingCountry":"Hungary","BillingPostalCode":"H-1073","Total":"1.98"}
|
||||
{"InvoiceId":86,"CustomerId":47,"InvoiceDate":"2010-01-08T23:00:00.000Z","BillingAddress":"Via Degli Scipioni, 43","BillingCity":"Rome","BillingState":"RM","BillingCountry":"Italy","BillingPostalCode":"00192","Total":"3.96"}
|
||||
{"InvoiceId":87,"CustomerId":51,"InvoiceDate":"2010-01-09T23:00:00.000Z","BillingAddress":"Celsiusg. 9","BillingCity":"Stockholm","BillingState":null,"BillingCountry":"Sweden","BillingPostalCode":"11230","Total":"6.94"}
|
||||
{"InvoiceId":88,"CustomerId":57,"InvoiceDate":"2010-01-12T23:00:00.000Z","BillingAddress":"Calle Lira, 198","BillingCity":"Santiago","BillingState":null,"BillingCountry":"Chile","BillingPostalCode":null,"Total":"17.91"}
|
||||
{"InvoiceId":89,"CustomerId":7,"InvoiceDate":"2010-01-17T23:00:00.000Z","BillingAddress":"Rotenturmstraße 4, 1010 Innere Stadt","BillingCity":"Vienne","BillingState":null,"BillingCountry":"Austria","BillingPostalCode":"1010","Total":"18.86"}
|
||||
{"InvoiceId":90,"CustomerId":21,"InvoiceDate":"2010-01-25T23:00:00.000Z","BillingAddress":"801 W 4th Street","BillingCity":"Reno","BillingState":"NV","BillingCountry":"USA","BillingPostalCode":"89503","Total":"0.99"}
|
||||
{"InvoiceId":91,"CustomerId":22,"InvoiceDate":"2010-02-07T23:00:00.000Z","BillingAddress":"120 S Orange Ave","BillingCity":"Orlando","BillingState":"FL","BillingCountry":"USA","BillingPostalCode":"32801","Total":"1.98"}
|
||||
{"InvoiceId":92,"CustomerId":24,"InvoiceDate":"2010-02-07T23:00:00.000Z","BillingAddress":"162 E Superior Street","BillingCity":"Chicago","BillingState":"IL","BillingCountry":"USA","BillingPostalCode":"60611","Total":"1.98"}
|
||||
{"InvoiceId":93,"CustomerId":26,"InvoiceDate":"2010-02-08T23:00:00.000Z","BillingAddress":"2211 W Berry Street","BillingCity":"Fort Worth","BillingState":"TX","BillingCountry":"USA","BillingPostalCode":"76110","Total":"3.96"}
|
||||
{"InvoiceId":94,"CustomerId":30,"InvoiceDate":"2010-02-09T23:00:00.000Z","BillingAddress":"230 Elgin Street","BillingCity":"Ottawa","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"K2P 1L7","Total":"5.94"}
|
||||
{"InvoiceId":95,"CustomerId":36,"InvoiceDate":"2010-02-12T23:00:00.000Z","BillingAddress":"Tauentzienstraße 8","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10789","Total":"8.91"}
|
||||
{"InvoiceId":96,"CustomerId":45,"InvoiceDate":"2010-02-17T23:00:00.000Z","BillingAddress":"Erzsébet krt. 58.","BillingCity":"Budapest","BillingState":null,"BillingCountry":"Hungary","BillingPostalCode":"H-1073","Total":"21.86"}
|
||||
{"InvoiceId":97,"CustomerId":59,"InvoiceDate":"2010-02-25T23:00:00.000Z","BillingAddress":"3,Raj Bhavan Road","BillingCity":"Bangalore","BillingState":null,"BillingCountry":"India","BillingPostalCode":"560001","Total":"1.99"}
|
||||
{"InvoiceId":98,"CustomerId":1,"InvoiceDate":"2010-03-10T23:00:00.000Z","BillingAddress":"Av. Brigadeiro Faria Lima, 2170","BillingCity":"Săo José dos Campos","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"12227-000","Total":"3.98"}
|
||||
{"InvoiceId":99,"CustomerId":3,"InvoiceDate":"2010-03-10T23:00:00.000Z","BillingAddress":"1498 rue Bélanger","BillingCity":"Montréal","BillingState":"QC","BillingCountry":"Canada","BillingPostalCode":"H2G 1A7","Total":"3.98"}
|
||||
{"InvoiceId":100,"CustomerId":5,"InvoiceDate":"2010-03-11T23:00:00.000Z","BillingAddress":"Klanova 9/506","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14700","Total":"3.96"}
|
||||
{"InvoiceId":101,"CustomerId":9,"InvoiceDate":"2010-03-12T23:00:00.000Z","BillingAddress":"Sřnder Boulevard 51","BillingCity":"Copenhagen","BillingState":null,"BillingCountry":"Denmark","BillingPostalCode":"1720","Total":"5.94"}
|
||||
{"InvoiceId":102,"CustomerId":15,"InvoiceDate":"2010-03-15T23:00:00.000Z","BillingAddress":"700 W Pender Street","BillingCity":"Vancouver","BillingState":"BC","BillingCountry":"Canada","BillingPostalCode":"V6C 1G8","Total":"9.91"}
|
||||
{"InvoiceId":103,"CustomerId":24,"InvoiceDate":"2010-03-20T23:00:00.000Z","BillingAddress":"162 E Superior Street","BillingCity":"Chicago","BillingState":"IL","BillingCountry":"USA","BillingPostalCode":"60611","Total":"15.86"}
|
||||
{"InvoiceId":104,"CustomerId":38,"InvoiceDate":"2010-03-28T22:00:00.000Z","BillingAddress":"Barbarossastraße 19","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10779","Total":"0.99"}
|
||||
{"InvoiceId":105,"CustomerId":39,"InvoiceDate":"2010-04-10T22:00:00.000Z","BillingAddress":"4, Rue Milton","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75009","Total":"1.98"}
|
||||
{"InvoiceId":106,"CustomerId":41,"InvoiceDate":"2010-04-10T22:00:00.000Z","BillingAddress":"11, Place Bellecour","BillingCity":"Lyon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"69002","Total":"1.98"}
|
||||
{"InvoiceId":107,"CustomerId":43,"InvoiceDate":"2010-04-11T22:00:00.000Z","BillingAddress":"68, Rue Jouvence","BillingCity":"Dijon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"21000","Total":"3.96"}
|
||||
{"InvoiceId":108,"CustomerId":47,"InvoiceDate":"2010-04-12T22:00:00.000Z","BillingAddress":"Via Degli Scipioni, 43","BillingCity":"Rome","BillingState":"RM","BillingCountry":"Italy","BillingPostalCode":"00192","Total":"5.94"}
|
||||
{"InvoiceId":109,"CustomerId":53,"InvoiceDate":"2010-04-15T22:00:00.000Z","BillingAddress":"113 Lupus St","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"SW1V 3EN","Total":"8.91"}
|
||||
{"InvoiceId":110,"CustomerId":3,"InvoiceDate":"2010-04-20T22:00:00.000Z","BillingAddress":"1498 rue Bélanger","BillingCity":"Montréal","BillingState":"QC","BillingCountry":"Canada","BillingPostalCode":"H2G 1A7","Total":"13.86"}
|
||||
{"InvoiceId":111,"CustomerId":17,"InvoiceDate":"2010-04-28T22:00:00.000Z","BillingAddress":"1 Microsoft Way","BillingCity":"Redmond","BillingState":"WA","BillingCountry":"USA","BillingPostalCode":"98052-8300","Total":"0.99"}
|
||||
{"InvoiceId":112,"CustomerId":18,"InvoiceDate":"2010-05-11T22:00:00.000Z","BillingAddress":"627 Broadway","BillingCity":"New York","BillingState":"NY","BillingCountry":"USA","BillingPostalCode":"10012-2612","Total":"1.98"}
|
||||
{"InvoiceId":113,"CustomerId":20,"InvoiceDate":"2010-05-11T22:00:00.000Z","BillingAddress":"541 Del Medio Avenue","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94040-111","Total":"1.98"}
|
||||
{"InvoiceId":114,"CustomerId":22,"InvoiceDate":"2010-05-12T22:00:00.000Z","BillingAddress":"120 S Orange Ave","BillingCity":"Orlando","BillingState":"FL","BillingCountry":"USA","BillingPostalCode":"32801","Total":"3.96"}
|
||||
{"InvoiceId":115,"CustomerId":26,"InvoiceDate":"2010-05-13T22:00:00.000Z","BillingAddress":"2211 W Berry Street","BillingCity":"Fort Worth","BillingState":"TX","BillingCountry":"USA","BillingPostalCode":"76110","Total":"5.94"}
|
||||
{"InvoiceId":116,"CustomerId":32,"InvoiceDate":"2010-05-16T22:00:00.000Z","BillingAddress":"696 Osborne Street","BillingCity":"Winnipeg","BillingState":"MB","BillingCountry":"Canada","BillingPostalCode":"R3L 2B9","Total":"8.91"}
|
||||
{"InvoiceId":117,"CustomerId":41,"InvoiceDate":"2010-05-21T22:00:00.000Z","BillingAddress":"11, Place Bellecour","BillingCity":"Lyon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"69002","Total":"13.86"}
|
||||
{"InvoiceId":118,"CustomerId":55,"InvoiceDate":"2010-05-29T22:00:00.000Z","BillingAddress":"421 Bourke Street","BillingCity":"Sidney","BillingState":"NSW","BillingCountry":"Australia","BillingPostalCode":"2010","Total":"0.99"}
|
||||
{"InvoiceId":119,"CustomerId":56,"InvoiceDate":"2010-06-11T22:00:00.000Z","BillingAddress":"307 Macacha Güemes","BillingCity":"Buenos Aires","BillingState":null,"BillingCountry":"Argentina","BillingPostalCode":"1106","Total":"1.98"}
|
||||
{"InvoiceId":120,"CustomerId":58,"InvoiceDate":"2010-06-11T22:00:00.000Z","BillingAddress":"12,Community Centre","BillingCity":"Delhi","BillingState":null,"BillingCountry":"India","BillingPostalCode":"110017","Total":"1.98"}
|
||||
{"InvoiceId":121,"CustomerId":1,"InvoiceDate":"2010-06-12T22:00:00.000Z","BillingAddress":"Av. Brigadeiro Faria Lima, 2170","BillingCity":"Săo José dos Campos","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"12227-000","Total":"3.96"}
|
||||
{"InvoiceId":122,"CustomerId":5,"InvoiceDate":"2010-06-13T22:00:00.000Z","BillingAddress":"Klanova 9/506","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14700","Total":"5.94"}
|
||||
{"InvoiceId":123,"CustomerId":11,"InvoiceDate":"2010-06-16T22:00:00.000Z","BillingAddress":"Av. Paulista, 2022","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01310-200","Total":"8.91"}
|
||||
{"InvoiceId":124,"CustomerId":20,"InvoiceDate":"2010-06-21T22:00:00.000Z","BillingAddress":"541 Del Medio Avenue","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94040-111","Total":"13.86"}
|
||||
{"InvoiceId":125,"CustomerId":34,"InvoiceDate":"2010-06-29T22:00:00.000Z","BillingAddress":"Rua da Assunçăo 53","BillingCity":"Lisbon","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"0.99"}
|
||||
{"InvoiceId":126,"CustomerId":35,"InvoiceDate":"2010-07-12T22:00:00.000Z","BillingAddress":"Rua dos Campeőes Europeus de Viena, 4350","BillingCity":"Porto","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"1.98"}
|
||||
{"InvoiceId":127,"CustomerId":37,"InvoiceDate":"2010-07-12T22:00:00.000Z","BillingAddress":"Berger Straße 10","BillingCity":"Frankfurt","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"60316","Total":"1.98"}
|
||||
{"InvoiceId":128,"CustomerId":39,"InvoiceDate":"2010-07-13T22:00:00.000Z","BillingAddress":"4, Rue Milton","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75009","Total":"3.96"}
|
||||
{"InvoiceId":129,"CustomerId":43,"InvoiceDate":"2010-07-14T22:00:00.000Z","BillingAddress":"68, Rue Jouvence","BillingCity":"Dijon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"21000","Total":"5.94"}
|
||||
{"InvoiceId":130,"CustomerId":49,"InvoiceDate":"2010-07-17T22:00:00.000Z","BillingAddress":"Ordynacka 10","BillingCity":"Warsaw","BillingState":null,"BillingCountry":"Poland","BillingPostalCode":"00-358","Total":"8.91"}
|
||||
{"InvoiceId":131,"CustomerId":58,"InvoiceDate":"2010-07-22T22:00:00.000Z","BillingAddress":"12,Community Centre","BillingCity":"Delhi","BillingState":null,"BillingCountry":"India","BillingPostalCode":"110017","Total":"13.86"}
|
||||
{"InvoiceId":132,"CustomerId":13,"InvoiceDate":"2010-07-30T22:00:00.000Z","BillingAddress":"Qe 7 Bloco G","BillingCity":"Brasília","BillingState":"DF","BillingCountry":"Brazil","BillingPostalCode":"71020-677","Total":"0.99"}
|
||||
{"InvoiceId":133,"CustomerId":14,"InvoiceDate":"2010-08-12T22:00:00.000Z","BillingAddress":"8210 111 ST NW","BillingCity":"Edmonton","BillingState":"AB","BillingCountry":"Canada","BillingPostalCode":"T6G 2C7","Total":"1.98"}
|
||||
{"InvoiceId":134,"CustomerId":16,"InvoiceDate":"2010-08-12T22:00:00.000Z","BillingAddress":"1600 Amphitheatre Parkway","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94043-1351","Total":"1.98"}
|
||||
{"InvoiceId":135,"CustomerId":18,"InvoiceDate":"2010-08-13T22:00:00.000Z","BillingAddress":"627 Broadway","BillingCity":"New York","BillingState":"NY","BillingCountry":"USA","BillingPostalCode":"10012-2612","Total":"3.96"}
|
||||
{"InvoiceId":136,"CustomerId":22,"InvoiceDate":"2010-08-14T22:00:00.000Z","BillingAddress":"120 S Orange Ave","BillingCity":"Orlando","BillingState":"FL","BillingCountry":"USA","BillingPostalCode":"32801","Total":"5.94"}
|
||||
{"InvoiceId":137,"CustomerId":28,"InvoiceDate":"2010-08-17T22:00:00.000Z","BillingAddress":"302 S 700 E","BillingCity":"Salt Lake City","BillingState":"UT","BillingCountry":"USA","BillingPostalCode":"84102","Total":"8.91"}
|
||||
{"InvoiceId":138,"CustomerId":37,"InvoiceDate":"2010-08-22T22:00:00.000Z","BillingAddress":"Berger Straße 10","BillingCity":"Frankfurt","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"60316","Total":"13.86"}
|
||||
{"InvoiceId":139,"CustomerId":51,"InvoiceDate":"2010-08-30T22:00:00.000Z","BillingAddress":"Celsiusg. 9","BillingCity":"Stockholm","BillingState":null,"BillingCountry":"Sweden","BillingPostalCode":"11230","Total":"0.99"}
|
||||
{"InvoiceId":140,"CustomerId":52,"InvoiceDate":"2010-09-12T22:00:00.000Z","BillingAddress":"202 Hoxton Street","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"N1 5LH","Total":"1.98"}
|
||||
{"InvoiceId":141,"CustomerId":54,"InvoiceDate":"2010-09-12T22:00:00.000Z","BillingAddress":"110 Raeburn Pl","BillingCity":"Edinburgh","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"EH4 1HH","Total":"1.98"}
|
||||
{"InvoiceId":142,"CustomerId":56,"InvoiceDate":"2010-09-13T22:00:00.000Z","BillingAddress":"307 Macacha Güemes","BillingCity":"Buenos Aires","BillingState":null,"BillingCountry":"Argentina","BillingPostalCode":"1106","Total":"3.96"}
|
||||
{"InvoiceId":143,"CustomerId":1,"InvoiceDate":"2010-09-14T22:00:00.000Z","BillingAddress":"Av. Brigadeiro Faria Lima, 2170","BillingCity":"Săo José dos Campos","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"12227-000","Total":"5.94"}
|
||||
{"InvoiceId":144,"CustomerId":7,"InvoiceDate":"2010-09-17T22:00:00.000Z","BillingAddress":"Rotenturmstraße 4, 1010 Innere Stadt","BillingCity":"Vienne","BillingState":null,"BillingCountry":"Austria","BillingPostalCode":"1010","Total":"8.91"}
|
||||
{"InvoiceId":145,"CustomerId":16,"InvoiceDate":"2010-09-22T22:00:00.000Z","BillingAddress":"1600 Amphitheatre Parkway","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94043-1351","Total":"13.86"}
|
||||
{"InvoiceId":146,"CustomerId":30,"InvoiceDate":"2010-09-30T22:00:00.000Z","BillingAddress":"230 Elgin Street","BillingCity":"Ottawa","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"K2P 1L7","Total":"0.99"}
|
||||
{"InvoiceId":147,"CustomerId":31,"InvoiceDate":"2010-10-13T22:00:00.000Z","BillingAddress":"194A Chain Lake Drive","BillingCity":"Halifax","BillingState":"NS","BillingCountry":"Canada","BillingPostalCode":"B3S 1C5","Total":"1.98"}
|
||||
{"InvoiceId":148,"CustomerId":33,"InvoiceDate":"2010-10-13T22:00:00.000Z","BillingAddress":"5112 48 Street","BillingCity":"Yellowknife","BillingState":"NT","BillingCountry":"Canada","BillingPostalCode":"X1A 1N6","Total":"1.98"}
|
||||
{"InvoiceId":149,"CustomerId":35,"InvoiceDate":"2010-10-14T22:00:00.000Z","BillingAddress":"Rua dos Campeőes Europeus de Viena, 4350","BillingCity":"Porto","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"3.96"}
|
||||
{"InvoiceId":150,"CustomerId":39,"InvoiceDate":"2010-10-15T22:00:00.000Z","BillingAddress":"4, Rue Milton","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75009","Total":"5.94"}
|
||||
{"InvoiceId":151,"CustomerId":45,"InvoiceDate":"2010-10-18T22:00:00.000Z","BillingAddress":"Erzsébet krt. 58.","BillingCity":"Budapest","BillingState":null,"BillingCountry":"Hungary","BillingPostalCode":"H-1073","Total":"8.91"}
|
||||
{"InvoiceId":152,"CustomerId":54,"InvoiceDate":"2010-10-23T22:00:00.000Z","BillingAddress":"110 Raeburn Pl","BillingCity":"Edinburgh","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"EH4 1HH","Total":"13.86"}
|
||||
{"InvoiceId":153,"CustomerId":9,"InvoiceDate":"2010-10-31T23:00:00.000Z","BillingAddress":"Sřnder Boulevard 51","BillingCity":"Copenhagen","BillingState":null,"BillingCountry":"Denmark","BillingPostalCode":"1720","Total":"0.99"}
|
||||
{"InvoiceId":154,"CustomerId":10,"InvoiceDate":"2010-11-13T23:00:00.000Z","BillingAddress":"Rua Dr. Falcăo Filho, 155","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01007-010","Total":"1.98"}
|
||||
{"InvoiceId":155,"CustomerId":12,"InvoiceDate":"2010-11-13T23:00:00.000Z","BillingAddress":"Praça Pio X, 119","BillingCity":"Rio de Janeiro","BillingState":"RJ","BillingCountry":"Brazil","BillingPostalCode":"20040-020","Total":"1.98"}
|
||||
{"InvoiceId":156,"CustomerId":14,"InvoiceDate":"2010-11-14T23:00:00.000Z","BillingAddress":"8210 111 ST NW","BillingCity":"Edmonton","BillingState":"AB","BillingCountry":"Canada","BillingPostalCode":"T6G 2C7","Total":"3.96"}
|
||||
{"InvoiceId":157,"CustomerId":18,"InvoiceDate":"2010-11-15T23:00:00.000Z","BillingAddress":"627 Broadway","BillingCity":"New York","BillingState":"NY","BillingCountry":"USA","BillingPostalCode":"10012-2612","Total":"5.94"}
|
||||
{"InvoiceId":158,"CustomerId":24,"InvoiceDate":"2010-11-18T23:00:00.000Z","BillingAddress":"162 E Superior Street","BillingCity":"Chicago","BillingState":"IL","BillingCountry":"USA","BillingPostalCode":"60611","Total":"8.91"}
|
||||
{"InvoiceId":159,"CustomerId":33,"InvoiceDate":"2010-11-23T23:00:00.000Z","BillingAddress":"5112 48 Street","BillingCity":"Yellowknife","BillingState":"NT","BillingCountry":"Canada","BillingPostalCode":"X1A 1N6","Total":"13.86"}
|
||||
{"InvoiceId":160,"CustomerId":47,"InvoiceDate":"2010-12-01T23:00:00.000Z","BillingAddress":"Via Degli Scipioni, 43","BillingCity":"Rome","BillingState":"RM","BillingCountry":"Italy","BillingPostalCode":"00192","Total":"0.99"}
|
||||
{"InvoiceId":161,"CustomerId":48,"InvoiceDate":"2010-12-14T23:00:00.000Z","BillingAddress":"Lijnbaansgracht 120bg","BillingCity":"Amsterdam","BillingState":"VV","BillingCountry":"Netherlands","BillingPostalCode":"1016","Total":"1.98"}
|
||||
{"InvoiceId":162,"CustomerId":50,"InvoiceDate":"2010-12-14T23:00:00.000Z","BillingAddress":"C/ San Bernardo 85","BillingCity":"Madrid","BillingState":null,"BillingCountry":"Spain","BillingPostalCode":"28015","Total":"1.98"}
|
||||
{"InvoiceId":163,"CustomerId":52,"InvoiceDate":"2010-12-15T23:00:00.000Z","BillingAddress":"202 Hoxton Street","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"N1 5LH","Total":"3.96"}
|
||||
{"InvoiceId":164,"CustomerId":56,"InvoiceDate":"2010-12-16T23:00:00.000Z","BillingAddress":"307 Macacha Güemes","BillingCity":"Buenos Aires","BillingState":null,"BillingCountry":"Argentina","BillingPostalCode":"1106","Total":"5.94"}
|
||||
{"InvoiceId":165,"CustomerId":3,"InvoiceDate":"2010-12-19T23:00:00.000Z","BillingAddress":"1498 rue Bélanger","BillingCity":"Montréal","BillingState":"QC","BillingCountry":"Canada","BillingPostalCode":"H2G 1A7","Total":"8.91"}
|
||||
{"InvoiceId":166,"CustomerId":12,"InvoiceDate":"2010-12-24T23:00:00.000Z","BillingAddress":"Praça Pio X, 119","BillingCity":"Rio de Janeiro","BillingState":"RJ","BillingCountry":"Brazil","BillingPostalCode":"20040-020","Total":"13.86"}
|
||||
{"InvoiceId":167,"CustomerId":26,"InvoiceDate":"2011-01-01T23:00:00.000Z","BillingAddress":"2211 W Berry Street","BillingCity":"Fort Worth","BillingState":"TX","BillingCountry":"USA","BillingPostalCode":"76110","Total":"0.99"}
|
||||
{"InvoiceId":168,"CustomerId":27,"InvoiceDate":"2011-01-14T23:00:00.000Z","BillingAddress":"1033 N Park Ave","BillingCity":"Tucson","BillingState":"AZ","BillingCountry":"USA","BillingPostalCode":"85719","Total":"1.98"}
|
||||
{"InvoiceId":169,"CustomerId":29,"InvoiceDate":"2011-01-14T23:00:00.000Z","BillingAddress":"796 Dundas Street West","BillingCity":"Toronto","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"M6J 1V1","Total":"1.98"}
|
||||
{"InvoiceId":170,"CustomerId":31,"InvoiceDate":"2011-01-15T23:00:00.000Z","BillingAddress":"194A Chain Lake Drive","BillingCity":"Halifax","BillingState":"NS","BillingCountry":"Canada","BillingPostalCode":"B3S 1C5","Total":"3.96"}
|
||||
{"InvoiceId":171,"CustomerId":35,"InvoiceDate":"2011-01-16T23:00:00.000Z","BillingAddress":"Rua dos Campeőes Europeus de Viena, 4350","BillingCity":"Porto","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"5.94"}
|
||||
{"InvoiceId":172,"CustomerId":41,"InvoiceDate":"2011-01-19T23:00:00.000Z","BillingAddress":"11, Place Bellecour","BillingCity":"Lyon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"69002","Total":"8.91"}
|
||||
{"InvoiceId":173,"CustomerId":50,"InvoiceDate":"2011-01-24T23:00:00.000Z","BillingAddress":"C/ San Bernardo 85","BillingCity":"Madrid","BillingState":null,"BillingCountry":"Spain","BillingPostalCode":"28015","Total":"13.86"}
|
||||
{"InvoiceId":174,"CustomerId":5,"InvoiceDate":"2011-02-01T23:00:00.000Z","BillingAddress":"Klanova 9/506","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14700","Total":"0.99"}
|
||||
{"InvoiceId":175,"CustomerId":6,"InvoiceDate":"2011-02-14T23:00:00.000Z","BillingAddress":"Rilská 3174/6","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14300","Total":"1.98"}
|
||||
{"InvoiceId":176,"CustomerId":8,"InvoiceDate":"2011-02-14T23:00:00.000Z","BillingAddress":"Grétrystraat 63","BillingCity":"Brussels","BillingState":null,"BillingCountry":"Belgium","BillingPostalCode":"1000","Total":"1.98"}
|
||||
{"InvoiceId":177,"CustomerId":10,"InvoiceDate":"2011-02-15T23:00:00.000Z","BillingAddress":"Rua Dr. Falcăo Filho, 155","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01007-010","Total":"3.96"}
|
||||
{"InvoiceId":178,"CustomerId":14,"InvoiceDate":"2011-02-16T23:00:00.000Z","BillingAddress":"8210 111 ST NW","BillingCity":"Edmonton","BillingState":"AB","BillingCountry":"Canada","BillingPostalCode":"T6G 2C7","Total":"5.94"}
|
||||
{"InvoiceId":179,"CustomerId":20,"InvoiceDate":"2011-02-19T23:00:00.000Z","BillingAddress":"541 Del Medio Avenue","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94040-111","Total":"8.91"}
|
||||
{"InvoiceId":180,"CustomerId":29,"InvoiceDate":"2011-02-24T23:00:00.000Z","BillingAddress":"796 Dundas Street West","BillingCity":"Toronto","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"M6J 1V1","Total":"13.86"}
|
||||
{"InvoiceId":181,"CustomerId":43,"InvoiceDate":"2011-03-04T23:00:00.000Z","BillingAddress":"68, Rue Jouvence","BillingCity":"Dijon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"21000","Total":"0.99"}
|
||||
{"InvoiceId":182,"CustomerId":44,"InvoiceDate":"2011-03-17T23:00:00.000Z","BillingAddress":"Porthaninkatu 9","BillingCity":"Helsinki","BillingState":null,"BillingCountry":"Finland","BillingPostalCode":"00530","Total":"1.98"}
|
||||
{"InvoiceId":183,"CustomerId":46,"InvoiceDate":"2011-03-17T23:00:00.000Z","BillingAddress":"3 Chatham Street","BillingCity":"Dublin","BillingState":"Dublin","BillingCountry":"Ireland","BillingPostalCode":null,"Total":"1.98"}
|
||||
{"InvoiceId":184,"CustomerId":48,"InvoiceDate":"2011-03-18T23:00:00.000Z","BillingAddress":"Lijnbaansgracht 120bg","BillingCity":"Amsterdam","BillingState":"VV","BillingCountry":"Netherlands","BillingPostalCode":"1016","Total":"3.96"}
|
||||
{"InvoiceId":185,"CustomerId":52,"InvoiceDate":"2011-03-19T23:00:00.000Z","BillingAddress":"202 Hoxton Street","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"N1 5LH","Total":"5.94"}
|
||||
{"InvoiceId":186,"CustomerId":58,"InvoiceDate":"2011-03-22T23:00:00.000Z","BillingAddress":"12,Community Centre","BillingCity":"Delhi","BillingState":null,"BillingCountry":"India","BillingPostalCode":"110017","Total":"8.91"}
|
||||
{"InvoiceId":187,"CustomerId":8,"InvoiceDate":"2011-03-27T22:00:00.000Z","BillingAddress":"Grétrystraat 63","BillingCity":"Brussels","BillingState":null,"BillingCountry":"Belgium","BillingPostalCode":"1000","Total":"13.86"}
|
||||
{"InvoiceId":188,"CustomerId":22,"InvoiceDate":"2011-04-04T22:00:00.000Z","BillingAddress":"120 S Orange Ave","BillingCity":"Orlando","BillingState":"FL","BillingCountry":"USA","BillingPostalCode":"32801","Total":"0.99"}
|
||||
{"InvoiceId":189,"CustomerId":23,"InvoiceDate":"2011-04-17T22:00:00.000Z","BillingAddress":"69 Salem Street","BillingCity":"Boston","BillingState":"MA","BillingCountry":"USA","BillingPostalCode":"2113","Total":"1.98"}
|
||||
{"InvoiceId":190,"CustomerId":25,"InvoiceDate":"2011-04-17T22:00:00.000Z","BillingAddress":"319 N. Frances Street","BillingCity":"Madison","BillingState":"WI","BillingCountry":"USA","BillingPostalCode":"53703","Total":"1.98"}
|
||||
{"InvoiceId":191,"CustomerId":27,"InvoiceDate":"2011-04-18T22:00:00.000Z","BillingAddress":"1033 N Park Ave","BillingCity":"Tucson","BillingState":"AZ","BillingCountry":"USA","BillingPostalCode":"85719","Total":"3.96"}
|
||||
{"InvoiceId":192,"CustomerId":31,"InvoiceDate":"2011-04-19T22:00:00.000Z","BillingAddress":"194A Chain Lake Drive","BillingCity":"Halifax","BillingState":"NS","BillingCountry":"Canada","BillingPostalCode":"B3S 1C5","Total":"5.94"}
|
||||
{"InvoiceId":193,"CustomerId":37,"InvoiceDate":"2011-04-22T22:00:00.000Z","BillingAddress":"Berger Straße 10","BillingCity":"Frankfurt","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"60316","Total":"14.91"}
|
||||
{"InvoiceId":194,"CustomerId":46,"InvoiceDate":"2011-04-27T22:00:00.000Z","BillingAddress":"3 Chatham Street","BillingCity":"Dublin","BillingState":"Dublin","BillingCountry":"Ireland","BillingPostalCode":null,"Total":"21.86"}
|
||||
{"InvoiceId":195,"CustomerId":1,"InvoiceDate":"2011-05-05T22:00:00.000Z","BillingAddress":"Av. Brigadeiro Faria Lima, 2170","BillingCity":"Săo José dos Campos","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"12227-000","Total":"0.99"}
|
||||
{"InvoiceId":196,"CustomerId":2,"InvoiceDate":"2011-05-18T22:00:00.000Z","BillingAddress":"Theodor-Heuss-Straße 34","BillingCity":"Stuttgart","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"70174","Total":"1.98"}
|
||||
{"InvoiceId":197,"CustomerId":4,"InvoiceDate":"2011-05-18T22:00:00.000Z","BillingAddress":"Ullevĺlsveien 14","BillingCity":"Oslo","BillingState":null,"BillingCountry":"Norway","BillingPostalCode":"0171","Total":"1.98"}
|
||||
{"InvoiceId":198,"CustomerId":6,"InvoiceDate":"2011-05-19T22:00:00.000Z","BillingAddress":"Rilská 3174/6","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14300","Total":"3.96"}
|
||||
{"InvoiceId":199,"CustomerId":10,"InvoiceDate":"2011-05-20T22:00:00.000Z","BillingAddress":"Rua Dr. Falcăo Filho, 155","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01007-010","Total":"5.94"}
|
||||
{"InvoiceId":200,"CustomerId":16,"InvoiceDate":"2011-05-23T22:00:00.000Z","BillingAddress":"1600 Amphitheatre Parkway","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94043-1351","Total":"8.91"}
|
||||
{"InvoiceId":201,"CustomerId":25,"InvoiceDate":"2011-05-28T22:00:00.000Z","BillingAddress":"319 N. Frances Street","BillingCity":"Madison","BillingState":"WI","BillingCountry":"USA","BillingPostalCode":"53703","Total":"18.86"}
|
||||
{"InvoiceId":202,"CustomerId":39,"InvoiceDate":"2011-06-05T22:00:00.000Z","BillingAddress":"4, Rue Milton","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75009","Total":"1.99"}
|
||||
{"InvoiceId":203,"CustomerId":40,"InvoiceDate":"2011-06-18T22:00:00.000Z","BillingAddress":"8, Rue Hanovre","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75002","Total":"2.98"}
|
||||
{"InvoiceId":204,"CustomerId":42,"InvoiceDate":"2011-06-18T22:00:00.000Z","BillingAddress":"9, Place Louis Barthou","BillingCity":"Bordeaux","BillingState":null,"BillingCountry":"France","BillingPostalCode":"33000","Total":"3.98"}
|
||||
{"InvoiceId":205,"CustomerId":44,"InvoiceDate":"2011-06-19T22:00:00.000Z","BillingAddress":"Porthaninkatu 9","BillingCity":"Helsinki","BillingState":null,"BillingCountry":"Finland","BillingPostalCode":"00530","Total":"7.96"}
|
||||
{"InvoiceId":206,"CustomerId":48,"InvoiceDate":"2011-06-20T22:00:00.000Z","BillingAddress":"Lijnbaansgracht 120bg","BillingCity":"Amsterdam","BillingState":"VV","BillingCountry":"Netherlands","BillingPostalCode":"1016","Total":"8.94"}
|
||||
{"InvoiceId":207,"CustomerId":54,"InvoiceDate":"2011-06-23T22:00:00.000Z","BillingAddress":"110 Raeburn Pl","BillingCity":"Edinburgh","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"EH4 1HH","Total":"8.91"}
|
||||
{"InvoiceId":208,"CustomerId":4,"InvoiceDate":"2011-06-28T22:00:00.000Z","BillingAddress":"Ullevĺlsveien 14","BillingCity":"Oslo","BillingState":null,"BillingCountry":"Norway","BillingPostalCode":"0171","Total":"15.86"}
|
||||
{"InvoiceId":209,"CustomerId":18,"InvoiceDate":"2011-07-06T22:00:00.000Z","BillingAddress":"627 Broadway","BillingCity":"New York","BillingState":"NY","BillingCountry":"USA","BillingPostalCode":"10012-2612","Total":"0.99"}
|
||||
{"InvoiceId":210,"CustomerId":19,"InvoiceDate":"2011-07-19T22:00:00.000Z","BillingAddress":"1 Infinite Loop","BillingCity":"Cupertino","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"95014","Total":"1.98"}
|
||||
{"InvoiceId":211,"CustomerId":21,"InvoiceDate":"2011-07-19T22:00:00.000Z","BillingAddress":"801 W 4th Street","BillingCity":"Reno","BillingState":"NV","BillingCountry":"USA","BillingPostalCode":"89503","Total":"1.98"}
|
||||
{"InvoiceId":212,"CustomerId":23,"InvoiceDate":"2011-07-20T22:00:00.000Z","BillingAddress":"69 Salem Street","BillingCity":"Boston","BillingState":"MA","BillingCountry":"USA","BillingPostalCode":"2113","Total":"3.96"}
|
||||
{"InvoiceId":213,"CustomerId":27,"InvoiceDate":"2011-07-21T22:00:00.000Z","BillingAddress":"1033 N Park Ave","BillingCity":"Tucson","BillingState":"AZ","BillingCountry":"USA","BillingPostalCode":"85719","Total":"5.94"}
|
||||
{"InvoiceId":214,"CustomerId":33,"InvoiceDate":"2011-07-24T22:00:00.000Z","BillingAddress":"5112 48 Street","BillingCity":"Yellowknife","BillingState":"NT","BillingCountry":"Canada","BillingPostalCode":"X1A 1N6","Total":"8.91"}
|
||||
{"InvoiceId":215,"CustomerId":42,"InvoiceDate":"2011-07-29T22:00:00.000Z","BillingAddress":"9, Place Louis Barthou","BillingCity":"Bordeaux","BillingState":null,"BillingCountry":"France","BillingPostalCode":"33000","Total":"13.86"}
|
||||
{"InvoiceId":216,"CustomerId":56,"InvoiceDate":"2011-08-06T22:00:00.000Z","BillingAddress":"307 Macacha Güemes","BillingCity":"Buenos Aires","BillingState":null,"BillingCountry":"Argentina","BillingPostalCode":"1106","Total":"0.99"}
|
||||
{"InvoiceId":217,"CustomerId":57,"InvoiceDate":"2011-08-19T22:00:00.000Z","BillingAddress":"Calle Lira, 198","BillingCity":"Santiago","BillingState":null,"BillingCountry":"Chile","BillingPostalCode":null,"Total":"1.98"}
|
||||
{"InvoiceId":218,"CustomerId":59,"InvoiceDate":"2011-08-19T22:00:00.000Z","BillingAddress":"3,Raj Bhavan Road","BillingCity":"Bangalore","BillingState":null,"BillingCountry":"India","BillingPostalCode":"560001","Total":"1.98"}
|
||||
{"InvoiceId":219,"CustomerId":2,"InvoiceDate":"2011-08-20T22:00:00.000Z","BillingAddress":"Theodor-Heuss-Straße 34","BillingCity":"Stuttgart","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"70174","Total":"3.96"}
|
||||
{"InvoiceId":220,"CustomerId":6,"InvoiceDate":"2011-08-21T22:00:00.000Z","BillingAddress":"Rilská 3174/6","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14300","Total":"5.94"}
|
||||
{"InvoiceId":221,"CustomerId":12,"InvoiceDate":"2011-08-24T22:00:00.000Z","BillingAddress":"Praça Pio X, 119","BillingCity":"Rio de Janeiro","BillingState":"RJ","BillingCountry":"Brazil","BillingPostalCode":"20040-020","Total":"8.91"}
|
||||
{"InvoiceId":222,"CustomerId":21,"InvoiceDate":"2011-08-29T22:00:00.000Z","BillingAddress":"801 W 4th Street","BillingCity":"Reno","BillingState":"NV","BillingCountry":"USA","BillingPostalCode":"89503","Total":"13.86"}
|
||||
{"InvoiceId":223,"CustomerId":35,"InvoiceDate":"2011-09-06T22:00:00.000Z","BillingAddress":"Rua dos Campeőes Europeus de Viena, 4350","BillingCity":"Porto","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"0.99"}
|
||||
{"InvoiceId":224,"CustomerId":36,"InvoiceDate":"2011-09-19T22:00:00.000Z","BillingAddress":"Tauentzienstraße 8","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10789","Total":"1.98"}
|
||||
{"InvoiceId":225,"CustomerId":38,"InvoiceDate":"2011-09-19T22:00:00.000Z","BillingAddress":"Barbarossastraße 19","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10779","Total":"1.98"}
|
||||
{"InvoiceId":226,"CustomerId":40,"InvoiceDate":"2011-09-20T22:00:00.000Z","BillingAddress":"8, Rue Hanovre","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75002","Total":"3.96"}
|
||||
{"InvoiceId":227,"CustomerId":44,"InvoiceDate":"2011-09-21T22:00:00.000Z","BillingAddress":"Porthaninkatu 9","BillingCity":"Helsinki","BillingState":null,"BillingCountry":"Finland","BillingPostalCode":"00530","Total":"5.94"}
|
||||
{"InvoiceId":228,"CustomerId":50,"InvoiceDate":"2011-09-24T22:00:00.000Z","BillingAddress":"C/ San Bernardo 85","BillingCity":"Madrid","BillingState":null,"BillingCountry":"Spain","BillingPostalCode":"28015","Total":"8.91"}
|
||||
{"InvoiceId":229,"CustomerId":59,"InvoiceDate":"2011-09-29T22:00:00.000Z","BillingAddress":"3,Raj Bhavan Road","BillingCity":"Bangalore","BillingState":null,"BillingCountry":"India","BillingPostalCode":"560001","Total":"13.86"}
|
||||
{"InvoiceId":230,"CustomerId":14,"InvoiceDate":"2011-10-07T22:00:00.000Z","BillingAddress":"8210 111 ST NW","BillingCity":"Edmonton","BillingState":"AB","BillingCountry":"Canada","BillingPostalCode":"T6G 2C7","Total":"0.99"}
|
||||
{"InvoiceId":231,"CustomerId":15,"InvoiceDate":"2011-10-20T22:00:00.000Z","BillingAddress":"700 W Pender Street","BillingCity":"Vancouver","BillingState":"BC","BillingCountry":"Canada","BillingPostalCode":"V6C 1G8","Total":"1.98"}
|
||||
{"InvoiceId":232,"CustomerId":17,"InvoiceDate":"2011-10-20T22:00:00.000Z","BillingAddress":"1 Microsoft Way","BillingCity":"Redmond","BillingState":"WA","BillingCountry":"USA","BillingPostalCode":"98052-8300","Total":"1.98"}
|
||||
{"InvoiceId":233,"CustomerId":19,"InvoiceDate":"2011-10-21T22:00:00.000Z","BillingAddress":"1 Infinite Loop","BillingCity":"Cupertino","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"95014","Total":"3.96"}
|
||||
{"InvoiceId":234,"CustomerId":23,"InvoiceDate":"2011-10-22T22:00:00.000Z","BillingAddress":"69 Salem Street","BillingCity":"Boston","BillingState":"MA","BillingCountry":"USA","BillingPostalCode":"2113","Total":"5.94"}
|
||||
{"InvoiceId":235,"CustomerId":29,"InvoiceDate":"2011-10-25T22:00:00.000Z","BillingAddress":"796 Dundas Street West","BillingCity":"Toronto","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"M6J 1V1","Total":"8.91"}
|
||||
{"InvoiceId":236,"CustomerId":38,"InvoiceDate":"2011-10-30T23:00:00.000Z","BillingAddress":"Barbarossastraße 19","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10779","Total":"13.86"}
|
||||
{"InvoiceId":237,"CustomerId":52,"InvoiceDate":"2011-11-07T23:00:00.000Z","BillingAddress":"202 Hoxton Street","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"N1 5LH","Total":"0.99"}
|
||||
{"InvoiceId":238,"CustomerId":53,"InvoiceDate":"2011-11-20T23:00:00.000Z","BillingAddress":"113 Lupus St","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"SW1V 3EN","Total":"1.98"}
|
||||
{"InvoiceId":239,"CustomerId":55,"InvoiceDate":"2011-11-20T23:00:00.000Z","BillingAddress":"421 Bourke Street","BillingCity":"Sidney","BillingState":"NSW","BillingCountry":"Australia","BillingPostalCode":"2010","Total":"1.98"}
|
||||
{"InvoiceId":240,"CustomerId":57,"InvoiceDate":"2011-11-21T23:00:00.000Z","BillingAddress":"Calle Lira, 198","BillingCity":"Santiago","BillingState":null,"BillingCountry":"Chile","BillingPostalCode":null,"Total":"3.96"}
|
||||
{"InvoiceId":241,"CustomerId":2,"InvoiceDate":"2011-11-22T23:00:00.000Z","BillingAddress":"Theodor-Heuss-Straße 34","BillingCity":"Stuttgart","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"70174","Total":"5.94"}
|
||||
{"InvoiceId":242,"CustomerId":8,"InvoiceDate":"2011-11-25T23:00:00.000Z","BillingAddress":"Grétrystraat 63","BillingCity":"Brussels","BillingState":null,"BillingCountry":"Belgium","BillingPostalCode":"1000","Total":"8.91"}
|
||||
{"InvoiceId":243,"CustomerId":17,"InvoiceDate":"2011-11-30T23:00:00.000Z","BillingAddress":"1 Microsoft Way","BillingCity":"Redmond","BillingState":"WA","BillingCountry":"USA","BillingPostalCode":"98052-8300","Total":"13.86"}
|
||||
{"InvoiceId":244,"CustomerId":31,"InvoiceDate":"2011-12-08T23:00:00.000Z","BillingAddress":"194A Chain Lake Drive","BillingCity":"Halifax","BillingState":"NS","BillingCountry":"Canada","BillingPostalCode":"B3S 1C5","Total":"0.99"}
|
||||
{"InvoiceId":245,"CustomerId":32,"InvoiceDate":"2011-12-21T23:00:00.000Z","BillingAddress":"696 Osborne Street","BillingCity":"Winnipeg","BillingState":"MB","BillingCountry":"Canada","BillingPostalCode":"R3L 2B9","Total":"1.98"}
|
||||
{"InvoiceId":246,"CustomerId":34,"InvoiceDate":"2011-12-21T23:00:00.000Z","BillingAddress":"Rua da Assunçăo 53","BillingCity":"Lisbon","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"1.98"}
|
||||
{"InvoiceId":247,"CustomerId":36,"InvoiceDate":"2011-12-22T23:00:00.000Z","BillingAddress":"Tauentzienstraße 8","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10789","Total":"3.96"}
|
||||
{"InvoiceId":248,"CustomerId":40,"InvoiceDate":"2011-12-23T23:00:00.000Z","BillingAddress":"8, Rue Hanovre","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75002","Total":"5.94"}
|
||||
{"InvoiceId":249,"CustomerId":46,"InvoiceDate":"2011-12-26T23:00:00.000Z","BillingAddress":"3 Chatham Street","BillingCity":"Dublin","BillingState":"Dublin","BillingCountry":"Ireland","BillingPostalCode":null,"Total":"8.91"}
|
||||
{"InvoiceId":250,"CustomerId":55,"InvoiceDate":"2011-12-31T23:00:00.000Z","BillingAddress":"421 Bourke Street","BillingCity":"Sidney","BillingState":"NSW","BillingCountry":"Australia","BillingPostalCode":"2010","Total":"13.86"}
|
||||
{"InvoiceId":251,"CustomerId":10,"InvoiceDate":"2012-01-08T23:00:00.000Z","BillingAddress":"Rua Dr. Falcăo Filho, 155","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01007-010","Total":"0.99"}
|
||||
{"InvoiceId":252,"CustomerId":11,"InvoiceDate":"2012-01-21T23:00:00.000Z","BillingAddress":"Av. Paulista, 2022","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01310-200","Total":"1.98"}
|
||||
{"InvoiceId":253,"CustomerId":13,"InvoiceDate":"2012-01-21T23:00:00.000Z","BillingAddress":"Qe 7 Bloco G","BillingCity":"Brasília","BillingState":"DF","BillingCountry":"Brazil","BillingPostalCode":"71020-677","Total":"1.98"}
|
||||
{"InvoiceId":254,"CustomerId":15,"InvoiceDate":"2012-01-22T23:00:00.000Z","BillingAddress":"700 W Pender Street","BillingCity":"Vancouver","BillingState":"BC","BillingCountry":"Canada","BillingPostalCode":"V6C 1G8","Total":"3.96"}
|
||||
{"InvoiceId":255,"CustomerId":19,"InvoiceDate":"2012-01-23T23:00:00.000Z","BillingAddress":"1 Infinite Loop","BillingCity":"Cupertino","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"95014","Total":"5.94"}
|
||||
{"InvoiceId":256,"CustomerId":25,"InvoiceDate":"2012-01-26T23:00:00.000Z","BillingAddress":"319 N. Frances Street","BillingCity":"Madison","BillingState":"WI","BillingCountry":"USA","BillingPostalCode":"53703","Total":"8.91"}
|
||||
{"InvoiceId":257,"CustomerId":34,"InvoiceDate":"2012-01-31T23:00:00.000Z","BillingAddress":"Rua da Assunçăo 53","BillingCity":"Lisbon","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"13.86"}
|
||||
{"InvoiceId":258,"CustomerId":48,"InvoiceDate":"2012-02-08T23:00:00.000Z","BillingAddress":"Lijnbaansgracht 120bg","BillingCity":"Amsterdam","BillingState":"VV","BillingCountry":"Netherlands","BillingPostalCode":"1016","Total":"0.99"}
|
||||
{"InvoiceId":259,"CustomerId":49,"InvoiceDate":"2012-02-21T23:00:00.000Z","BillingAddress":"Ordynacka 10","BillingCity":"Warsaw","BillingState":null,"BillingCountry":"Poland","BillingPostalCode":"00-358","Total":"1.98"}
|
||||
{"InvoiceId":260,"CustomerId":51,"InvoiceDate":"2012-02-21T23:00:00.000Z","BillingAddress":"Celsiusg. 9","BillingCity":"Stockholm","BillingState":null,"BillingCountry":"Sweden","BillingPostalCode":"11230","Total":"1.98"}
|
||||
{"InvoiceId":261,"CustomerId":53,"InvoiceDate":"2012-02-22T23:00:00.000Z","BillingAddress":"113 Lupus St","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"SW1V 3EN","Total":"3.96"}
|
||||
{"InvoiceId":262,"CustomerId":57,"InvoiceDate":"2012-02-23T23:00:00.000Z","BillingAddress":"Calle Lira, 198","BillingCity":"Santiago","BillingState":null,"BillingCountry":"Chile","BillingPostalCode":null,"Total":"5.94"}
|
||||
{"InvoiceId":263,"CustomerId":4,"InvoiceDate":"2012-02-26T23:00:00.000Z","BillingAddress":"Ullevĺlsveien 14","BillingCity":"Oslo","BillingState":null,"BillingCountry":"Norway","BillingPostalCode":"0171","Total":"8.91"}
|
||||
{"InvoiceId":264,"CustomerId":13,"InvoiceDate":"2012-03-02T23:00:00.000Z","BillingAddress":"Qe 7 Bloco G","BillingCity":"Brasília","BillingState":"DF","BillingCountry":"Brazil","BillingPostalCode":"71020-677","Total":"13.86"}
|
||||
{"InvoiceId":265,"CustomerId":27,"InvoiceDate":"2012-03-10T23:00:00.000Z","BillingAddress":"1033 N Park Ave","BillingCity":"Tucson","BillingState":"AZ","BillingCountry":"USA","BillingPostalCode":"85719","Total":"0.99"}
|
||||
{"InvoiceId":266,"CustomerId":28,"InvoiceDate":"2012-03-23T23:00:00.000Z","BillingAddress":"302 S 700 E","BillingCity":"Salt Lake City","BillingState":"UT","BillingCountry":"USA","BillingPostalCode":"84102","Total":"1.98"}
|
||||
{"InvoiceId":267,"CustomerId":30,"InvoiceDate":"2012-03-23T23:00:00.000Z","BillingAddress":"230 Elgin Street","BillingCity":"Ottawa","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"K2P 1L7","Total":"1.98"}
|
||||
{"InvoiceId":268,"CustomerId":32,"InvoiceDate":"2012-03-24T23:00:00.000Z","BillingAddress":"696 Osborne Street","BillingCity":"Winnipeg","BillingState":"MB","BillingCountry":"Canada","BillingPostalCode":"R3L 2B9","Total":"3.96"}
|
||||
{"InvoiceId":269,"CustomerId":36,"InvoiceDate":"2012-03-25T22:00:00.000Z","BillingAddress":"Tauentzienstraße 8","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10789","Total":"5.94"}
|
||||
{"InvoiceId":270,"CustomerId":42,"InvoiceDate":"2012-03-28T22:00:00.000Z","BillingAddress":"9, Place Louis Barthou","BillingCity":"Bordeaux","BillingState":null,"BillingCountry":"France","BillingPostalCode":"33000","Total":"8.91"}
|
||||
{"InvoiceId":271,"CustomerId":51,"InvoiceDate":"2012-04-02T22:00:00.000Z","BillingAddress":"Celsiusg. 9","BillingCity":"Stockholm","BillingState":null,"BillingCountry":"Sweden","BillingPostalCode":"11230","Total":"13.86"}
|
||||
{"InvoiceId":272,"CustomerId":6,"InvoiceDate":"2012-04-10T22:00:00.000Z","BillingAddress":"Rilská 3174/6","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14300","Total":"0.99"}
|
||||
{"InvoiceId":273,"CustomerId":7,"InvoiceDate":"2012-04-23T22:00:00.000Z","BillingAddress":"Rotenturmstraße 4, 1010 Innere Stadt","BillingCity":"Vienne","BillingState":null,"BillingCountry":"Austria","BillingPostalCode":"1010","Total":"1.98"}
|
||||
{"InvoiceId":274,"CustomerId":9,"InvoiceDate":"2012-04-23T22:00:00.000Z","BillingAddress":"Sřnder Boulevard 51","BillingCity":"Copenhagen","BillingState":null,"BillingCountry":"Denmark","BillingPostalCode":"1720","Total":"1.98"}
|
||||
{"InvoiceId":275,"CustomerId":11,"InvoiceDate":"2012-04-24T22:00:00.000Z","BillingAddress":"Av. Paulista, 2022","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01310-200","Total":"3.96"}
|
||||
{"InvoiceId":276,"CustomerId":15,"InvoiceDate":"2012-04-25T22:00:00.000Z","BillingAddress":"700 W Pender Street","BillingCity":"Vancouver","BillingState":"BC","BillingCountry":"Canada","BillingPostalCode":"V6C 1G8","Total":"5.94"}
|
||||
{"InvoiceId":277,"CustomerId":21,"InvoiceDate":"2012-04-28T22:00:00.000Z","BillingAddress":"801 W 4th Street","BillingCity":"Reno","BillingState":"NV","BillingCountry":"USA","BillingPostalCode":"89503","Total":"8.91"}
|
||||
{"InvoiceId":278,"CustomerId":30,"InvoiceDate":"2012-05-03T22:00:00.000Z","BillingAddress":"230 Elgin Street","BillingCity":"Ottawa","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"K2P 1L7","Total":"13.86"}
|
||||
{"InvoiceId":279,"CustomerId":44,"InvoiceDate":"2012-05-11T22:00:00.000Z","BillingAddress":"Porthaninkatu 9","BillingCity":"Helsinki","BillingState":null,"BillingCountry":"Finland","BillingPostalCode":"00530","Total":"0.99"}
|
||||
{"InvoiceId":280,"CustomerId":45,"InvoiceDate":"2012-05-24T22:00:00.000Z","BillingAddress":"Erzsébet krt. 58.","BillingCity":"Budapest","BillingState":null,"BillingCountry":"Hungary","BillingPostalCode":"H-1073","Total":"1.98"}
|
||||
{"InvoiceId":281,"CustomerId":47,"InvoiceDate":"2012-05-24T22:00:00.000Z","BillingAddress":"Via Degli Scipioni, 43","BillingCity":"Rome","BillingState":"RM","BillingCountry":"Italy","BillingPostalCode":"00192","Total":"1.98"}
|
||||
{"InvoiceId":282,"CustomerId":49,"InvoiceDate":"2012-05-25T22:00:00.000Z","BillingAddress":"Ordynacka 10","BillingCity":"Warsaw","BillingState":null,"BillingCountry":"Poland","BillingPostalCode":"00-358","Total":"3.96"}
|
||||
{"InvoiceId":283,"CustomerId":53,"InvoiceDate":"2012-05-26T22:00:00.000Z","BillingAddress":"113 Lupus St","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"SW1V 3EN","Total":"5.94"}
|
||||
{"InvoiceId":284,"CustomerId":59,"InvoiceDate":"2012-05-29T22:00:00.000Z","BillingAddress":"3,Raj Bhavan Road","BillingCity":"Bangalore","BillingState":null,"BillingCountry":"India","BillingPostalCode":"560001","Total":"8.91"}
|
||||
{"InvoiceId":285,"CustomerId":9,"InvoiceDate":"2012-06-03T22:00:00.000Z","BillingAddress":"Sřnder Boulevard 51","BillingCity":"Copenhagen","BillingState":null,"BillingCountry":"Denmark","BillingPostalCode":"1720","Total":"13.86"}
|
||||
{"InvoiceId":286,"CustomerId":23,"InvoiceDate":"2012-06-11T22:00:00.000Z","BillingAddress":"69 Salem Street","BillingCity":"Boston","BillingState":"MA","BillingCountry":"USA","BillingPostalCode":"2113","Total":"0.99"}
|
||||
{"InvoiceId":287,"CustomerId":24,"InvoiceDate":"2012-06-24T22:00:00.000Z","BillingAddress":"162 E Superior Street","BillingCity":"Chicago","BillingState":"IL","BillingCountry":"USA","BillingPostalCode":"60611","Total":"1.98"}
|
||||
{"InvoiceId":288,"CustomerId":26,"InvoiceDate":"2012-06-24T22:00:00.000Z","BillingAddress":"2211 W Berry Street","BillingCity":"Fort Worth","BillingState":"TX","BillingCountry":"USA","BillingPostalCode":"76110","Total":"1.98"}
|
||||
{"InvoiceId":289,"CustomerId":28,"InvoiceDate":"2012-06-25T22:00:00.000Z","BillingAddress":"302 S 700 E","BillingCity":"Salt Lake City","BillingState":"UT","BillingCountry":"USA","BillingPostalCode":"84102","Total":"3.96"}
|
||||
{"InvoiceId":290,"CustomerId":32,"InvoiceDate":"2012-06-26T22:00:00.000Z","BillingAddress":"696 Osborne Street","BillingCity":"Winnipeg","BillingState":"MB","BillingCountry":"Canada","BillingPostalCode":"R3L 2B9","Total":"5.94"}
|
||||
{"InvoiceId":291,"CustomerId":38,"InvoiceDate":"2012-06-29T22:00:00.000Z","BillingAddress":"Barbarossastraße 19","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10779","Total":"8.91"}
|
||||
{"InvoiceId":292,"CustomerId":47,"InvoiceDate":"2012-07-04T22:00:00.000Z","BillingAddress":"Via Degli Scipioni, 43","BillingCity":"Rome","BillingState":"RM","BillingCountry":"Italy","BillingPostalCode":"00192","Total":"13.86"}
|
||||
{"InvoiceId":293,"CustomerId":2,"InvoiceDate":"2012-07-12T22:00:00.000Z","BillingAddress":"Theodor-Heuss-Straße 34","BillingCity":"Stuttgart","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"70174","Total":"0.99"}
|
||||
{"InvoiceId":294,"CustomerId":3,"InvoiceDate":"2012-07-25T22:00:00.000Z","BillingAddress":"1498 rue Bélanger","BillingCity":"Montréal","BillingState":"QC","BillingCountry":"Canada","BillingPostalCode":"H2G 1A7","Total":"1.98"}
|
||||
{"InvoiceId":295,"CustomerId":5,"InvoiceDate":"2012-07-25T22:00:00.000Z","BillingAddress":"Klanova 9/506","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14700","Total":"1.98"}
|
||||
{"InvoiceId":296,"CustomerId":7,"InvoiceDate":"2012-07-26T22:00:00.000Z","BillingAddress":"Rotenturmstraße 4, 1010 Innere Stadt","BillingCity":"Vienne","BillingState":null,"BillingCountry":"Austria","BillingPostalCode":"1010","Total":"3.96"}
|
||||
{"InvoiceId":297,"CustomerId":11,"InvoiceDate":"2012-07-27T22:00:00.000Z","BillingAddress":"Av. Paulista, 2022","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01310-200","Total":"5.94"}
|
||||
{"InvoiceId":298,"CustomerId":17,"InvoiceDate":"2012-07-30T22:00:00.000Z","BillingAddress":"1 Microsoft Way","BillingCity":"Redmond","BillingState":"WA","BillingCountry":"USA","BillingPostalCode":"98052-8300","Total":"10.91"}
|
||||
{"InvoiceId":299,"CustomerId":26,"InvoiceDate":"2012-08-04T22:00:00.000Z","BillingAddress":"2211 W Berry Street","BillingCity":"Fort Worth","BillingState":"TX","BillingCountry":"USA","BillingPostalCode":"76110","Total":"23.86"}
|
||||
{"InvoiceId":300,"CustomerId":40,"InvoiceDate":"2012-08-12T22:00:00.000Z","BillingAddress":"8, Rue Hanovre","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75002","Total":"0.99"}
|
||||
{"InvoiceId":301,"CustomerId":41,"InvoiceDate":"2012-08-25T22:00:00.000Z","BillingAddress":"11, Place Bellecour","BillingCity":"Lyon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"69002","Total":"1.98"}
|
||||
{"InvoiceId":302,"CustomerId":43,"InvoiceDate":"2012-08-25T22:00:00.000Z","BillingAddress":"68, Rue Jouvence","BillingCity":"Dijon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"21000","Total":"1.98"}
|
||||
{"InvoiceId":303,"CustomerId":45,"InvoiceDate":"2012-08-26T22:00:00.000Z","BillingAddress":"Erzsébet krt. 58.","BillingCity":"Budapest","BillingState":null,"BillingCountry":"Hungary","BillingPostalCode":"H-1073","Total":"3.96"}
|
||||
{"InvoiceId":304,"CustomerId":49,"InvoiceDate":"2012-08-27T22:00:00.000Z","BillingAddress":"Ordynacka 10","BillingCity":"Warsaw","BillingState":null,"BillingCountry":"Poland","BillingPostalCode":"00-358","Total":"5.94"}
|
||||
{"InvoiceId":305,"CustomerId":55,"InvoiceDate":"2012-08-30T22:00:00.000Z","BillingAddress":"421 Bourke Street","BillingCity":"Sidney","BillingState":"NSW","BillingCountry":"Australia","BillingPostalCode":"2010","Total":"8.91"}
|
||||
{"InvoiceId":306,"CustomerId":5,"InvoiceDate":"2012-09-04T22:00:00.000Z","BillingAddress":"Klanova 9/506","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14700","Total":"16.86"}
|
||||
{"InvoiceId":307,"CustomerId":19,"InvoiceDate":"2012-09-12T22:00:00.000Z","BillingAddress":"1 Infinite Loop","BillingCity":"Cupertino","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"95014","Total":"1.99"}
|
||||
{"InvoiceId":308,"CustomerId":20,"InvoiceDate":"2012-09-25T22:00:00.000Z","BillingAddress":"541 Del Medio Avenue","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94040-111","Total":"3.98"}
|
||||
{"InvoiceId":309,"CustomerId":22,"InvoiceDate":"2012-09-25T22:00:00.000Z","BillingAddress":"120 S Orange Ave","BillingCity":"Orlando","BillingState":"FL","BillingCountry":"USA","BillingPostalCode":"32801","Total":"3.98"}
|
||||
{"InvoiceId":310,"CustomerId":24,"InvoiceDate":"2012-09-26T22:00:00.000Z","BillingAddress":"162 E Superior Street","BillingCity":"Chicago","BillingState":"IL","BillingCountry":"USA","BillingPostalCode":"60611","Total":"7.96"}
|
||||
{"InvoiceId":311,"CustomerId":28,"InvoiceDate":"2012-09-27T22:00:00.000Z","BillingAddress":"302 S 700 E","BillingCity":"Salt Lake City","BillingState":"UT","BillingCountry":"USA","BillingPostalCode":"84102","Total":"11.94"}
|
||||
{"InvoiceId":312,"CustomerId":34,"InvoiceDate":"2012-09-30T22:00:00.000Z","BillingAddress":"Rua da Assunçăo 53","BillingCity":"Lisbon","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"10.91"}
|
||||
{"InvoiceId":313,"CustomerId":43,"InvoiceDate":"2012-10-05T22:00:00.000Z","BillingAddress":"68, Rue Jouvence","BillingCity":"Dijon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"21000","Total":"16.86"}
|
||||
{"InvoiceId":314,"CustomerId":57,"InvoiceDate":"2012-10-13T22:00:00.000Z","BillingAddress":"Calle Lira, 198","BillingCity":"Santiago","BillingState":null,"BillingCountry":"Chile","BillingPostalCode":null,"Total":"0.99"}
|
||||
{"InvoiceId":315,"CustomerId":58,"InvoiceDate":"2012-10-26T22:00:00.000Z","BillingAddress":"12,Community Centre","BillingCity":"Delhi","BillingState":null,"BillingCountry":"India","BillingPostalCode":"110017","Total":"1.98"}
|
||||
{"InvoiceId":316,"CustomerId":1,"InvoiceDate":"2012-10-26T22:00:00.000Z","BillingAddress":"Av. Brigadeiro Faria Lima, 2170","BillingCity":"Săo José dos Campos","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"12227-000","Total":"1.98"}
|
||||
{"InvoiceId":317,"CustomerId":3,"InvoiceDate":"2012-10-27T22:00:00.000Z","BillingAddress":"1498 rue Bélanger","BillingCity":"Montréal","BillingState":"QC","BillingCountry":"Canada","BillingPostalCode":"H2G 1A7","Total":"3.96"}
|
||||
{"InvoiceId":318,"CustomerId":7,"InvoiceDate":"2012-10-28T23:00:00.000Z","BillingAddress":"Rotenturmstraße 4, 1010 Innere Stadt","BillingCity":"Vienne","BillingState":null,"BillingCountry":"Austria","BillingPostalCode":"1010","Total":"5.94"}
|
||||
{"InvoiceId":319,"CustomerId":13,"InvoiceDate":"2012-10-31T23:00:00.000Z","BillingAddress":"Qe 7 Bloco G","BillingCity":"Brasília","BillingState":"DF","BillingCountry":"Brazil","BillingPostalCode":"71020-677","Total":"8.91"}
|
||||
{"InvoiceId":320,"CustomerId":22,"InvoiceDate":"2012-11-05T23:00:00.000Z","BillingAddress":"120 S Orange Ave","BillingCity":"Orlando","BillingState":"FL","BillingCountry":"USA","BillingPostalCode":"32801","Total":"13.86"}
|
||||
{"InvoiceId":321,"CustomerId":36,"InvoiceDate":"2012-11-13T23:00:00.000Z","BillingAddress":"Tauentzienstraße 8","BillingCity":"Berlin","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"10789","Total":"0.99"}
|
||||
{"InvoiceId":322,"CustomerId":37,"InvoiceDate":"2012-11-26T23:00:00.000Z","BillingAddress":"Berger Straße 10","BillingCity":"Frankfurt","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"60316","Total":"1.98"}
|
||||
{"InvoiceId":323,"CustomerId":39,"InvoiceDate":"2012-11-26T23:00:00.000Z","BillingAddress":"4, Rue Milton","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75009","Total":"1.98"}
|
||||
{"InvoiceId":324,"CustomerId":41,"InvoiceDate":"2012-11-27T23:00:00.000Z","BillingAddress":"11, Place Bellecour","BillingCity":"Lyon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"69002","Total":"3.96"}
|
||||
{"InvoiceId":325,"CustomerId":45,"InvoiceDate":"2012-11-28T23:00:00.000Z","BillingAddress":"Erzsébet krt. 58.","BillingCity":"Budapest","BillingState":null,"BillingCountry":"Hungary","BillingPostalCode":"H-1073","Total":"5.94"}
|
||||
{"InvoiceId":326,"CustomerId":51,"InvoiceDate":"2012-12-01T23:00:00.000Z","BillingAddress":"Celsiusg. 9","BillingCity":"Stockholm","BillingState":null,"BillingCountry":"Sweden","BillingPostalCode":"11230","Total":"8.91"}
|
||||
{"InvoiceId":327,"CustomerId":1,"InvoiceDate":"2012-12-06T23:00:00.000Z","BillingAddress":"Av. Brigadeiro Faria Lima, 2170","BillingCity":"Săo José dos Campos","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"12227-000","Total":"13.86"}
|
||||
{"InvoiceId":328,"CustomerId":15,"InvoiceDate":"2012-12-14T23:00:00.000Z","BillingAddress":"700 W Pender Street","BillingCity":"Vancouver","BillingState":"BC","BillingCountry":"Canada","BillingPostalCode":"V6C 1G8","Total":"0.99"}
|
||||
{"InvoiceId":329,"CustomerId":16,"InvoiceDate":"2012-12-27T23:00:00.000Z","BillingAddress":"1600 Amphitheatre Parkway","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94043-1351","Total":"1.98"}
|
||||
{"InvoiceId":330,"CustomerId":18,"InvoiceDate":"2012-12-27T23:00:00.000Z","BillingAddress":"627 Broadway","BillingCity":"New York","BillingState":"NY","BillingCountry":"USA","BillingPostalCode":"10012-2612","Total":"1.98"}
|
||||
{"InvoiceId":331,"CustomerId":20,"InvoiceDate":"2012-12-28T23:00:00.000Z","BillingAddress":"541 Del Medio Avenue","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94040-111","Total":"3.96"}
|
||||
{"InvoiceId":332,"CustomerId":24,"InvoiceDate":"2012-12-29T23:00:00.000Z","BillingAddress":"162 E Superior Street","BillingCity":"Chicago","BillingState":"IL","BillingCountry":"USA","BillingPostalCode":"60611","Total":"5.94"}
|
||||
{"InvoiceId":333,"CustomerId":30,"InvoiceDate":"2013-01-01T23:00:00.000Z","BillingAddress":"230 Elgin Street","BillingCity":"Ottawa","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"K2P 1L7","Total":"8.91"}
|
||||
{"InvoiceId":334,"CustomerId":39,"InvoiceDate":"2013-01-06T23:00:00.000Z","BillingAddress":"4, Rue Milton","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75009","Total":"13.86"}
|
||||
{"InvoiceId":335,"CustomerId":53,"InvoiceDate":"2013-01-14T23:00:00.000Z","BillingAddress":"113 Lupus St","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"SW1V 3EN","Total":"0.99"}
|
||||
{"InvoiceId":336,"CustomerId":54,"InvoiceDate":"2013-01-27T23:00:00.000Z","BillingAddress":"110 Raeburn Pl","BillingCity":"Edinburgh","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"EH4 1HH","Total":"1.98"}
|
||||
{"InvoiceId":337,"CustomerId":56,"InvoiceDate":"2013-01-27T23:00:00.000Z","BillingAddress":"307 Macacha Güemes","BillingCity":"Buenos Aires","BillingState":null,"BillingCountry":"Argentina","BillingPostalCode":"1106","Total":"1.98"}
|
||||
{"InvoiceId":338,"CustomerId":58,"InvoiceDate":"2013-01-28T23:00:00.000Z","BillingAddress":"12,Community Centre","BillingCity":"Delhi","BillingState":null,"BillingCountry":"India","BillingPostalCode":"110017","Total":"3.96"}
|
||||
{"InvoiceId":339,"CustomerId":3,"InvoiceDate":"2013-01-29T23:00:00.000Z","BillingAddress":"1498 rue Bélanger","BillingCity":"Montréal","BillingState":"QC","BillingCountry":"Canada","BillingPostalCode":"H2G 1A7","Total":"5.94"}
|
||||
{"InvoiceId":340,"CustomerId":9,"InvoiceDate":"2013-02-01T23:00:00.000Z","BillingAddress":"Sřnder Boulevard 51","BillingCity":"Copenhagen","BillingState":null,"BillingCountry":"Denmark","BillingPostalCode":"1720","Total":"8.91"}
|
||||
{"InvoiceId":341,"CustomerId":18,"InvoiceDate":"2013-02-06T23:00:00.000Z","BillingAddress":"627 Broadway","BillingCity":"New York","BillingState":"NY","BillingCountry":"USA","BillingPostalCode":"10012-2612","Total":"13.86"}
|
||||
{"InvoiceId":342,"CustomerId":32,"InvoiceDate":"2013-02-14T23:00:00.000Z","BillingAddress":"696 Osborne Street","BillingCity":"Winnipeg","BillingState":"MB","BillingCountry":"Canada","BillingPostalCode":"R3L 2B9","Total":"0.99"}
|
||||
{"InvoiceId":343,"CustomerId":33,"InvoiceDate":"2013-02-27T23:00:00.000Z","BillingAddress":"5112 48 Street","BillingCity":"Yellowknife","BillingState":"NT","BillingCountry":"Canada","BillingPostalCode":"X1A 1N6","Total":"1.98"}
|
||||
{"InvoiceId":344,"CustomerId":35,"InvoiceDate":"2013-02-27T23:00:00.000Z","BillingAddress":"Rua dos Campeőes Europeus de Viena, 4350","BillingCity":"Porto","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"1.98"}
|
||||
{"InvoiceId":345,"CustomerId":37,"InvoiceDate":"2013-02-28T23:00:00.000Z","BillingAddress":"Berger Straße 10","BillingCity":"Frankfurt","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"60316","Total":"3.96"}
|
||||
{"InvoiceId":346,"CustomerId":41,"InvoiceDate":"2013-03-01T23:00:00.000Z","BillingAddress":"11, Place Bellecour","BillingCity":"Lyon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"69002","Total":"5.94"}
|
||||
{"InvoiceId":347,"CustomerId":47,"InvoiceDate":"2013-03-04T23:00:00.000Z","BillingAddress":"Via Degli Scipioni, 43","BillingCity":"Rome","BillingState":"RM","BillingCountry":"Italy","BillingPostalCode":"00192","Total":"8.91"}
|
||||
{"InvoiceId":348,"CustomerId":56,"InvoiceDate":"2013-03-09T23:00:00.000Z","BillingAddress":"307 Macacha Güemes","BillingCity":"Buenos Aires","BillingState":null,"BillingCountry":"Argentina","BillingPostalCode":"1106","Total":"13.86"}
|
||||
{"InvoiceId":349,"CustomerId":11,"InvoiceDate":"2013-03-17T23:00:00.000Z","BillingAddress":"Av. Paulista, 2022","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01310-200","Total":"0.99"}
|
||||
{"InvoiceId":350,"CustomerId":12,"InvoiceDate":"2013-03-30T23:00:00.000Z","BillingAddress":"Praça Pio X, 119","BillingCity":"Rio de Janeiro","BillingState":"RJ","BillingCountry":"Brazil","BillingPostalCode":"20040-020","Total":"1.98"}
|
||||
{"InvoiceId":351,"CustomerId":14,"InvoiceDate":"2013-03-30T23:00:00.000Z","BillingAddress":"8210 111 ST NW","BillingCity":"Edmonton","BillingState":"AB","BillingCountry":"Canada","BillingPostalCode":"T6G 2C7","Total":"1.98"}
|
||||
{"InvoiceId":352,"CustomerId":16,"InvoiceDate":"2013-03-31T22:00:00.000Z","BillingAddress":"1600 Amphitheatre Parkway","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94043-1351","Total":"3.96"}
|
||||
{"InvoiceId":353,"CustomerId":20,"InvoiceDate":"2013-04-01T22:00:00.000Z","BillingAddress":"541 Del Medio Avenue","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94040-111","Total":"5.94"}
|
||||
{"InvoiceId":354,"CustomerId":26,"InvoiceDate":"2013-04-04T22:00:00.000Z","BillingAddress":"2211 W Berry Street","BillingCity":"Fort Worth","BillingState":"TX","BillingCountry":"USA","BillingPostalCode":"76110","Total":"8.91"}
|
||||
{"InvoiceId":355,"CustomerId":35,"InvoiceDate":"2013-04-09T22:00:00.000Z","BillingAddress":"Rua dos Campeőes Europeus de Viena, 4350","BillingCity":"Porto","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"13.86"}
|
||||
{"InvoiceId":356,"CustomerId":49,"InvoiceDate":"2013-04-17T22:00:00.000Z","BillingAddress":"Ordynacka 10","BillingCity":"Warsaw","BillingState":null,"BillingCountry":"Poland","BillingPostalCode":"00-358","Total":"0.99"}
|
||||
{"InvoiceId":357,"CustomerId":50,"InvoiceDate":"2013-04-30T22:00:00.000Z","BillingAddress":"C/ San Bernardo 85","BillingCity":"Madrid","BillingState":null,"BillingCountry":"Spain","BillingPostalCode":"28015","Total":"1.98"}
|
||||
{"InvoiceId":358,"CustomerId":52,"InvoiceDate":"2013-04-30T22:00:00.000Z","BillingAddress":"202 Hoxton Street","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"N1 5LH","Total":"1.98"}
|
||||
{"InvoiceId":359,"CustomerId":54,"InvoiceDate":"2013-05-01T22:00:00.000Z","BillingAddress":"110 Raeburn Pl","BillingCity":"Edinburgh","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"EH4 1HH","Total":"3.96"}
|
||||
{"InvoiceId":360,"CustomerId":58,"InvoiceDate":"2013-05-02T22:00:00.000Z","BillingAddress":"12,Community Centre","BillingCity":"Delhi","BillingState":null,"BillingCountry":"India","BillingPostalCode":"110017","Total":"5.94"}
|
||||
{"InvoiceId":361,"CustomerId":5,"InvoiceDate":"2013-05-05T22:00:00.000Z","BillingAddress":"Klanova 9/506","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14700","Total":"8.91"}
|
||||
{"InvoiceId":362,"CustomerId":14,"InvoiceDate":"2013-05-10T22:00:00.000Z","BillingAddress":"8210 111 ST NW","BillingCity":"Edmonton","BillingState":"AB","BillingCountry":"Canada","BillingPostalCode":"T6G 2C7","Total":"13.86"}
|
||||
{"InvoiceId":363,"CustomerId":28,"InvoiceDate":"2013-05-18T22:00:00.000Z","BillingAddress":"302 S 700 E","BillingCity":"Salt Lake City","BillingState":"UT","BillingCountry":"USA","BillingPostalCode":"84102","Total":"0.99"}
|
||||
{"InvoiceId":364,"CustomerId":29,"InvoiceDate":"2013-05-31T22:00:00.000Z","BillingAddress":"796 Dundas Street West","BillingCity":"Toronto","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"M6J 1V1","Total":"1.98"}
|
||||
{"InvoiceId":365,"CustomerId":31,"InvoiceDate":"2013-05-31T22:00:00.000Z","BillingAddress":"194A Chain Lake Drive","BillingCity":"Halifax","BillingState":"NS","BillingCountry":"Canada","BillingPostalCode":"B3S 1C5","Total":"1.98"}
|
||||
{"InvoiceId":366,"CustomerId":33,"InvoiceDate":"2013-06-01T22:00:00.000Z","BillingAddress":"5112 48 Street","BillingCity":"Yellowknife","BillingState":"NT","BillingCountry":"Canada","BillingPostalCode":"X1A 1N6","Total":"3.96"}
|
||||
{"InvoiceId":367,"CustomerId":37,"InvoiceDate":"2013-06-02T22:00:00.000Z","BillingAddress":"Berger Straße 10","BillingCity":"Frankfurt","BillingState":null,"BillingCountry":"Germany","BillingPostalCode":"60316","Total":"5.94"}
|
||||
{"InvoiceId":368,"CustomerId":43,"InvoiceDate":"2013-06-05T22:00:00.000Z","BillingAddress":"68, Rue Jouvence","BillingCity":"Dijon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"21000","Total":"8.91"}
|
||||
{"InvoiceId":369,"CustomerId":52,"InvoiceDate":"2013-06-10T22:00:00.000Z","BillingAddress":"202 Hoxton Street","BillingCity":"London","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"N1 5LH","Total":"13.86"}
|
||||
{"InvoiceId":370,"CustomerId":7,"InvoiceDate":"2013-06-18T22:00:00.000Z","BillingAddress":"Rotenturmstraße 4, 1010 Innere Stadt","BillingCity":"Vienne","BillingState":null,"BillingCountry":"Austria","BillingPostalCode":"1010","Total":"0.99"}
|
||||
{"InvoiceId":371,"CustomerId":8,"InvoiceDate":"2013-07-01T22:00:00.000Z","BillingAddress":"Grétrystraat 63","BillingCity":"Brussels","BillingState":null,"BillingCountry":"Belgium","BillingPostalCode":"1000","Total":"1.98"}
|
||||
{"InvoiceId":372,"CustomerId":10,"InvoiceDate":"2013-07-01T22:00:00.000Z","BillingAddress":"Rua Dr. Falcăo Filho, 155","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01007-010","Total":"1.98"}
|
||||
{"InvoiceId":373,"CustomerId":12,"InvoiceDate":"2013-07-02T22:00:00.000Z","BillingAddress":"Praça Pio X, 119","BillingCity":"Rio de Janeiro","BillingState":"RJ","BillingCountry":"Brazil","BillingPostalCode":"20040-020","Total":"3.96"}
|
||||
{"InvoiceId":374,"CustomerId":16,"InvoiceDate":"2013-07-03T22:00:00.000Z","BillingAddress":"1600 Amphitheatre Parkway","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94043-1351","Total":"5.94"}
|
||||
{"InvoiceId":375,"CustomerId":22,"InvoiceDate":"2013-07-06T22:00:00.000Z","BillingAddress":"120 S Orange Ave","BillingCity":"Orlando","BillingState":"FL","BillingCountry":"USA","BillingPostalCode":"32801","Total":"8.91"}
|
||||
{"InvoiceId":376,"CustomerId":31,"InvoiceDate":"2013-07-11T22:00:00.000Z","BillingAddress":"194A Chain Lake Drive","BillingCity":"Halifax","BillingState":"NS","BillingCountry":"Canada","BillingPostalCode":"B3S 1C5","Total":"13.86"}
|
||||
{"InvoiceId":377,"CustomerId":45,"InvoiceDate":"2013-07-19T22:00:00.000Z","BillingAddress":"Erzsébet krt. 58.","BillingCity":"Budapest","BillingState":null,"BillingCountry":"Hungary","BillingPostalCode":"H-1073","Total":"0.99"}
|
||||
{"InvoiceId":378,"CustomerId":46,"InvoiceDate":"2013-08-01T22:00:00.000Z","BillingAddress":"3 Chatham Street","BillingCity":"Dublin","BillingState":"Dublin","BillingCountry":"Ireland","BillingPostalCode":null,"Total":"1.98"}
|
||||
{"InvoiceId":379,"CustomerId":48,"InvoiceDate":"2013-08-01T22:00:00.000Z","BillingAddress":"Lijnbaansgracht 120bg","BillingCity":"Amsterdam","BillingState":"VV","BillingCountry":"Netherlands","BillingPostalCode":"1016","Total":"1.98"}
|
||||
{"InvoiceId":380,"CustomerId":50,"InvoiceDate":"2013-08-02T22:00:00.000Z","BillingAddress":"C/ San Bernardo 85","BillingCity":"Madrid","BillingState":null,"BillingCountry":"Spain","BillingPostalCode":"28015","Total":"3.96"}
|
||||
{"InvoiceId":381,"CustomerId":54,"InvoiceDate":"2013-08-03T22:00:00.000Z","BillingAddress":"110 Raeburn Pl","BillingCity":"Edinburgh","BillingState":null,"BillingCountry":"United Kingdom","BillingPostalCode":"EH4 1HH","Total":"5.94"}
|
||||
{"InvoiceId":382,"CustomerId":1,"InvoiceDate":"2013-08-06T22:00:00.000Z","BillingAddress":"Av. Brigadeiro Faria Lima, 2170","BillingCity":"Săo José dos Campos","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"12227-000","Total":"8.91"}
|
||||
{"InvoiceId":383,"CustomerId":10,"InvoiceDate":"2013-08-11T22:00:00.000Z","BillingAddress":"Rua Dr. Falcăo Filho, 155","BillingCity":"Săo Paulo","BillingState":"SP","BillingCountry":"Brazil","BillingPostalCode":"01007-010","Total":"13.86"}
|
||||
{"InvoiceId":384,"CustomerId":24,"InvoiceDate":"2013-08-19T22:00:00.000Z","BillingAddress":"162 E Superior Street","BillingCity":"Chicago","BillingState":"IL","BillingCountry":"USA","BillingPostalCode":"60611","Total":"0.99"}
|
||||
{"InvoiceId":385,"CustomerId":25,"InvoiceDate":"2013-09-01T22:00:00.000Z","BillingAddress":"319 N. Frances Street","BillingCity":"Madison","BillingState":"WI","BillingCountry":"USA","BillingPostalCode":"53703","Total":"1.98"}
|
||||
{"InvoiceId":386,"CustomerId":27,"InvoiceDate":"2013-09-01T22:00:00.000Z","BillingAddress":"1033 N Park Ave","BillingCity":"Tucson","BillingState":"AZ","BillingCountry":"USA","BillingPostalCode":"85719","Total":"1.98"}
|
||||
{"InvoiceId":387,"CustomerId":29,"InvoiceDate":"2013-09-02T22:00:00.000Z","BillingAddress":"796 Dundas Street West","BillingCity":"Toronto","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"M6J 1V1","Total":"3.96"}
|
||||
{"InvoiceId":388,"CustomerId":33,"InvoiceDate":"2013-09-03T22:00:00.000Z","BillingAddress":"5112 48 Street","BillingCity":"Yellowknife","BillingState":"NT","BillingCountry":"Canada","BillingPostalCode":"X1A 1N6","Total":"5.94"}
|
||||
{"InvoiceId":389,"CustomerId":39,"InvoiceDate":"2013-09-06T22:00:00.000Z","BillingAddress":"4, Rue Milton","BillingCity":"Paris","BillingState":null,"BillingCountry":"France","BillingPostalCode":"75009","Total":"8.91"}
|
||||
{"InvoiceId":390,"CustomerId":48,"InvoiceDate":"2013-09-11T22:00:00.000Z","BillingAddress":"Lijnbaansgracht 120bg","BillingCity":"Amsterdam","BillingState":"VV","BillingCountry":"Netherlands","BillingPostalCode":"1016","Total":"13.86"}
|
||||
{"InvoiceId":391,"CustomerId":3,"InvoiceDate":"2013-09-19T22:00:00.000Z","BillingAddress":"1498 rue Bélanger","BillingCity":"Montréal","BillingState":"QC","BillingCountry":"Canada","BillingPostalCode":"H2G 1A7","Total":"0.99"}
|
||||
{"InvoiceId":392,"CustomerId":4,"InvoiceDate":"2013-10-02T22:00:00.000Z","BillingAddress":"Ullevĺlsveien 14","BillingCity":"Oslo","BillingState":null,"BillingCountry":"Norway","BillingPostalCode":"0171","Total":"1.98"}
|
||||
{"InvoiceId":393,"CustomerId":6,"InvoiceDate":"2013-10-02T22:00:00.000Z","BillingAddress":"Rilská 3174/6","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14300","Total":"1.98"}
|
||||
{"InvoiceId":394,"CustomerId":8,"InvoiceDate":"2013-10-03T22:00:00.000Z","BillingAddress":"Grétrystraat 63","BillingCity":"Brussels","BillingState":null,"BillingCountry":"Belgium","BillingPostalCode":"1000","Total":"3.96"}
|
||||
{"InvoiceId":395,"CustomerId":12,"InvoiceDate":"2013-10-04T22:00:00.000Z","BillingAddress":"Praça Pio X, 119","BillingCity":"Rio de Janeiro","BillingState":"RJ","BillingCountry":"Brazil","BillingPostalCode":"20040-020","Total":"5.94"}
|
||||
{"InvoiceId":396,"CustomerId":18,"InvoiceDate":"2013-10-07T22:00:00.000Z","BillingAddress":"627 Broadway","BillingCity":"New York","BillingState":"NY","BillingCountry":"USA","BillingPostalCode":"10012-2612","Total":"8.91"}
|
||||
{"InvoiceId":397,"CustomerId":27,"InvoiceDate":"2013-10-12T22:00:00.000Z","BillingAddress":"1033 N Park Ave","BillingCity":"Tucson","BillingState":"AZ","BillingCountry":"USA","BillingPostalCode":"85719","Total":"13.86"}
|
||||
{"InvoiceId":398,"CustomerId":41,"InvoiceDate":"2013-10-20T22:00:00.000Z","BillingAddress":"11, Place Bellecour","BillingCity":"Lyon","BillingState":null,"BillingCountry":"France","BillingPostalCode":"69002","Total":"0.99"}
|
||||
{"InvoiceId":399,"CustomerId":42,"InvoiceDate":"2013-11-02T23:00:00.000Z","BillingAddress":"9, Place Louis Barthou","BillingCity":"Bordeaux","BillingState":null,"BillingCountry":"France","BillingPostalCode":"33000","Total":"1.98"}
|
||||
{"InvoiceId":400,"CustomerId":44,"InvoiceDate":"2013-11-02T23:00:00.000Z","BillingAddress":"Porthaninkatu 9","BillingCity":"Helsinki","BillingState":null,"BillingCountry":"Finland","BillingPostalCode":"00530","Total":"1.98"}
|
||||
{"InvoiceId":401,"CustomerId":46,"InvoiceDate":"2013-11-03T23:00:00.000Z","BillingAddress":"3 Chatham Street","BillingCity":"Dublin","BillingState":"Dublin","BillingCountry":"Ireland","BillingPostalCode":null,"Total":"3.96"}
|
||||
{"InvoiceId":402,"CustomerId":50,"InvoiceDate":"2013-11-04T23:00:00.000Z","BillingAddress":"C/ San Bernardo 85","BillingCity":"Madrid","BillingState":null,"BillingCountry":"Spain","BillingPostalCode":"28015","Total":"5.94"}
|
||||
{"InvoiceId":403,"CustomerId":56,"InvoiceDate":"2013-11-07T23:00:00.000Z","BillingAddress":"307 Macacha Güemes","BillingCity":"Buenos Aires","BillingState":null,"BillingCountry":"Argentina","BillingPostalCode":"1106","Total":"8.91"}
|
||||
{"InvoiceId":404,"CustomerId":6,"InvoiceDate":"2013-11-12T23:00:00.000Z","BillingAddress":"Rilská 3174/6","BillingCity":"Prague","BillingState":null,"BillingCountry":"Czech Republic","BillingPostalCode":"14300","Total":"25.86"}
|
||||
{"InvoiceId":405,"CustomerId":20,"InvoiceDate":"2013-11-20T23:00:00.000Z","BillingAddress":"541 Del Medio Avenue","BillingCity":"Mountain View","BillingState":"CA","BillingCountry":"USA","BillingPostalCode":"94040-111","Total":"0.99"}
|
||||
{"InvoiceId":406,"CustomerId":21,"InvoiceDate":"2013-12-03T23:00:00.000Z","BillingAddress":"801 W 4th Street","BillingCity":"Reno","BillingState":"NV","BillingCountry":"USA","BillingPostalCode":"89503","Total":"1.98"}
|
||||
{"InvoiceId":407,"CustomerId":23,"InvoiceDate":"2013-12-03T23:00:00.000Z","BillingAddress":"69 Salem Street","BillingCity":"Boston","BillingState":"MA","BillingCountry":"USA","BillingPostalCode":"2113","Total":"1.98"}
|
||||
{"InvoiceId":408,"CustomerId":25,"InvoiceDate":"2013-12-04T23:00:00.000Z","BillingAddress":"319 N. Frances Street","BillingCity":"Madison","BillingState":"WI","BillingCountry":"USA","BillingPostalCode":"53703","Total":"3.96"}
|
||||
{"InvoiceId":409,"CustomerId":29,"InvoiceDate":"2013-12-05T23:00:00.000Z","BillingAddress":"796 Dundas Street West","BillingCity":"Toronto","BillingState":"ON","BillingCountry":"Canada","BillingPostalCode":"M6J 1V1","Total":"5.94"}
|
||||
{"InvoiceId":410,"CustomerId":35,"InvoiceDate":"2013-12-08T23:00:00.000Z","BillingAddress":"Rua dos Campeőes Europeus de Viena, 4350","BillingCity":"Porto","BillingState":null,"BillingCountry":"Portugal","BillingPostalCode":null,"Total":"8.91"}
|
||||
{"InvoiceId":411,"CustomerId":44,"InvoiceDate":"2013-12-13T23:00:00.000Z","BillingAddress":"Porthaninkatu 9","BillingCity":"Helsinki","BillingState":null,"BillingCountry":"Finland","BillingPostalCode":"00530","Total":"13.86"}
|
||||
{"InvoiceId":412,"CustomerId":58,"InvoiceDate":"2013-12-21T23:00:00.000Z","BillingAddress":"12,Community Centre","BillingCity":"Delhi","BillingState":null,"BillingCountry":"India","BillingPostalCode":"110017","Total":"1.99"}
|
||||
2240
e2e-tests/data/chinook-jsonl/InvoiceLine.jsonl
Normal file
2240
e2e-tests/data/chinook-jsonl/InvoiceLine.jsonl
Normal file
File diff suppressed because it is too large
Load Diff
5
e2e-tests/data/chinook-jsonl/MediaType.jsonl
Normal file
5
e2e-tests/data/chinook-jsonl/MediaType.jsonl
Normal file
@@ -0,0 +1,5 @@
|
||||
{"MediaTypeId":1,"Name":"MPEG audio file"}
|
||||
{"MediaTypeId":2,"Name":"Protected AAC audio file"}
|
||||
{"MediaTypeId":3,"Name":"Protected MPEG-4 video file"}
|
||||
{"MediaTypeId":4,"Name":"Purchased AAC audio file"}
|
||||
{"MediaTypeId":5,"Name":"AAC audio file"}
|
||||
18
e2e-tests/data/chinook-jsonl/Playlist.jsonl
Normal file
18
e2e-tests/data/chinook-jsonl/Playlist.jsonl
Normal file
@@ -0,0 +1,18 @@
|
||||
{"PlaylistId":1,"Name":"Music"}
|
||||
{"PlaylistId":2,"Name":"Movies"}
|
||||
{"PlaylistId":3,"Name":"TV Shows"}
|
||||
{"PlaylistId":4,"Name":"Audiobooks"}
|
||||
{"PlaylistId":5,"Name":"90s Music"}
|
||||
{"PlaylistId":6,"Name":"Audiobooks"}
|
||||
{"PlaylistId":7,"Name":"Movies"}
|
||||
{"PlaylistId":8,"Name":"Music"}
|
||||
{"PlaylistId":9,"Name":"Music Videos"}
|
||||
{"PlaylistId":10,"Name":"TV Shows"}
|
||||
{"PlaylistId":11,"Name":"Brazilian Music"}
|
||||
{"PlaylistId":12,"Name":"Classical"}
|
||||
{"PlaylistId":13,"Name":"Classical 101 - Deep Cuts"}
|
||||
{"PlaylistId":14,"Name":"Classical 101 - Next Steps"}
|
||||
{"PlaylistId":15,"Name":"Classical 101 - The Basics"}
|
||||
{"PlaylistId":16,"Name":"Grunge"}
|
||||
{"PlaylistId":17,"Name":"Heavy Metal Classic"}
|
||||
{"PlaylistId":18,"Name":"On-The-Go 1"}
|
||||
8715
e2e-tests/data/chinook-jsonl/PlaylistTrack.jsonl
Normal file
8715
e2e-tests/data/chinook-jsonl/PlaylistTrack.jsonl
Normal file
File diff suppressed because it is too large
Load Diff
3503
e2e-tests/data/chinook-jsonl/Track.jsonl
Normal file
3503
e2e-tests/data/chinook-jsonl/Track.jsonl
Normal file
File diff suppressed because it is too large
Load Diff
176
e2e-tests/data/chinook-mysql-changed.sql
Normal file
176
e2e-tests/data/chinook-mysql-changed.sql
Normal file
@@ -0,0 +1,176 @@
|
||||
|
||||
/*******************************************************************************
|
||||
Create Tables
|
||||
********************************************************************************/
|
||||
CREATE TABLE `Album`
|
||||
(
|
||||
`AlbumId` INT NOT NULL AUTO_INCREMENT,
|
||||
`Name` NVARCHAR(160) NOT NULL,
|
||||
`ArtistId` INT NOT NULL,
|
||||
CONSTRAINT `PK_Album` PRIMARY KEY (`AlbumId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `Artist`
|
||||
(
|
||||
`ArtistId` INT NOT NULL AUTO_INCREMENT,
|
||||
`Name` NVARCHAR(120),
|
||||
CONSTRAINT `PK_Artist` PRIMARY KEY (`ArtistId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `Customer`
|
||||
(
|
||||
`CustomerId` INT NOT NULL AUTO_INCREMENT,
|
||||
`FirstName` NVARCHAR(40) NOT NULL,
|
||||
`LastName` NVARCHAR(20) NOT NULL,
|
||||
`MiddleName` NVARCHAR(20) NOT NULL,
|
||||
`Company` NVARCHAR(80),
|
||||
`Street` NVARCHAR(70),
|
||||
`City` NVARCHAR(40),
|
||||
`State` NVARCHAR(40),
|
||||
`Country` NVARCHAR(40),
|
||||
`PostalCode` NVARCHAR(10),
|
||||
`Phone` NVARCHAR(24),
|
||||
`Fax` NVARCHAR(24),
|
||||
`Email` NVARCHAR(60) NOT NULL,
|
||||
`SupportRepId` INT,
|
||||
CONSTRAINT `PK_Customer` PRIMARY KEY (`CustomerId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `Employee`
|
||||
(
|
||||
`EmployeeId` INT NOT NULL AUTO_INCREMENT,
|
||||
`LastName` NVARCHAR(20) NOT NULL,
|
||||
`FirstName` NVARCHAR(20) NOT NULL,
|
||||
`Title` NVARCHAR(30),
|
||||
`ReportsTo` INT,
|
||||
`BirthDate` DATETIME,
|
||||
`HireDate` DATETIME,
|
||||
`Address` NVARCHAR(70),
|
||||
`City` NVARCHAR(40),
|
||||
`State` NVARCHAR(40),
|
||||
`Country` NVARCHAR(40),
|
||||
`PostalCode` NVARCHAR(10),
|
||||
`Phone` NVARCHAR(24),
|
||||
`Fax` NVARCHAR(24),
|
||||
`Email` NVARCHAR(60),
|
||||
CONSTRAINT `PK_Employee` PRIMARY KEY (`EmployeeId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `Genre`
|
||||
(
|
||||
`GenreId` INT NOT NULL AUTO_INCREMENT,
|
||||
`Name` NVARCHAR(120),
|
||||
CONSTRAINT `PK_Genre` PRIMARY KEY (`GenreId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `Genre_Backup`
|
||||
(
|
||||
`GenreId` INT NOT NULL AUTO_INCREMENT,
|
||||
`Name` NVARCHAR(120),
|
||||
CONSTRAINT `PK_GenreBackup` PRIMARY KEY (`GenreId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `Invoice`
|
||||
(
|
||||
`InvoiceId` INT NOT NULL AUTO_INCREMENT,
|
||||
`CustomerId` INT NOT NULL,
|
||||
`InvoiceDate` DATETIME NOT NULL,
|
||||
`BillingAddress` NVARCHAR(70),
|
||||
`BillingCity` NVARCHAR(40),
|
||||
`BillingState` NVARCHAR(40),
|
||||
`BillingCountry` NVARCHAR(40),
|
||||
`BillingPostalCode` NVARCHAR(10),
|
||||
`Total` NUMERIC(10,2) NOT NULL,
|
||||
CONSTRAINT `PK_Invoice` PRIMARY KEY (`InvoiceId`)
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE `MediaType`
|
||||
(
|
||||
`MediaTypeId` INT NOT NULL AUTO_INCREMENT,
|
||||
`Name` NVARCHAR(120),
|
||||
CONSTRAINT `PK_MediaType` PRIMARY KEY (`MediaTypeId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `Playlist`
|
||||
(
|
||||
`PlaylistId` INT NOT NULL AUTO_INCREMENT,
|
||||
`Name` NVARCHAR(120),
|
||||
CONSTRAINT `PK_Playlist` PRIMARY KEY (`PlaylistId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `PlaylistTrack`
|
||||
(
|
||||
`PlaylistId` INT NOT NULL,
|
||||
`TrackId` INT NOT NULL,
|
||||
CONSTRAINT `PK_PlaylistTrack` PRIMARY KEY (`PlaylistId`, `TrackId`)
|
||||
);
|
||||
|
||||
CREATE TABLE `Track`
|
||||
(
|
||||
`TrackId` INT NOT NULL AUTO_INCREMENT,
|
||||
`Name` NVARCHAR(200) NOT NULL,
|
||||
`AlbumId` INT,
|
||||
`MediaTypeId` INT NOT NULL,
|
||||
`GenreId` INT,
|
||||
`Composer` NVARCHAR(220),
|
||||
`Milliseconds` INT NOT NULL,
|
||||
`Bytes` INT,
|
||||
`UnitPrice` NUMERIC(10,2) NOT NULL,
|
||||
CONSTRAINT `PK_Track` PRIMARY KEY (`TrackId`)
|
||||
);
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Create Primary Key Unique Indexes
|
||||
********************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
Create Foreign Keys
|
||||
********************************************************************************/
|
||||
ALTER TABLE `Album` ADD CONSTRAINT `FK_AlbumArtistId`
|
||||
FOREIGN KEY (`ArtistId`) REFERENCES `Artist` (`ArtistId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_AlbumArtistId` ON `Album` (`ArtistId`);
|
||||
|
||||
ALTER TABLE `Customer` ADD CONSTRAINT `FK_CustomerSupportRepId`
|
||||
FOREIGN KEY (`SupportRepId`) REFERENCES `Employee` (`EmployeeId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_CustomerSupportRepId` ON `Customer` (`SupportRepId`);
|
||||
|
||||
ALTER TABLE `Employee` ADD CONSTRAINT `FK_EmployeeReportsTo`
|
||||
FOREIGN KEY (`ReportsTo`) REFERENCES `Employee` (`EmployeeId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_EmployeeReportsTo` ON `Employee` (`ReportsTo`);
|
||||
|
||||
ALTER TABLE `Invoice` ADD CONSTRAINT `FK_InvoiceCustomerId`
|
||||
FOREIGN KEY (`CustomerId`) REFERENCES `Customer` (`CustomerId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_InvoiceCustomerId` ON `Invoice` (`CustomerId`);
|
||||
|
||||
ALTER TABLE `PlaylistTrack` ADD CONSTRAINT `FK_PlaylistTrackPlaylistId`
|
||||
FOREIGN KEY (`PlaylistId`) REFERENCES `Playlist` (`PlaylistId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_PlaylistTrackPlaylistId` ON `PlaylistTrack` (`PlaylistId`);
|
||||
|
||||
ALTER TABLE `PlaylistTrack` ADD CONSTRAINT `FK_PlaylistTrackTrackId`
|
||||
FOREIGN KEY (`TrackId`) REFERENCES `Track` (`TrackId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_PlaylistTrackTrackId` ON `PlaylistTrack` (`TrackId`);
|
||||
|
||||
ALTER TABLE `Track` ADD CONSTRAINT `FK_TrackAlbumId`
|
||||
FOREIGN KEY (`AlbumId`) REFERENCES `Album` (`AlbumId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_TrackAlbumId` ON `Track` (`AlbumId`);
|
||||
|
||||
ALTER TABLE `Track` ADD CONSTRAINT `FK_TrackGenreId`
|
||||
FOREIGN KEY (`GenreId`) REFERENCES `Genre` (`GenreId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_TrackGenreId` ON `Track` (`GenreId`);
|
||||
|
||||
ALTER TABLE `Track` ADD CONSTRAINT `FK_TrackMediaTypeId`
|
||||
FOREIGN KEY (`MediaTypeId`) REFERENCES `MediaType` (`MediaTypeId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||
|
||||
CREATE INDEX `IFK_TrackMediaTypeId` ON `Track` (`MediaTypeId`);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user