prostgles-server 1.5.122 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DboBuilder.d.ts +52 -27
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +404 -85
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.d.ts +160 -0
- package/dist/FileManager.d.ts.map +1 -0
- package/dist/FileManager.js +419 -0
- package/dist/FileManager.js.map +1 -0
- package/dist/Prostgles.d.ts +145 -79
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +240 -180
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager.js +1 -1
- package/dist/PubSubManager.js.map +1 -1
- package/dist/QueryBuilder.d.ts.map +1 -1
- package/dist/QueryBuilder.js +8 -5
- package/dist/QueryBuilder.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/lib/DboBuilder.ts +541 -136
- package/lib/FileManager.ts +546 -0
- package/lib/Prostgles.ts +407 -253
- package/lib/PubSubManager.ts +1 -1
- package/lib/QueryBuilder.ts +10 -6
- package/lib/index.ts +3 -3
- package/package.json +8 -2
- package/tests/client/index.js +18 -6
- package/tests/client/index.ts +16 -4
- package/tests/client/package-lock.json +27 -26
- package/tests/client/package.json +1 -1
- package/tests/client_only_queries.js +4 -4
- package/tests/config_test/DBoGenerated.d.ts +231 -8
- package/tests/config_test/index.html +35 -9
- package/tests/config_test/index.js +55 -97
- package/tests/config_test/index.js.map +1 -0
- package/tests/config_test/index.ts +67 -113
- package/tests/config_test/init.sql +50 -24
- package/tests/config_test/media/002d5f12-63c3-41f3-9007-cd33009104f4.txt +1 -0
- package/tests/config_test/media/003f0136-d231-4dd1-8937-08fa9a7c3d2e.txt +1 -0
- package/tests/config_test/media/01bd39a0-083b-4bfa-91fc-f4d1d9b7b204.txt +1 -0
- package/tests/config_test/media/0224513a-62de-4f0a-92bb-dcb3f700da7f.txt +1 -0
- package/tests/config_test/media/03005346-d6d5-4824-96ae-5ad7ca762730.txt +1 -0
- package/tests/config_test/media/0342d065-9bd2-443f-9058-f8058ab52de0.txt +1 -0
- package/tests/config_test/media/0350d1cf-b3b3-4c58-aef2-ad1dc3f80c6c.txt +1 -0
- package/tests/config_test/media/036833d7-d166-43a1-bda3-b801938c614d.txt +1 -0
- package/tests/config_test/media/03b5324d-0913-408f-a78a-252ff8fe8126.txt +1 -0
- package/tests/config_test/media/0540b670-bf42-4a83-82b2-67164630a24a.txt +1 -0
- package/tests/config_test/media/05900f5f-3b67-4ee9-8e1d-b511fd79d878.txt +1 -0
- package/tests/config_test/media/05969252-3f9e-41a0-88ce-aa23ba8b42eb.txt +1 -0
- package/tests/config_test/media/05a8a60c-cc75-4469-8e06-55d88c26e97a.txt +1 -0
- package/tests/config_test/media/05e662fc-7a03-4303-ae42-27a28d9affb9.txt +1 -0
- package/tests/config_test/media/061f86e6-0ddd-49b0-b243-4c063c6db5e4.txt +1 -0
- package/tests/config_test/media/062cf311-3976-471e-88ec-d618bd8ceeaa.txt +1 -0
- package/tests/config_test/media/0693b073-77b9-446a-9606-5453bcafd200.txt +1 -0
- package/tests/config_test/media/07a09b79-b1ed-45a3-bb42-42cd1a00757b.txt +1 -0
- package/tests/config_test/media/07e48303-0520-4a80-921e-130417488baa.txt +1 -0
- package/tests/config_test/media/09ab90a6-8461-4f39-89fb-8e2277974771.txt +1 -0
- package/tests/config_test/media/09c1194a-5d09-417c-a0c4-26dcf1e65bdb.txt +1 -0
- package/tests/config_test/media/09dc662f-6a9d-4a0b-95ba-8d24ceae9721.txt +1 -0
- package/tests/config_test/media/09ebb492-6146-4ff8-ac83-ac9970f5844c.txt +1 -0
- package/tests/config_test/media/0a198d6f-c629-42bd-9aa8-3c0ff62e1f1d.txt +1 -0
- package/tests/config_test/media/0a6d3ced-a16f-4491-b25b-679e9323ad79.txt +1 -0
- package/tests/config_test/media/0a817a27-6888-4ac4-b07b-4d1275e035ff.txt +1 -0
- package/tests/config_test/media/0aadc4f7-bf87-49da-8ef6-0857bf1789b4.txt +1 -0
- package/tests/config_test/media/0abe4a2e-fd75-428b-9757-2535d4112862.txt +1 -0
- package/tests/config_test/media/0ad9deca-6362-41dd-b0b3-8f8a71e2e1e2.txt +1 -0
- package/tests/config_test/media/0bdb19df-b82c-4a07-8d9b-a6e3a2af8a94.txt +1 -0
- package/tests/config_test/media/0c1e4575-223d-4d0c-b2c3-6ab6bb9844e6.txt +1 -0
- package/tests/config_test/media/0c4e3d55-432f-42e9-aa53-48e816ff6d15.txt +1 -0
- package/tests/config_test/media/0c5b47a4-884a-4207-b106-fa2557fc5600.txt +1 -0
- package/tests/config_test/media/0d8fbe62-22bc-47e8-b4ca-b77d8fd02798.txt +1 -0
- package/tests/config_test/media/0d95a140-3ae1-4faa-a34b-ed5b6cc524ac.txt +1 -0
- package/tests/config_test/media/0e0907c7-bd10-4ce2-ac36-066916a8a793.txt +1 -0
- package/tests/config_test/media/0e192b00-2676-4130-8819-90ee34a50932.txt +1 -0
- package/tests/config_test/media/0f9e3861-0e59-4ae4-a606-1fdd2c890c5b.txt +1 -0
- package/tests/config_test/media/1039afe1-24e9-4ea6-bfd0-6871b5f06f8f.txt +1 -0
- package/tests/config_test/media/1052e479-295e-46e9-88ec-d8f20efa75ea.txt +1 -0
- package/tests/config_test/media/11973be6-a675-4e0d-a54e-1eccbcdb3f2a.txt +1 -0
- package/tests/config_test/media/121656f5-1ef9-4181-9ee0-e3ae1433fed1.txt +1 -0
- package/tests/config_test/media/121a16b4-a925-406b-9ba9-0e4b4d413402.txt +1 -0
- package/tests/config_test/media/122cdf36-5b17-4b81-aa9d-c6725d1e8c8a.txt +1 -0
- package/tests/config_test/media/12435236-4735-4978-a234-52100181ee72.txt +1 -0
- package/tests/config_test/media/130eea28-64d0-40c4-8fa4-0cfba493e321.txt +1 -0
- package/tests/config_test/media/1435b6fd-4b86-4f7e-8e68-b607c5e5f2ad.txt +1 -0
- package/tests/config_test/media/14d78bf0-fd3e-4686-863d-b18d2c69b181.txt +1 -0
- package/tests/config_test/media/14dffd0e-23ae-4659-b8b3-25c89593643e.txt +1 -0
- package/tests/config_test/media/14e32028-fb4d-4743-a34d-c325be47b25e.txt +1 -0
- package/tests/config_test/media/14fb2139-eb53-4246-8dcb-c1e568572306.txt +1 -0
- package/tests/config_test/media/1644d880-c61f-4e9c-9c5c-892623ff5689.txt +1 -0
- package/tests/config_test/media/16818bb0-a022-4fd9-acac-e5a448b58eaf.txt +1 -0
- package/tests/config_test/media/16a47db5-262f-490b-850f-0f82019a58b4.txt +1 -0
- package/tests/config_test/media/16c2ffcc-8632-4935-b12d-be1313b74ddc.txt +1 -0
- package/tests/config_test/media/16fe3928-25c7-4e3a-9f68-51520712a4f6.txt +1 -0
- package/tests/config_test/media/172a7736-d3cf-431c-92a5-1a4aa6e89c7e.txt +1 -0
- package/tests/config_test/media/1784e75f-d063-43e2-accb-364ed36ae7d0.txt +1 -0
- package/tests/config_test/media/182e9dcc-0443-4cc5-aff1-9cf954dab771.txt +1 -0
- package/tests/config_test/media/19158860-e0c0-4ac7-afee-5428f9060b36.txt +1 -0
- package/tests/config_test/media/1998f271-5d71-4bc0-9f92-376a8a98f7da.txt +1 -0
- package/tests/config_test/media/19d2b383-4b1b-41a5-a7ef-ceaf1e691e0f.txt +1 -0
- package/tests/config_test/media/1c33fac7-470b-47e0-8aba-7c7394406aad.txt +1 -0
- package/tests/config_test/media/1d8a6c9c-0539-4c08-8ea5-4bd0bbe8fa18.txt +1 -0
- package/tests/config_test/media/1de86105-97ce-49c0-8137-030f3af37fb5.txt +1 -0
- package/tests/config_test/media/1f1393d1-e2f2-445e-806e-05c9a6135437.txt +1 -0
- package/tests/config_test/media/1fc303e7-943c-42cd-87f0-d14b361e5564.txt +1 -0
- package/tests/config_test/media/1fd79260-4246-4230-b4ab-c42baad3de44.txt +1 -0
- package/tests/config_test/media/209085fb-8441-4039-bb01-32171248c7f7.txt +1 -0
- package/tests/config_test/media/20ab3e07-77d6-4fbc-9532-b47e16c38e68.txt +1 -0
- package/tests/config_test/media/20d43c00-35b4-43da-b79f-cb59888ac41b.txt +1 -0
- package/tests/config_test/media/20f7f651-06de-4d5f-aa39-2c261c662cd3.txt +1 -0
- package/tests/config_test/media/214af93c-f973-4809-a440-87a5a3b28e83.txt +1 -0
- package/tests/config_test/media/22bffc7f-c942-4163-bbf6-141f585f3671.txt +1 -0
- package/tests/config_test/media/23d09f4f-db2a-44cb-9d1b-552eb0568acf.txt +1 -0
- package/tests/config_test/media/24a256f7-fe83-4a6d-ace8-a2c2ded37341.txt +1 -0
- package/tests/config_test/media/25522aa0-9c30-413b-b0df-f9f2c2562769.txt +1 -0
- package/tests/config_test/media/25806b78-52cd-40f2-907a-d4fba3821435.txt +1 -0
- package/tests/config_test/media/259920a6-0c5a-4193-8940-91fc0183204c.txt +1 -0
- package/tests/config_test/media/28ca6b02-f58e-4204-a87a-28347d8f5884.txt +1 -0
- package/tests/config_test/media/2a3f8e6e-3bc4-44b3-ac43-17851b1f53e4.txt +1 -0
- package/tests/config_test/media/2afe6eb3-64ca-4aae-b002-676ab3862c96.txt +1 -0
- package/tests/config_test/media/2bd913c1-408a-4451-b465-e48452ca46cb.txt +1 -0
- package/tests/config_test/media/2bfe0f21-70b6-45a7-9bc0-f60dee9b0786.txt +1 -0
- package/tests/config_test/media/2c37bb2d-412e-44be-8f91-58bf1adae554.txt +1 -0
- package/tests/config_test/media/2c6ffa05-479f-4d8f-bc98-0c050567ef28.txt +1 -0
- package/tests/config_test/media/2ce666cb-e1e7-411f-9727-ce47be9365f5.txt +1 -0
- package/tests/config_test/media/2d737158-559b-4fca-b35c-3a832e21a0bf.txt +1 -0
- package/tests/config_test/media/2d7cae40-8fa9-4715-8834-b105a5815efc.txt +1 -0
- package/tests/config_test/media/2ea6b55b-eb9e-4b72-9510-4d5b00490076.txt +1 -0
- package/tests/config_test/media/2f0f8b73-7a21-48e5-b0d8-6e733de5eef8.txt +1 -0
- package/tests/config_test/media/2f37ed63-4a76-49e8-9df0-b586e2318b54.txt +1 -0
- package/tests/config_test/media/2f4e2797-63dd-43cb-8edf-b6e4a5f6d85b.txt +1 -0
- package/tests/config_test/media/2fc8b254-571c-49da-b8d8-af12bead2b6e.txt +1 -0
- package/tests/config_test/media/31887ce4-a69d-429e-bd32-e3fcf1b6ec3c.txt +1 -0
- package/tests/config_test/media/31ab5780-f38f-4614-b11e-1399a5d19e88.txt +1 -0
- package/tests/config_test/media/330b1369-abf8-4a0d-aac3-15185409347b.txt +1 -0
- package/tests/config_test/media/332306f0-16a4-46f1-b312-42d5b1739561.txt +1 -0
- package/tests/config_test/media/33729cd7-ef5a-461d-860c-188b12c3c0e1.txt +1 -0
- package/tests/config_test/media/34f797b8-98c7-47ff-ac4f-da792d3e59ec.txt +1 -0
- package/tests/config_test/media/35753dc2-4a87-4fdb-b547-8ba587ab7cca.txt +1 -0
- package/tests/config_test/media/35cf2e07-f087-410d-898b-326b16617631.txt +1 -0
- package/tests/config_test/media/3704c54c-08b7-429c-98fa-0656dca539ca.txt +1 -0
- package/tests/config_test/media/3823f728-c199-416b-aeb3-223bc0dc006a.txt +1 -0
- package/tests/config_test/media/38d31ef9-7e41-47f9-8e05-e826f9d1a378.txt +1 -0
- package/tests/config_test/media/39504f22-47a7-428a-8793-7cb9cc79b23d.txt +1 -0
- package/tests/config_test/media/39baaddd-7764-48b4-9dc3-e77f91b04ff0.txt +1 -0
- package/tests/config_test/media/39c91ceb-928d-4279-a8a7-00f363b18384.txt +1 -0
- package/tests/config_test/media/3a58c511-78de-425f-a857-63a43e3b4c51.txt +1 -0
- package/tests/config_test/media/3c3fd2ca-8a72-4d38-899b-776f4ff690fc.txt +1 -0
- package/tests/config_test/media/3c592436-14fa-49f5-be05-1d8aff250d0d.txt +1 -0
- package/tests/config_test/media/3db275e8-327d-45d4-a755-3df103967b04.txt +1 -0
- package/tests/config_test/media/3de350d2-a26d-40ef-ad11-fa1454a0f50a.txt +1 -0
- package/tests/config_test/media/3e4f08ac-8b0a-4ec6-b3be-ff6ce140af6a.txt +1 -0
- package/tests/config_test/media/3fa40e56-cb30-4722-ba36-583e7c064d16.txt +1 -0
- package/tests/config_test/media/3fe9495c-6fa5-49ca-a16f-e3cf1808d619.txt +1 -0
- package/tests/config_test/media/3fed5003-1a13-433d-a82f-325dbd57ff55.txt +1 -0
- package/tests/config_test/media/40dfa3df-237e-4e0d-99ff-c90000c5f7ed.txt +1 -0
- package/tests/config_test/media/40ea2d40-3f28-46e5-a41d-5aae1721de21.txt +1 -0
- package/tests/config_test/media/410c564d-860e-4693-9112-efb2304bf940.txt +1 -0
- package/tests/config_test/media/424c9239-aa07-48f3-9a64-c99261387fec.txt +1 -0
- package/tests/config_test/media/4260eab4-3e7d-420a-bc8f-b9cc945f3c80.txt +1 -0
- package/tests/config_test/media/42886a01-8047-4a49-beab-97f5a3a7c128.txt +1 -0
- package/tests/config_test/media/44e2e069-a213-4632-b13b-153461000c5e.txt +1 -0
- package/tests/config_test/media/46520b9c-f878-41e9-9840-0d0babb9b63d.txt +1 -0
- package/tests/config_test/media/46f010a8-66b2-48d8-b4a6-62cc23e26008.txt +1 -0
- package/tests/config_test/media/48c9f649-f776-4cd9-8df5-56b5312f51c2.txt +1 -0
- package/tests/config_test/media/49f5836b-4fb0-4ee1-831b-91ddfcaac0bf.txt +1 -0
- package/tests/config_test/media/4a2d3bae-040e-44fe-bb36-301af65302fd.txt +1 -0
- package/tests/config_test/media/4ab15a14-36c7-4a4e-8179-be60c56368c5.txt +1 -0
- package/tests/config_test/media/4b98c009-458a-4e35-96e2-ccd465673234.txt +1 -0
- package/tests/config_test/media/4bf86749-685c-423c-9997-eb73cb0bc254.txt +1 -0
- package/tests/config_test/media/4db9d5ad-c703-4fb5-9b15-9c48ee3edca1.txt +1 -0
- package/tests/config_test/media/4dd147f7-59ef-4b8f-963b-1dbedb0d10a2.txt +1 -0
- package/tests/config_test/media/4e61da19-25e1-44a0-b901-2cefc3461619.txt +1 -0
- package/tests/config_test/media/4e66c64c-72e3-4458-8ac9-490774193a50.txt +1 -0
- package/tests/config_test/media/4e98ba50-1583-4d7b-9e0d-7c577af28182.txt +1 -0
- package/tests/config_test/media/4e9cb872-dd5f-404a-ae9f-97ec69606d36.txt +1 -0
- package/tests/config_test/media/4fbb89d3-e922-42f2-81ed-6c1370199c94.txt +1 -0
- package/tests/config_test/media/4fdf0b1d-1718-4f53-8a9c-6d44bdef0c60.txt +1 -0
- package/tests/config_test/media/503c6659-ff3f-4df4-ac88-628e809b2e72.txt +1 -0
- package/tests/config_test/media/51010c69-5b30-4ac7-8ed9-12f1866ef145.txt +1 -0
- package/tests/config_test/media/51b2d38d-230e-4eb0-9b1f-dab8fa8b415d.txt +1 -0
- package/tests/config_test/media/51cc7a7b-a764-4ebd-ac31-ba881fa1404e.txt +1 -0
- package/tests/config_test/media/52f0dbb6-2179-4472-871d-dd80c6341c58.txt +1 -0
- package/tests/config_test/media/54aff9eb-0202-447d-9c95-c74560cabcd7.txt +1 -0
- package/tests/config_test/media/55551c8d-4305-48ca-a752-ade3a9efb538.txt +1 -0
- package/tests/config_test/media/555b772b-6c78-4667-80d6-bbe2f290611c.txt +1 -0
- package/tests/config_test/media/555fbb0b-febc-4611-9efa-16ddbf8e988c.txt +1 -0
- package/tests/config_test/media/55a84883-9a15-4368-b8fe-05bd848de6ba.txt +1 -0
- package/tests/config_test/media/56523343-de4a-49de-94ae-8205cc92eeb6.txt +1 -0
- package/tests/config_test/media/567d431e-813f-47d7-a3d2-e2371c0f32e2.txt +1 -0
- package/tests/config_test/media/56fa54a9-10a4-42a3-9a29-ea132adf09bc.txt +1 -0
- package/tests/config_test/media/57734e9e-d5b8-4942-a76c-db1d0cb72aea.txt +1 -0
- package/tests/config_test/media/5777d7a2-cd26-494e-92ba-fa681c2445ef.txt +1 -0
- package/tests/config_test/media/582f6e3f-1b06-4f97-bb81-4355cc139e41.txt +1 -0
- package/tests/config_test/media/584ef61c-974e-4882-aaff-8089029b7a66.txt +1 -0
- package/tests/config_test/media/58987f15-0627-4c3c-a8ba-33e0315548f9.txt +1 -0
- package/tests/config_test/media/58eb23e6-6110-489f-81d3-37d48bcd3bf7.txt +1 -0
- package/tests/config_test/media/5c5e5543-491c-49d2-b762-162faa75019a.txt +1 -0
- package/tests/config_test/media/5e688b4a-afba-4d47-bdc8-dd108d673619.txt +1 -0
- package/tests/config_test/media/5f42b54e-6020-4552-8872-17dc7d57b110.txt +1 -0
- package/tests/config_test/media/5f5ae0f6-816d-4425-8403-5d07284db0aa.txt +1 -0
- package/tests/config_test/media/5ffa2969-2d65-430e-a621-420c07f18f41.txt +1 -0
- package/tests/config_test/media/62a62671-e4bc-4312-8dfd-a06168c22aee.txt +1 -0
- package/tests/config_test/media/63732c16-1f11-4635-b2bc-62a6459e651e.txt +1 -0
- package/tests/config_test/media/64b8c889-5423-4cbb-9816-a05e72771b52.txt +1 -0
- package/tests/config_test/media/653d8bcd-4e60-4fda-9676-2e0054d966c1.txt +1 -0
- package/tests/config_test/media/6602e1e0-07e9-4dd1-b3c8-276f24e2a41f.txt +1 -0
- package/tests/config_test/media/67868636-99cc-441b-991d-7fe781b67745.txt +1 -0
- package/tests/config_test/media/67b4eede-7118-4e25-8801-ca53d0fd9d7f.txt +1 -0
- package/tests/config_test/media/67b817df-8c2f-4fe5-ba38-6090b5658943.txt +1 -0
- package/tests/config_test/media/67f8c8a6-8aa3-4d0f-bcf6-bec8c5a6726a.txt +1 -0
- package/tests/config_test/media/6808c09c-a1a9-4eea-92d6-327957c599be.txt +1 -0
- package/tests/config_test/media/681f8ee3-0d7f-4d85-a593-0c1f5ceea9be.txt +1 -0
- package/tests/config_test/media/68ae942b-c728-4127-a057-dfd08edc1aee.txt +1 -0
- package/tests/config_test/media/6a405178-234d-4562-ab34-c554826476fc.txt +1 -0
- package/tests/config_test/media/6b801410-b1fb-43f6-935e-c7cb09fb0f5a.txt +1 -0
- package/tests/config_test/media/6bd41073-fa62-4c20-a896-8b1e5d2b8381.txt +1 -0
- package/tests/config_test/media/6ea9bf1d-780e-4fc2-987e-841038b791cd.txt +1 -0
- package/tests/config_test/media/6fa62bcc-859a-44eb-a85b-ed12b3aec3ae.txt +1 -0
- package/tests/config_test/media/70118801-66f3-4165-a0b2-8918e4d4bd15.txt +1 -0
- package/tests/config_test/media/70640e73-56dc-4880-af62-ad7530a1185d.txt +1 -0
- package/tests/config_test/media/7114e6d7-f285-48b3-80c9-ec3fb1c3233e.txt +1 -0
- package/tests/config_test/media/71997029-9398-4efb-9868-3025b6de861a.txt +1 -0
- package/tests/config_test/media/725cb5f7-8410-4b7a-8427-90b213cea9d6.txt +1 -0
- package/tests/config_test/media/727960af-4454-4aa2-b479-c88398ca2c01.txt +1 -0
- package/tests/config_test/media/763e2702-7677-48b0-89be-30f8caf56667.txt +1 -0
- package/tests/config_test/media/7682d7aa-6622-4ae1-bdfc-bb5134cf92d9.txt +1 -0
- package/tests/config_test/media/773d6a45-2316-41da-9973-1395727ffc1f.txt +1 -0
- package/tests/config_test/media/783cdda1-9913-4ab0-aba6-56a4c22e2b61.txt +1 -0
- package/tests/config_test/media/78becb97-76f6-4fd1-976d-ab3d5e4b21c2.txt +1 -0
- package/tests/config_test/media/78cb1409-965a-44ea-b42b-0363db4d2ebd.txt +1 -0
- package/tests/config_test/media/79f9864e-b5d5-4c8d-bb66-749f5b49877f.txt +1 -0
- package/tests/config_test/media/7b2928b9-4fd3-46c7-8b78-f8d1118c605b.txt +1 -0
- package/tests/config_test/media/7b5aead0-b20b-4719-88aa-3dd070d53e4d.txt +1 -0
- package/tests/config_test/media/7c1a82c9-391d-40fb-a6f3-d79468fcd45f.txt +1 -0
- package/tests/config_test/media/7f1aefd7-7c6b-4b29-9f71-a85d800d63eb.txt +1 -0
- package/tests/config_test/media/7fe1aa1b-3e92-4f1b-a77d-bf69601ba162.txt +1 -0
- package/tests/config_test/media/802ca8c0-8898-446d-aeca-59d0cce3eea5.txt +1 -0
- package/tests/config_test/media/8034e1cc-a82a-4e65-9019-ecf53a212c9e.txt +1 -0
- package/tests/config_test/media/80828d5a-916c-412b-aa23-eccdf3ce4078.txt +1 -0
- package/tests/config_test/media/81a6ec1c-49c5-490b-afe8-bd47a3c3b1e7.txt +1 -0
- package/tests/config_test/media/82827b46-f1f4-4b2a-bd5a-4a83e6b5cc12.txt +1 -0
- package/tests/config_test/media/82f7163d-c5a6-44fe-b06a-b1863c553af4.txt +1 -0
- package/tests/config_test/media/83141a3e-3f8b-456a-83f1-b9b4ada167f0.txt +1 -0
- package/tests/config_test/media/837397e7-63f9-4cba-8b10-51d565e00341.txt +1 -0
- package/tests/config_test/media/8440b86e-2036-46ef-affe-e052ae1e232f.txt +1 -0
- package/tests/config_test/media/8729c33a-8f9d-496c-8090-42947d3bd4c7.txt +1 -0
- package/tests/config_test/media/874e1047-3429-443a-868d-4ce453c3a525.txt +1 -0
- package/tests/config_test/media/8770cffa-58f5-4c15-869a-687c77529f81.txt +1 -0
- package/tests/config_test/media/87c977c0-4375-4527-abc1-6223c71e8756.txt +1 -0
- package/tests/config_test/media/889e72cc-7e19-40ef-9d5b-1e501f3b48c7.txt +1 -0
- package/tests/config_test/media/88c89c9b-755e-43f9-9ac6-c01df1e83dfb.txt +1 -0
- package/tests/config_test/media/894ee8b5-d527-40e2-a7e1-475d9f07c2aa.txt +1 -0
- package/tests/config_test/media/89ec8a46-a4bf-4462-8f6d-c132016af9e1.txt +1 -0
- package/tests/config_test/media/8b2bee47-1673-4cd9-a8d5-033ef092b93e.txt +1 -0
- package/tests/config_test/media/8c362262-34ff-4707-ab5f-c334034083ee.txt +1 -0
- package/tests/config_test/media/8c458967-085b-4750-91e6-3ea391147bc7.txt +1 -0
- package/tests/config_test/media/8c5b0560-fc62-47a5-b480-a93120ca7bc4.txt +1 -0
- package/tests/config_test/media/8ce076d6-e809-4355-97ab-96104b51b939.txt +1 -0
- package/tests/config_test/media/8d60f276-8a2d-48e2-934b-63ef82f03d0f.txt +1 -0
- package/tests/config_test/media/8d889db9-f6b8-4ccb-864c-d10d1a54f7e9.txt +1 -0
- package/tests/config_test/media/8df0284b-c43f-4c32-a4e1-7dbe2c8c80f0.txt +1 -0
- package/tests/config_test/media/8e583c0b-1e2e-4b51-b104-1382e81f69d9.txt +1 -0
- package/tests/config_test/media/8f57d7e8-0f26-4719-b4d1-37896da3f579.txt +1 -0
- package/tests/config_test/media/9070fc55-481f-44c9-96f2-62f7c0a08814.txt +1 -0
- package/tests/config_test/media/93743c64-b60e-4521-9774-4d3beffd4465.txt +1 -0
- package/tests/config_test/media/939c6b06-b95d-4de6-bdaa-6f33cbe1fc1e.txt +1 -0
- package/tests/config_test/media/94ac4fc1-ba54-43de-b283-a7fa05eb3921.txt +1 -0
- package/tests/config_test/media/95093a2d-81d2-46d7-a817-7ab507cc2454.txt +1 -0
- package/tests/config_test/media/9628850e-c8d3-44da-b3b4-b27e00ba0e05.txt +1 -0
- package/tests/config_test/media/965e4782-3120-41c1-a398-23b38a342d95.txt +1 -0
- package/tests/config_test/media/97216f64-db92-4fa8-a239-5a115e3293a0.txt +1 -0
- package/tests/config_test/media/97b54a41-ec05-498e-9c61-6ec20f34a331.txt +1 -0
- package/tests/config_test/media/97c15c9a-13b4-49f1-b9ea-708c92756b95.txt +1 -0
- package/tests/config_test/media/97e45e1c-d03b-4a17-bb6f-ea8601e7fdf4.txt +1 -0
- package/tests/config_test/media/98faca9f-2686-4338-a1c2-d1920cce2fc0.txt +1 -0
- package/tests/config_test/media/997016d6-6832-4c09-9f8d-949dba5f4f8e.txt +1 -0
- package/tests/config_test/media/99ce7c2e-d4a3-49d0-9251-9c62d28288f5.txt +1 -0
- package/tests/config_test/media/9a9940a6-78b9-4978-98a6-914a171406c3.txt +1 -0
- package/tests/config_test/media/9ade4d45-452f-4a3f-ba4f-d9a08da80dab.txt +1 -0
- package/tests/config_test/media/9aff7e30-1809-4021-8ab1-e9a04068ad15.txt +1 -0
- package/tests/config_test/media/9b6b83df-1ee4-48f2-a3b0-aee0723378fc.txt +1 -0
- package/tests/config_test/media/9bbf50e1-c19d-4cc4-a366-0dcc234f003f.txt +1 -0
- package/tests/config_test/media/9ce9bc18-89eb-4a6f-832d-a4380111ebfa.txt +1 -0
- package/tests/config_test/media/9d7e647b-f1a9-44a7-bb9d-5ad7ac545ed9.txt +1 -0
- package/tests/config_test/media/9e141207-cb69-47c7-a80a-9096886b0f4e.txt +1 -0
- package/tests/config_test/media/9e58e7cc-04bb-48d0-9af1-9fd7c80d46be.txt +1 -0
- package/tests/config_test/media/9f1f6f42-70f0-404e-89e4-31588f235108.txt +1 -0
- package/tests/config_test/media/9f3e0022-deb0-44a2-b47c-fd4880fb2fa6.txt +1 -0
- package/tests/config_test/media/a07a6a4e-25c7-4f91-acdc-411e676bae99.txt +1 -0
- package/tests/config_test/media/a08ef99a-7cff-4224-985f-aa7cf292c6c3.txt +1 -0
- package/tests/config_test/media/a0c4ef94-eb1d-4b7f-b636-62ad6914a69c.txt +1 -0
- package/tests/config_test/media/a170f562-2b00-4662-85d7-7c43f9f67e0c.txt +1 -0
- package/tests/config_test/media/a32bb27b-7772-4373-ada7-890d9315256f.txt +1 -0
- package/tests/config_test/media/a36c31b9-f5c1-43a9-b448-34a380990d3f.txt +1 -0
- package/tests/config_test/media/a3831984-3f77-4bac-af70-5a7de6ce5424.txt +1 -0
- package/tests/config_test/media/a4f1f023-6135-44da-b580-c1d024cd3f47.txt +1 -0
- package/tests/config_test/media/a6227af7-2710-47be-ab45-25f497cec39f.txt +1 -0
- package/tests/config_test/media/a64baf32-bd1e-4353-bdf8-74cc3672639f.txt +1 -0
- package/tests/config_test/media/a67f5ac1-9645-4f28-a221-c3466b6ba865.txt +1 -0
- package/tests/config_test/media/a7f8e5a7-0c0e-48fb-b323-743b121fc091.txt +1 -0
- package/tests/config_test/media/a969343e-857b-49b1-a311-0030e0cc57cd.txt +1 -0
- package/tests/config_test/media/a9bc7241-7413-4113-8baf-784af73b110d.txt +1 -0
- package/tests/config_test/media/aa5b6ba2-76cf-4ca2-90b8-8f83cb23687e.txt +1 -0
- package/tests/config_test/media/aa5f29d2-3c13-4a15-ac68-b28964f80a1d.txt +1 -0
- package/tests/config_test/media/aaa97926-1d6f-4f5a-9af8-e68584797d23.txt +1 -0
- package/tests/config_test/media/ac98c0da-b830-4ec8-9ab6-d8e72a6d0bf2.txt +1 -0
- package/tests/config_test/media/af2dda92-1ed0-4b00-a786-f0f7516d4b2b.txt +1 -0
- package/tests/config_test/media/b0327e27-0733-4f08-b728-8dca3eae7526.txt +1 -0
- package/tests/config_test/media/b23fc74b-403b-49d6-810b-5c3dc71f48de.txt +1 -0
- package/tests/config_test/media/b2aa3fbb-ef3f-423b-b7a9-1863aba35bdd.txt +1 -0
- package/tests/config_test/media/b38675e5-1ecf-4967-88ef-9f60cce1bb89.txt +1 -0
- package/tests/config_test/media/b45c1951-b045-4762-a9fa-8d346617c1b5.txt +1 -0
- package/tests/config_test/media/b5359b92-46ea-4ebc-b6bc-102ef03ac5f5.txt +1 -0
- package/tests/config_test/media/b5d5aa47-fb92-48a6-9bd5-e394dc7b5212.txt +1 -0
- package/tests/config_test/media/b6bba0b4-d9fe-431b-8836-ef41bcd890fe.txt +1 -0
- package/tests/config_test/media/b72f4de8-5071-4314-a8e9-0adc7ce98fb8.txt +1 -0
- package/tests/config_test/media/b792506c-a05f-4b33-8934-83a7f2b1ebdd.txt +1 -0
- package/tests/config_test/media/b7e0e1bd-5e0f-44cc-89b9-55e67c368dce.txt +1 -0
- package/tests/config_test/media/b7ec24ac-6967-441e-9cb9-533daa7b443e.txt +1 -0
- package/tests/config_test/media/b86f2242-9e7c-4434-ac3d-e8fe868ab758.txt +1 -0
- package/tests/config_test/media/b8aa1cbb-05fe-4564-bfad-96a5243eec54.txt +1 -0
- package/tests/config_test/media/b8c54323-7977-4626-9412-66116a40fe42.txt +1 -0
- package/tests/config_test/media/ba3387a6-c5cd-4677-bddd-a399c6f648a3.txt +1 -0
- package/tests/config_test/media/ba70f293-7a40-4a5d-9e60-9d9c3d1fd2c0.txt +1 -0
- package/tests/config_test/media/ba7cad62-385b-494c-9688-b008fbae10c9.txt +1 -0
- package/tests/config_test/media/bb07c0ca-4b9f-4888-9109-95087951d2a6.txt +1 -0
- package/tests/config_test/media/bcf860eb-13b6-44b7-9a58-f2b6422a4fb0.txt +1 -0
- package/tests/config_test/media/bd8a019f-c9fd-4289-bc38-cc222a247ba8.txt +1 -0
- package/tests/config_test/media/bda18b4f-b4f3-4095-8b9b-8d715945ded1.txt +1 -0
- package/tests/config_test/media/bf3e4228-17f4-40d6-9d23-7ba79a333be5.txt +1 -0
- package/tests/config_test/media/bfa2fe67-34fe-466c-b807-bea2ddfb0141.txt +1 -0
- package/tests/config_test/media/c15ecf6e-6167-42ad-ba24-161216dbabfb.txt +1 -0
- package/tests/config_test/media/c17436fb-113d-425e-b59b-cafe93e3418e.txt +1 -0
- package/tests/config_test/media/c22154ee-3f66-4996-8ed7-df6120806040.txt +1 -0
- package/tests/config_test/media/c2c47ffe-50a1-46f4-bace-d66008c3ce7b.txt +1 -0
- package/tests/config_test/media/c4e0c0bf-f9b0-4fec-8fbf-292d8d2fe254.txt +1 -0
- package/tests/config_test/media/c56803d2-29bc-4359-8cb4-ea9574a47b2d.txt +1 -0
- package/tests/config_test/media/c607d0ee-1641-47e1-83d5-66e9e4bed857.txt +1 -0
- package/tests/config_test/media/c62769c5-d469-4499-bf09-97f752a65397.txt +1 -0
- package/tests/config_test/media/c667bac7-c161-4f89-b311-9975dcac5865.txt +1 -0
- package/tests/config_test/media/c7485a24-95f6-45e7-90f2-6a4716e8971e.txt +1 -0
- package/tests/config_test/media/c80b124d-579a-4f7b-9743-5428be624edf.txt +1 -0
- package/tests/config_test/media/c8f6e757-0252-4ac6-a439-14a5cd406e16.txt +1 -0
- package/tests/config_test/media/c94c9c39-24e1-4ce3-94bd-e32db7052a9d.txt +1 -0
- package/tests/config_test/media/ca950ac2-312d-472f-ae0f-7604edd6eae8.txt +1 -0
- package/tests/config_test/media/cc1ffb29-8d6f-47cd-9efd-f38832045570.txt +1 -0
- package/tests/config_test/media/cf42859e-23b6-4f7b-9b00-4928b0fc33fd.txt +1 -0
- package/tests/config_test/media/d000b20e-fd2c-4d07-bb8c-fc48541fe420.txt +1 -0
- package/tests/config_test/media/d191b4ba-365d-4346-96c6-7ab4f27a163d.txt +1 -0
- package/tests/config_test/media/d2739585-5101-44b5-8dd1-bbb09a104978.txt +1 -0
- package/tests/config_test/media/d31d2bf6-bdb1-4de2-9942-3ab83e857a52.txt +1 -0
- package/tests/config_test/media/d4027635-8e25-4cf5-a3dc-73a826c5045c.txt +1 -0
- package/tests/config_test/media/d476077e-d4e9-42e8-a7db-ded7f075d88d.txt +1 -0
- package/tests/config_test/media/d4fe0fae-942f-4966-ab76-64ba34352269.txt +1 -0
- package/tests/config_test/media/d551ace3-b4bb-4306-ad17-4873cdbfa5f5.txt +1 -0
- package/tests/config_test/media/d5aabdf7-472d-4268-b542-ddce2b25c70e.txt +1 -0
- package/tests/config_test/media/d6279202-c868-4058-947d-d9e44acd26cc.txt +1 -0
- package/tests/config_test/media/d62ecbb0-df04-449c-91fa-5d60f96c717f.txt +1 -0
- package/tests/config_test/media/d6309af6-add5-4d3d-9596-92a3c1b785b8.txt +1 -0
- package/tests/config_test/media/d6f419fc-2441-4170-8967-1d3f2a232869.txt +1 -0
- package/tests/config_test/media/d78e034e-51e4-47e7-802b-2fb9ca7aeeb0.txt +1 -0
- package/tests/config_test/media/d7a5dea2-b545-4b1f-9f25-0ca31bfa9ba9.txt +1 -0
- package/tests/config_test/media/d7eff0e2-7e17-4364-995a-13608df42af3.txt +1 -0
- package/tests/config_test/media/d89b187c-f4e0-45c2-8622-8f6c05b3f8f8.txt +1 -0
- package/tests/config_test/media/d8e4f769-79a3-4577-ae6f-e21b6c373661.txt +1 -0
- package/tests/config_test/media/d9266efc-e275-4daf-bb58-a7d224649ac5.txt +1 -0
- package/tests/config_test/media/db04add1-1f89-4657-a897-4779001bd6cc.txt +1 -0
- package/tests/config_test/media/dc709e83-06c7-4371-95f4-c4982d094c7b.txt +1 -0
- package/tests/config_test/media/de3812df-b579-4203-98b1-7ee8821680a4.txt +1 -0
- package/tests/config_test/media/df1a21db-e3e1-4670-b909-da77c591486e.txt +1 -0
- package/tests/config_test/media/e033a02b-3a38-4b6f-8873-b121cc0cbcad.txt +1 -0
- package/tests/config_test/media/e13e2632-4aaf-4a79-b6b4-ef1f81028346.txt +1 -0
- package/tests/config_test/media/e19633b3-1ab1-4f18-86cd-e421633e96af.txt +1 -0
- package/tests/config_test/media/e1dc9b89-9563-4937-b529-43cd55f82a98.txt +1 -0
- package/tests/config_test/media/e37f9c75-0571-4336-b7a6-d431e295ba92.txt +1 -0
- package/tests/config_test/media/e3fb83b1-53ed-470d-b9f4-015f98c6a128.txt +1 -0
- package/tests/config_test/media/e6c964da-ab48-4779-9706-0ae9ab5f22bb.txt +1 -0
- package/tests/config_test/media/e732131f-d7e2-4969-9f0f-10672281405b.txt +1 -0
- package/tests/config_test/media/e73f5320-f030-43ae-9efe-002aeb6e0522.txt +1 -0
- package/tests/config_test/media/e98267b9-553f-4cd2-9277-2bee037b7003.txt +1 -0
- package/tests/config_test/media/ea3c4ac0-f63d-4a91-b015-345851856564.txt +1 -0
- package/tests/config_test/media/eacee16f-a2db-4d60-a36b-9b60ea2be330.txt +1 -0
- package/tests/config_test/media/eba1b05a-52aa-4f00-92f6-3d556ca2f366.txt +1 -0
- package/tests/config_test/media/ebf6e54b-0d1e-4d87-b206-34fa81c66dbb.txt +1 -0
- package/tests/config_test/media/ecbf0894-6d76-4141-875d-7691de63a8f7.txt +1 -0
- package/tests/config_test/media/ece7a87a-3490-4ac6-adaf-289b1e427325.txt +1 -0
- package/tests/config_test/media/ed59c963-3449-4431-8440-2cba7defdcae.txt +1 -0
- package/tests/config_test/media/eda09368-348b-4531-a062-a8aafbf9cb8a.txt +1 -0
- package/tests/config_test/media/edd1c2b2-179f-4d44-9ac0-72b4fe16c6f2.txt +1 -0
- package/tests/config_test/media/ee4e9f39-779e-4084-b696-f39abe74f545.txt +1 -0
- package/tests/config_test/media/ef08a195-fcc6-452f-b81e-9d4e97231327.txt +1 -0
- package/tests/config_test/media/ef518fee-57a4-47d3-bbb5-aef9b166ca49.txt +1 -0
- package/tests/config_test/media/efd77ad3-0e00-448f-a01d-4f363ad5c0b1.txt +1 -0
- package/tests/config_test/media/f0c18f54-1095-4787-891b-63c82ba6c153.txt +1 -0
- package/tests/config_test/media/f18dca67-521a-4e7f-8064-e6daa08ea3bc.txt +1 -0
- package/tests/config_test/media/f19a32ab-f345-4bcb-be01-58e62ade0285.txt +1 -0
- package/tests/config_test/media/f29ef9e1-4f84-4bb7-93ce-3693d7cd01f7.txt +1 -0
- package/tests/config_test/media/f2cd3857-386e-4d43-b5ee-cb54d1e7fa3c.txt +1 -0
- package/tests/config_test/media/f3c8b431-4b3a-43b9-a277-233daea240bb.txt +1 -0
- package/tests/config_test/media/f7344305-dde1-4b33-989e-b64b18447e2a.txt +1 -0
- package/tests/config_test/media/f829cdfe-a118-4751-a49f-565a617c2b99.txt +1 -0
- package/tests/config_test/media/f89206aa-0728-4215-a1df-c1f4315079b5.txt +1 -0
- package/tests/config_test/media/f89bb977-c022-471d-9972-d9417484f025.txt +1 -0
- package/tests/config_test/media/f960f026-724a-4630-b3ea-48d7ad60b022.txt +1 -0
- package/tests/config_test/media/fa343cd4-aca6-482b-9395-f221148fd0d8.txt +1 -0
- package/tests/config_test/media/fa802dcc-614e-4027-95fe-ce4f0da61bc9.txt +1 -0
- package/tests/config_test/media/ff1a47f0-9c4b-4c88-b0dc-b28d20a83509.txt +1 -0
- package/tests/config_test/media/ff8aa3b0-5c4d-4d39-be53-4e28e9ee02e7.txt +1 -0
- package/tests/config_test/media/ffb998c5-c98b-4442-b8ef-187bdc7e4c73.txt +1 -0
- package/tests/config_test/media/ffc43791-7d7b-4e13-a2ea-3bb952457e7f.txt +1 -0
- package/tests/config_test/package-lock.json +727 -688
- package/tests/config_test/package.json +2 -2
- package/tests/config_test/tsconfig.json +1 -1
- package/tests/isomorphic_queries.js +38 -0
- package/tests/isomorphic_queries.ts +28 -1
- package/tests/server/DBoGenerated.d.ts +135 -1
- package/tests/server/index.js +51 -27
- package/tests/server/index.ts +49 -26
- package/tests/server/init.sql +22 -7
- package/tests/server/media/35d7e3d7-64d3-4d4b-b564-5e810ca3671f.txt +1 -0
- package/tests/server/media/70ca7114-d6bc-4551-8170-cd7dcdff11dd.txt +1 -0
- package/tests/server/media/9e19f591-edc8-4ad7-ac4f-96c3078cb8ed.txt +1 -0
- package/tests/server/package-lock.json +166 -535
- package/tests/server/package.json +2 -2
- package/tests/config_test2/package-lock.json +0 -1999
package/dist/DboBuilder.js
CHANGED
|
@@ -17,6 +17,17 @@ exports.isPlainObject = exports.DboBuilder = exports.TableHandler = exports.View
|
|
|
17
17
|
const Bluebird = require("bluebird");
|
|
18
18
|
const pgPromise = require("pg-promise");
|
|
19
19
|
const prostgles_types_1 = require("prostgles-types");
|
|
20
|
+
// <TXKey extends string = "tx">
|
|
21
|
+
// & {
|
|
22
|
+
// [K in TXKey]: TX
|
|
23
|
+
// };
|
|
24
|
+
// const d: DbHandler = { } as any;
|
|
25
|
+
// d.
|
|
26
|
+
// export type DbHandlerTX = { [key: string]: TX } | DbHandler;
|
|
27
|
+
// export type DbHandlerTX = DbHandler
|
|
28
|
+
// & Partial<{
|
|
29
|
+
// [key: string]: TX
|
|
30
|
+
// }>
|
|
20
31
|
const utils_1 = require("./utils");
|
|
21
32
|
const QueryBuilder_1 = require("./QueryBuilder");
|
|
22
33
|
const Prostgles_1 = require("./Prostgles");
|
|
@@ -112,6 +123,7 @@ class ViewHandler {
|
|
|
112
123
|
this.tsColumnDefs = [];
|
|
113
124
|
this.is_view = true;
|
|
114
125
|
this.filterDef = "";
|
|
126
|
+
this.is_media = false;
|
|
115
127
|
if (!db || !tableOrViewInfo)
|
|
116
128
|
throw "";
|
|
117
129
|
this.db = db;
|
|
@@ -176,7 +188,10 @@ class ViewHandler {
|
|
|
176
188
|
/* Safely test publish rules */
|
|
177
189
|
if (fields) {
|
|
178
190
|
try {
|
|
179
|
-
this.parseFieldFilter(fields);
|
|
191
|
+
const _fields = this.parseFieldFilter(fields);
|
|
192
|
+
if (this.is_media && rule === "insert" && !_fields.includes("id")) {
|
|
193
|
+
throw "Must allow id insert for media table";
|
|
194
|
+
}
|
|
180
195
|
}
|
|
181
196
|
catch (e) {
|
|
182
197
|
throw ` issue with publish.${this.name}.${rule}.fields: \nVALUE: ` + JSON.stringify(fields, null, 2) + "\nERROR: " + JSON.stringify(e, null, 2);
|
|
@@ -223,7 +238,7 @@ class ViewHandler {
|
|
|
223
238
|
return { query, toOne: false };
|
|
224
239
|
}
|
|
225
240
|
getJoins(source, target, path) {
|
|
226
|
-
let
|
|
241
|
+
let paths = [];
|
|
227
242
|
if (!this.joinPaths)
|
|
228
243
|
throw "Joins dissallowed";
|
|
229
244
|
if (path && !path.length)
|
|
@@ -243,7 +258,7 @@ class ViewHandler {
|
|
|
243
258
|
if (!jp || !this.joinPaths.find(j => path ? j.path.join() === path.join() : j.t1 === source && j.t2 === target))
|
|
244
259
|
throw `Joining ${source} <-...-> ${target} dissallowed or missing`;
|
|
245
260
|
/* Make the join chain info excluding root table */
|
|
246
|
-
|
|
261
|
+
paths = (path || jp.path).slice(1).map((t2, i, arr) => {
|
|
247
262
|
const t1 = i === 0 ? source : arr[i - 1];
|
|
248
263
|
if (!this.joins)
|
|
249
264
|
this.joins = JSON.parse(JSON.stringify(this.dboBuilder.joins));
|
|
@@ -271,20 +286,60 @@ class ViewHandler {
|
|
|
271
286
|
on
|
|
272
287
|
};
|
|
273
288
|
});
|
|
274
|
-
|
|
289
|
+
let expectOne = false;
|
|
290
|
+
paths.map(({ source, target, on }, i) => {
|
|
291
|
+
// if(expectOne && on.length === 1){
|
|
292
|
+
// const sourceCol = on[0][1];
|
|
293
|
+
// const targetCol = on[0][0];
|
|
294
|
+
// const sCol = this.dboBuilder.dbo[source].columns.find(c => c.name === sourceCol)
|
|
295
|
+
// const tCol = this.dboBuilder.dbo[target].columns.find(c => c.name === targetCol)
|
|
296
|
+
// console.log({ sourceCol, targetCol, sCol, source, tCol, target, on})
|
|
297
|
+
// expectOne = sCol.is_pkey && tCol.is_pkey
|
|
298
|
+
// }
|
|
299
|
+
});
|
|
300
|
+
return {
|
|
301
|
+
paths,
|
|
302
|
+
expectOne
|
|
303
|
+
};
|
|
275
304
|
}
|
|
276
305
|
checkFilter(filter) {
|
|
277
306
|
if (filter === null || filter && !isPojoObject(filter))
|
|
278
307
|
throw `invalid filter -> ${JSON.stringify(filter)} \nExpecting: undefined | {} | { field_name: "value" } | { field: { $gt: 22 } } ... `;
|
|
279
308
|
}
|
|
280
309
|
getInfo(param1, param2, param3, tableRules, localParams) {
|
|
310
|
+
var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
281
311
|
return __awaiter(this, void 0, void 0, function* () {
|
|
282
312
|
const p = this.getValidatedRules(tableRules, localParams);
|
|
283
313
|
if (!p.select.getInfo)
|
|
284
314
|
throw "Not allowed";
|
|
315
|
+
let has_media = undefined;
|
|
316
|
+
const mediaTable = (_c = (_b = (_a = this.dboBuilder.prostgles) === null || _a === void 0 ? void 0 : _a.opts) === null || _b === void 0 ? void 0 : _b.fileTable) === null || _c === void 0 ? void 0 : _c.tableName;
|
|
317
|
+
if (!this.is_media && mediaTable) {
|
|
318
|
+
if ((_h = (_g = (_f = (_e = this.dboBuilder.prostgles) === null || _e === void 0 ? void 0 : _e.opts) === null || _f === void 0 ? void 0 : _f.fileTable) === null || _g === void 0 ? void 0 : _g.referencedTables) === null || _h === void 0 ? void 0 : _h[this.name]) {
|
|
319
|
+
has_media = (_m = (_l = (_k = (_j = this.dboBuilder.prostgles) === null || _j === void 0 ? void 0 : _j.opts) === null || _k === void 0 ? void 0 : _k.fileTable) === null || _l === void 0 ? void 0 : _l.referencedTables) === null || _m === void 0 ? void 0 : _m[this.name];
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
const jp = this.dboBuilder.joinPaths.find(jp => jp.t1 === this.name && jp.t2 === mediaTable);
|
|
323
|
+
if (jp && jp.path.length < 4) {
|
|
324
|
+
yield Promise.all(jp.path.map((tableName) => __awaiter(this, void 0, void 0, function* () {
|
|
325
|
+
const cols = (yield this.dboBuilder.dbo[tableName].getColumns()).filter(c => { var _a; return jp.path.includes((_a = c.references) === null || _a === void 0 ? void 0 : _a.ftable); });
|
|
326
|
+
if (cols.length && has_media !== "many") {
|
|
327
|
+
if (cols.find(c => !c.is_pkey)) {
|
|
328
|
+
has_media = "many";
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
has_media = "one";
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
})));
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
285
338
|
return {
|
|
286
339
|
oid: this.tableOrViewInfo.oid,
|
|
287
340
|
comment: this.tableOrViewInfo.comment,
|
|
341
|
+
is_media: this.is_media,
|
|
342
|
+
has_media,
|
|
288
343
|
};
|
|
289
344
|
});
|
|
290
345
|
}
|
|
@@ -298,10 +353,10 @@ class ViewHandler {
|
|
|
298
353
|
// console.log("getColumns", this.name, this.columns.map(c => c.name))
|
|
299
354
|
let _lang = lang;
|
|
300
355
|
return this.columns.map(c => {
|
|
301
|
-
var _a, _b, _c,
|
|
356
|
+
var _a, _b, _c, _e, _f, _g, _h, _j;
|
|
302
357
|
let label = c.comment || c.name;
|
|
303
|
-
const iConf = (
|
|
304
|
-
const fallbackLang = (
|
|
358
|
+
const iConf = (_f = (_e = (_c = (_b = (_a = this.dboBuilder.prostgles) === null || _a === void 0 ? void 0 : _a.opts) === null || _b === void 0 ? void 0 : _b.i18n) === null || _c === void 0 ? void 0 : _c.column_labels) === null || _e === void 0 ? void 0 : _e[this.name]) === null || _f === void 0 ? void 0 : _f[c.name];
|
|
359
|
+
const fallbackLang = (_j = (_h = (_g = this.dboBuilder.prostgles) === null || _g === void 0 ? void 0 : _g.opts) === null || _h === void 0 ? void 0 : _h.i18n) === null || _j === void 0 ? void 0 : _j.fallbackLang;
|
|
305
360
|
_lang = _lang || fallbackLang;
|
|
306
361
|
if ((lang || fallbackLang) && iConf) {
|
|
307
362
|
let langLabel;
|
|
@@ -447,9 +502,10 @@ class ViewHandler {
|
|
|
447
502
|
return __awaiter(this, void 0, void 0, function* () {
|
|
448
503
|
try {
|
|
449
504
|
filter = filter || {};
|
|
505
|
+
const allowedReturnTypes = ["row", "value", "values"];
|
|
450
506
|
const { returnType } = selectParams || {};
|
|
451
|
-
if (returnType && !
|
|
452
|
-
throw `returnType (${returnType}) can only be ${
|
|
507
|
+
if (returnType && !allowedReturnTypes.includes(returnType)) {
|
|
508
|
+
throw `returnType (${returnType}) can only be ${allowedReturnTypes.join(" OR ")}`;
|
|
453
509
|
}
|
|
454
510
|
const { testRule = false, returnQuery = false } = localParams || {};
|
|
455
511
|
if (testRule)
|
|
@@ -477,7 +533,6 @@ class ViewHandler {
|
|
|
477
533
|
throw ` invalid publish.${this.name}.select.maxLimit -> expecting integer but got ` + maxLimit;
|
|
478
534
|
}
|
|
479
535
|
let q = yield QueryBuilder_1.getNewQuery(this, filter, selectParams, param3_unused, tableRules, localParams), _query = QueryBuilder_1.makeQuery(this, q, undefined, undefined, selectParams);
|
|
480
|
-
// console.log(_query)
|
|
481
536
|
if (testRule) {
|
|
482
537
|
try {
|
|
483
538
|
yield this.db.any("EXPLAIN " + _query);
|
|
@@ -488,7 +543,6 @@ class ViewHandler {
|
|
|
488
543
|
throw `INTERNAL ERROR: Publish config is not valid for publish.${this.name}.select `;
|
|
489
544
|
}
|
|
490
545
|
}
|
|
491
|
-
// console.log(_query);
|
|
492
546
|
if (returnQuery)
|
|
493
547
|
return _query;
|
|
494
548
|
if (["row", "value"].includes(returnType)) {
|
|
@@ -667,24 +721,26 @@ class ViewHandler {
|
|
|
667
721
|
}
|
|
668
722
|
const makeTableChain = (finalFilter) => {
|
|
669
723
|
let joinPaths = [];
|
|
724
|
+
let expectOne = true;
|
|
670
725
|
tables.map((t2, depth) => {
|
|
671
726
|
let t1 = depth ? tables[depth - 1] : thisTable;
|
|
672
727
|
let exactPaths = [t1, t2];
|
|
673
728
|
if (!depth && eConfig.shortestJoin)
|
|
674
729
|
exactPaths = undefined;
|
|
675
|
-
|
|
730
|
+
const jinf = this.getJoins(t1, t2, exactPaths);
|
|
731
|
+
expectOne = expectOne && jinf.expectOne;
|
|
732
|
+
joinPaths = joinPaths.concat(jinf.paths);
|
|
676
733
|
});
|
|
677
|
-
let r = makeJoin(joinPaths, 0);
|
|
678
|
-
// console.log(r);
|
|
734
|
+
let r = makeJoin({ paths: joinPaths, expectOne }, 0);
|
|
679
735
|
return r;
|
|
680
|
-
function makeJoin(
|
|
736
|
+
function makeJoin(joinInfo, ji) {
|
|
737
|
+
const { paths } = joinInfo;
|
|
681
738
|
const jp = paths[ji];
|
|
682
739
|
let prevTable = ji ? paths[ji - 1].table : jp.source;
|
|
683
740
|
let table = paths[ji].table;
|
|
684
741
|
let tableAlias = prostgles_types_1.asName(ji < paths.length - 1 ? `jd${ji}` : table);
|
|
685
742
|
let prevTableAlias = prostgles_types_1.asName(ji ? `jd${ji - 1}` : thisTable);
|
|
686
743
|
let cond = `${jp.on.map(([c1, c2]) => `${prevTableAlias}.${prostgles_types_1.asName(c1)} = ${tableAlias}.${prostgles_types_1.asName(c2)}`).join("\n AND ")}`;
|
|
687
|
-
// console.log(join, cond);
|
|
688
744
|
let j = `SELECT 1 \n` +
|
|
689
745
|
`FROM ${prostgles_types_1.asName(table)} ${tableAlias} \n` +
|
|
690
746
|
`WHERE ${cond} \n`; //
|
|
@@ -694,7 +750,7 @@ class ViewHandler {
|
|
|
694
750
|
}
|
|
695
751
|
const indent = (a, b) => a;
|
|
696
752
|
if (ji < paths.length - 1) {
|
|
697
|
-
j += `AND ${makeJoin(
|
|
753
|
+
j += `AND ${makeJoin(joinInfo, ji + 1)} \n`;
|
|
698
754
|
}
|
|
699
755
|
j = indent(j, ji + 1);
|
|
700
756
|
let res = `EXISTS ( \n` +
|
|
@@ -705,9 +761,9 @@ class ViewHandler {
|
|
|
705
761
|
};
|
|
706
762
|
let t2Rules = undefined, forcedFilter, filterFields, tableAlias;
|
|
707
763
|
/* Check if allowed to view data */
|
|
708
|
-
if (localParams && localParams.socket && this.dboBuilder.publishParser) {
|
|
764
|
+
if (localParams && (localParams.socket || localParams.httpReq) && this.dboBuilder.publishParser) {
|
|
709
765
|
/* Need to think about joining through dissallowed tables */
|
|
710
|
-
t2Rules = yield this.dboBuilder.publishParser.getValidatedRequestRuleWusr({ tableName: t2, command: "find",
|
|
766
|
+
t2Rules = yield this.dboBuilder.publishParser.getValidatedRequestRuleWusr({ tableName: t2, command: "find", localParams });
|
|
711
767
|
if (!t2Rules || !t2Rules.select)
|
|
712
768
|
throw "Dissallowed";
|
|
713
769
|
({ forcedFilter, filterFields } = t2Rules.select);
|
|
@@ -721,14 +777,13 @@ class ViewHandler {
|
|
|
721
777
|
addKeywords: false,
|
|
722
778
|
tableAlias,
|
|
723
779
|
localParams,
|
|
724
|
-
tableRule: tableRules
|
|
780
|
+
tableRule: t2Rules //tableRules
|
|
725
781
|
}));
|
|
726
782
|
}
|
|
727
783
|
catch (err) {
|
|
728
784
|
// console.trace(err)
|
|
729
785
|
throw "Issue with preparing $exists query for table " + t2 + "\n->" + JSON.stringify(err);
|
|
730
786
|
}
|
|
731
|
-
// console.log(f2, finalWhere);
|
|
732
787
|
if (!isJoined) {
|
|
733
788
|
res = ` EXISTS (SELECT 1 \nFROM ${prostgles_types_1.asName(t2)} \n${finalWhere ? `WHERE ${finalWhere}` : ""}) `;
|
|
734
789
|
}
|
|
@@ -823,7 +878,6 @@ class ViewHandler {
|
|
|
823
878
|
return false;
|
|
824
879
|
});
|
|
825
880
|
}
|
|
826
|
-
// console.log(allowedSelect);
|
|
827
881
|
/* Add remaining allowed fields */
|
|
828
882
|
allowedSelect = allowedSelect.concat(p.allColumns.filter(c => allowed_colnames.includes(c.name) &&
|
|
829
883
|
!allowedSelect.find(s => s.alias === c.name)).map(f => ({
|
|
@@ -858,14 +912,12 @@ class ViewHandler {
|
|
|
858
912
|
pgp: exports.pgp,
|
|
859
913
|
select: allowedSelect
|
|
860
914
|
});
|
|
861
|
-
// console.log({ f, q })
|
|
862
915
|
let templates = [q].filter(q => q);
|
|
863
916
|
if (existsCond)
|
|
864
917
|
templates.push(existsCond);
|
|
865
918
|
templates = templates.concat(computedColConditions);
|
|
866
919
|
return templates.sort() /* sorted to ensure duplicate subscription channels are not created due to different condition order */
|
|
867
920
|
.join(" AND \n");
|
|
868
|
-
// console.log(templates)
|
|
869
921
|
// return templates; //pgp.as.format(template, data);
|
|
870
922
|
/*
|
|
871
923
|
SHOULD CHECK DATA TYPES TO AVOID "No operator matches the given data type" error
|
|
@@ -954,7 +1006,6 @@ class ViewHandler {
|
|
|
954
1006
|
if (!_ob || !_ob.length)
|
|
955
1007
|
return "";
|
|
956
1008
|
const validatedAggAliases = select.filter(s => s.type !== "joinedColumn").map(s => s.alias);
|
|
957
|
-
// console.log({ validatedAggAliases })
|
|
958
1009
|
let bad_param = _ob.find(({ key }) => !(validatedAggAliases || []).includes(key) &&
|
|
959
1010
|
(!column_names.includes(key) ||
|
|
960
1011
|
(allowedFields.length && !allowedFields.includes(key))));
|
|
@@ -1155,8 +1206,8 @@ function isPojoObject(obj) {
|
|
|
1155
1206
|
class TableHandler extends ViewHandler {
|
|
1156
1207
|
constructor(db, tableOrViewInfo, pubSubManager, dboBuilder, t, joinPaths) {
|
|
1157
1208
|
super(db, tableOrViewInfo, pubSubManager, dboBuilder, t, joinPaths);
|
|
1158
|
-
this.prepareReturning = (returning, allowedFields
|
|
1159
|
-
let result =
|
|
1209
|
+
this.prepareReturning = (returning, allowedFields) => __awaiter(this, void 0, void 0, function* () {
|
|
1210
|
+
let result = [];
|
|
1160
1211
|
if (returning) {
|
|
1161
1212
|
let sBuilder = new QueryBuilder_1.SelectItemBuilder({
|
|
1162
1213
|
allFields: this.column_names.slice(0),
|
|
@@ -1166,9 +1217,7 @@ class TableHandler extends ViewHandler {
|
|
|
1166
1217
|
isView: this.is_view
|
|
1167
1218
|
});
|
|
1168
1219
|
yield sBuilder.parseUserSelect(returning);
|
|
1169
|
-
|
|
1170
|
-
result = "RETURNING ";
|
|
1171
|
-
result += sBuilder.select.map(s => s.getQuery() + " AS " + QueryBuilder_1.asNameAlias(s.alias, tableAlias)).join(", ");
|
|
1220
|
+
return sBuilder.select;
|
|
1172
1221
|
}
|
|
1173
1222
|
return result;
|
|
1174
1223
|
});
|
|
@@ -1180,6 +1229,7 @@ class TableHandler extends ViewHandler {
|
|
|
1180
1229
|
batching: null
|
|
1181
1230
|
};
|
|
1182
1231
|
this.is_view = false;
|
|
1232
|
+
this.is_media = dboBuilder.prostgles.isMedia(this.name);
|
|
1183
1233
|
}
|
|
1184
1234
|
/* TO DO: Maybe finished query batching */
|
|
1185
1235
|
willBatch(query) {
|
|
@@ -1269,7 +1319,6 @@ class TableHandler extends ViewHandler {
|
|
|
1269
1319
|
const queries = yield Promise.all(data.map(([filter, data]) => __awaiter(this, void 0, void 0, function* () {
|
|
1270
1320
|
return yield this.update(filter, data, Object.assign(Object.assign({}, (params || {})), { returning: undefined }), tableRules, Object.assign(Object.assign({}, (localParams || {})), { returnQuery: true }));
|
|
1271
1321
|
})));
|
|
1272
|
-
// console.log(queries)
|
|
1273
1322
|
return this.db.tx(t => {
|
|
1274
1323
|
const _queries = queries.map(q => t.none(q));
|
|
1275
1324
|
return t.batch(_queries);
|
|
@@ -1341,13 +1390,11 @@ class TableHandler extends ViewHandler {
|
|
|
1341
1390
|
throw "Unrecognised params in textPatch field: " + unrecProps.join(", ");
|
|
1342
1391
|
patchedTextData.push(Object.assign(Object.assign({}, d), { fieldName: c.name }));
|
|
1343
1392
|
}
|
|
1344
|
-
// console.log("update2", patchedTextData);
|
|
1345
1393
|
});
|
|
1346
1394
|
if (patchedTextData && patchedTextData.length) {
|
|
1347
1395
|
if (tableRules && !tableRules.select)
|
|
1348
1396
|
throw "Select needs to be permitted to patch data";
|
|
1349
1397
|
const rows = yield this.find(filter, { select: patchedTextData.reduce((a, v) => (Object.assign(Object.assign({}, a), { [v.fieldName]: 1 })), {}) }, null, tableRules);
|
|
1350
|
-
// console.log(rows)
|
|
1351
1398
|
if (rows.length !== 1) {
|
|
1352
1399
|
throw "Cannot patch data within a filter that affects more/less than 1 row";
|
|
1353
1400
|
}
|
|
@@ -1374,9 +1421,8 @@ class TableHandler extends ViewHandler {
|
|
|
1374
1421
|
let qType = "none";
|
|
1375
1422
|
if (returning) {
|
|
1376
1423
|
qType = multi ? "any" : "one";
|
|
1377
|
-
query += yield this.prepareReturning(returning, this.parseFieldFilter(returningFields));
|
|
1424
|
+
query += this.makeReturnQuery(yield this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
|
|
1378
1425
|
}
|
|
1379
|
-
// console.log(query)
|
|
1380
1426
|
if (returnQuery)
|
|
1381
1427
|
return query;
|
|
1382
1428
|
if (this.t) {
|
|
@@ -1406,29 +1452,221 @@ class TableHandler extends ViewHandler {
|
|
|
1406
1452
|
// let cs = new pgp.helpers.ColumnSet(this.columnSet.columns.filter(c => dataKeys.includes(c.name)), { table: this.name });
|
|
1407
1453
|
return { data, allowedCols: this.columns.filter(c => dataKeys.includes(c.name)).map(c => c.name) };
|
|
1408
1454
|
}
|
|
1409
|
-
|
|
1455
|
+
insertDataParse(data, param2, param3_unused, tableRules, _localParams = null) {
|
|
1456
|
+
var _a, _b;
|
|
1457
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1458
|
+
const localParams = _localParams || {};
|
|
1459
|
+
const { dbTX } = localParams;
|
|
1460
|
+
const isMultiInsert = Array.isArray(data);
|
|
1461
|
+
const getExtraKeys = d => Object.keys(d).filter(k => !this.columns.find(c => c.name === k));
|
|
1462
|
+
/* Nested insert is not allowed for the file table */
|
|
1463
|
+
const isNestedInsert = this.is_media ? false : (Array.isArray(data) ? data : [data]).some(d => getExtraKeys(d).length);
|
|
1464
|
+
/**
|
|
1465
|
+
* Make sure nested insert uses a transaction
|
|
1466
|
+
*/
|
|
1467
|
+
if (isNestedInsert && (!this.t || !dbTX)) {
|
|
1468
|
+
return {
|
|
1469
|
+
insertResult: yield this.dboBuilder.getTX((dbTX) => dbTX[this.name].insert(data, param2, param3_unused, tableRules, Object.assign({ dbTX }, localParams)))
|
|
1470
|
+
};
|
|
1471
|
+
}
|
|
1472
|
+
const preValidate = (_a = tableRules === null || tableRules === void 0 ? void 0 : tableRules.insert) === null || _a === void 0 ? void 0 : _a.preValidate, validate = (_b = tableRules === null || tableRules === void 0 ? void 0 : tableRules.insert) === null || _b === void 0 ? void 0 : _b.validate;
|
|
1473
|
+
let _data = yield Promise.all((Array.isArray(data) ? data : [data]).map((row) => __awaiter(this, void 0, void 0, function* () {
|
|
1474
|
+
var _c, _e;
|
|
1475
|
+
if (preValidate) {
|
|
1476
|
+
row = yield preValidate(row);
|
|
1477
|
+
}
|
|
1478
|
+
const dataKeys = Object.keys(row);
|
|
1479
|
+
const extraKeys = getExtraKeys(row);
|
|
1480
|
+
/* Upload file then continue insert */
|
|
1481
|
+
if (this.is_media) {
|
|
1482
|
+
if (!((_c = this.dboBuilder.prostgles) === null || _c === void 0 ? void 0 : _c.fileManager))
|
|
1483
|
+
throw "fileManager not set up";
|
|
1484
|
+
const { data, name } = row;
|
|
1485
|
+
if (dataKeys.length !== 2)
|
|
1486
|
+
throw "Expecting only two properties: { name: string; data: File }";
|
|
1487
|
+
// if(!Buffer.isBuffer(data)) throw "data is not of type Buffer"
|
|
1488
|
+
if (!data)
|
|
1489
|
+
throw "data not provided";
|
|
1490
|
+
if (typeof name !== "string") {
|
|
1491
|
+
throw "name is not of type string";
|
|
1492
|
+
}
|
|
1493
|
+
const media_id = (yield this.db.oneOrNone("SELECT gen_random_uuid() as name")).name;
|
|
1494
|
+
const type = yield this.dboBuilder.prostgles.fileManager.getMIME(data, name);
|
|
1495
|
+
const media_name = `${media_id}.${type.ext}`;
|
|
1496
|
+
let media = {
|
|
1497
|
+
id: media_id,
|
|
1498
|
+
name: media_name,
|
|
1499
|
+
original_name: name,
|
|
1500
|
+
extension: type.ext,
|
|
1501
|
+
content_type: type.mime
|
|
1502
|
+
};
|
|
1503
|
+
if (validate) {
|
|
1504
|
+
media = yield validate(media);
|
|
1505
|
+
}
|
|
1506
|
+
const _media = yield this.dboBuilder.prostgles.fileManager.uploadAsMedia({
|
|
1507
|
+
item: {
|
|
1508
|
+
data,
|
|
1509
|
+
name: media.name,
|
|
1510
|
+
content_type: media.content_type
|
|
1511
|
+
},
|
|
1512
|
+
});
|
|
1513
|
+
return Object.assign(Object.assign({}, media), _media);
|
|
1514
|
+
/* Potentially a nested join */
|
|
1515
|
+
}
|
|
1516
|
+
else if (extraKeys.length) {
|
|
1517
|
+
/* Ensure we're using the same transaction */
|
|
1518
|
+
const _this = this.t ? this : dbTX[this.name];
|
|
1519
|
+
let rootData = PubSubManager_1.filterObj(data, null, extraKeys);
|
|
1520
|
+
let insertedChildren;
|
|
1521
|
+
let targetTableRules;
|
|
1522
|
+
if (validate) {
|
|
1523
|
+
rootData = yield validate(rootData);
|
|
1524
|
+
}
|
|
1525
|
+
const fullRootResult = yield _this.insert(rootData, { returning: "*" }, null, tableRules, localParams);
|
|
1526
|
+
let returnData;
|
|
1527
|
+
const returning = param2 === null || param2 === void 0 ? void 0 : param2.returning;
|
|
1528
|
+
if (returning) {
|
|
1529
|
+
returnData = {};
|
|
1530
|
+
const returningItems = yield this.prepareReturning(returning, this.parseFieldFilter((_e = tableRules === null || tableRules === void 0 ? void 0 : tableRules.insert) === null || _e === void 0 ? void 0 : _e.returningFields));
|
|
1531
|
+
returningItems.filter(s => s.selected).map(rs => {
|
|
1532
|
+
returnData[rs.alias] = fullRootResult[rs.alias];
|
|
1533
|
+
});
|
|
1534
|
+
}
|
|
1535
|
+
yield Promise.all(extraKeys.map((targetTable) => __awaiter(this, void 0, void 0, function* () {
|
|
1536
|
+
var _f;
|
|
1537
|
+
const childDataItems = Array.isArray(row[targetTable]) ? row[targetTable] : [row[targetTable]];
|
|
1538
|
+
// console.log({childDataItems})
|
|
1539
|
+
/* Must be allowed to insert into media table */
|
|
1540
|
+
const canInsert = (tbl) => __awaiter(this, void 0, void 0, function* () {
|
|
1541
|
+
const childRules = yield this.dboBuilder.publishParser.getValidatedRequestRuleWusr({ tableName: tbl, command: "insert", localParams });
|
|
1542
|
+
if (!childRules || !childRules.insert)
|
|
1543
|
+
throw "Dissallowed nested insert into table " + childRules;
|
|
1544
|
+
return childRules;
|
|
1545
|
+
});
|
|
1546
|
+
// console.log(JSON.stringify(this.dboBuilder.joinPaths, null, 2))
|
|
1547
|
+
const jp = this.dboBuilder.joinPaths.find(jp => jp.t1 === this.name && jp.t2 === targetTable);
|
|
1548
|
+
if (!jp)
|
|
1549
|
+
throw `Could not find a valid table for the nested data { ${targetTable} } `;
|
|
1550
|
+
const childInsert = (cdata, tableName) => __awaiter(this, void 0, void 0, function* () {
|
|
1551
|
+
// console.log("childInsert", {data, tableName})
|
|
1552
|
+
if (!cdata || !dbTX[tableName] || !("insert" in dbTX[tableName]))
|
|
1553
|
+
throw "childInsertErr: Child table handler missing for: " + tableName;
|
|
1554
|
+
const tableRules = yield canInsert(tableName);
|
|
1555
|
+
return Promise.all((Array.isArray(cdata) ? cdata : [cdata])
|
|
1556
|
+
.map(m => dbTX[tableName]
|
|
1557
|
+
.insert(m, { returning: "*" }, null, tableRules, localParams)
|
|
1558
|
+
.catch(e => {
|
|
1559
|
+
console.trace({ childInsertErr: e });
|
|
1560
|
+
return Promise.reject({ childInsertErr: e });
|
|
1561
|
+
})));
|
|
1562
|
+
});
|
|
1563
|
+
const { path } = jp;
|
|
1564
|
+
const [tbl1, tbl2, tbl3] = path;
|
|
1565
|
+
targetTableRules = yield canInsert(targetTable); // tbl3
|
|
1566
|
+
const cols2 = this.dboBuilder.dbo[tbl2].columns || [];
|
|
1567
|
+
if (!this.dboBuilder.dbo[tbl2])
|
|
1568
|
+
throw "Invalid/disallowed table: " + tbl2;
|
|
1569
|
+
const colsRefT1 = cols2 === null || cols2 === void 0 ? void 0 : cols2.filter(c => { var _a, _b; return ((_a = c.references) === null || _a === void 0 ? void 0 : _a.cols.length) === 1 && ((_b = c.references) === null || _b === void 0 ? void 0 : _b.ftable) === tbl1; });
|
|
1570
|
+
if (!path.length) {
|
|
1571
|
+
throw "Nested inserts join path not found for " + [this.name, targetTable];
|
|
1572
|
+
}
|
|
1573
|
+
else if (path.length === 2) {
|
|
1574
|
+
if (targetTable !== tbl2)
|
|
1575
|
+
throw "Did not expect this";
|
|
1576
|
+
if (!colsRefT1.length)
|
|
1577
|
+
throw `Target table ${tbl2} does not reference any columns from the root table ${this.name}. Cannot do nested insert`;
|
|
1578
|
+
// console.log(JSON.stringify(colsRefT1, null, 2))
|
|
1579
|
+
insertedChildren = yield childInsert(childDataItems.map(d => {
|
|
1580
|
+
let result = Object.assign({}, d);
|
|
1581
|
+
colsRefT1.map(col => {
|
|
1582
|
+
result[col.references.cols[0]] = fullRootResult[col.references.fcols[0]];
|
|
1583
|
+
});
|
|
1584
|
+
return result;
|
|
1585
|
+
}), targetTable);
|
|
1586
|
+
}
|
|
1587
|
+
else if (path.length === 3) {
|
|
1588
|
+
if (targetTable !== tbl3)
|
|
1589
|
+
throw "Did not expect this";
|
|
1590
|
+
const colsRefT3 = cols2 === null || cols2 === void 0 ? void 0 : cols2.filter(c => { var _a, _b; return ((_a = c.references) === null || _a === void 0 ? void 0 : _a.cols.length) === 1 && ((_b = c.references) === null || _b === void 0 ? void 0 : _b.ftable) === tbl3; });
|
|
1591
|
+
if (!colsRefT1.length || !colsRefT3.length)
|
|
1592
|
+
throw "Incorrectly referenced or missing columns for nested insert";
|
|
1593
|
+
if (targetTable !== this.dboBuilder.prostgles.fileManager.tableName) {
|
|
1594
|
+
throw "Only media allowed to have nested inserts more than 2 tables apart";
|
|
1595
|
+
}
|
|
1596
|
+
/* We expect tbl2 to have only 2 columns (media_id and foreign_id) */
|
|
1597
|
+
if (!cols2 || cols2.find(c => !["media_id", "foreign_id"].includes(c.name))) {
|
|
1598
|
+
throw "Second joining table not of expected format";
|
|
1599
|
+
}
|
|
1600
|
+
insertedChildren = yield childInsert(childDataItems, targetTable);
|
|
1601
|
+
/* Insert in key_lookup table */
|
|
1602
|
+
yield Promise.all(insertedChildren.map((t3Child) => __awaiter(this, void 0, void 0, function* () {
|
|
1603
|
+
let tbl2Row = {};
|
|
1604
|
+
colsRefT3.map(col => {
|
|
1605
|
+
tbl2Row[col.name] = t3Child[col.references.fcols[0]];
|
|
1606
|
+
});
|
|
1607
|
+
colsRefT1.map(col => {
|
|
1608
|
+
tbl2Row[col.name] = fullRootResult[col.references.fcols[0]];
|
|
1609
|
+
});
|
|
1610
|
+
// console.log({ rootResult, tbl2Row, t3Child, colsRefT3, colsRefT1, t: this.t?.ctx?.start });
|
|
1611
|
+
yield childInsert(tbl2Row, tbl2); //.then(() => {});
|
|
1612
|
+
})));
|
|
1613
|
+
}
|
|
1614
|
+
else
|
|
1615
|
+
throw "Unexpected path for Nested inserts";
|
|
1616
|
+
/* Return also the nested inserted data */
|
|
1617
|
+
if (targetTableRules && (insertedChildren === null || insertedChildren === void 0 ? void 0 : insertedChildren.length) && returning) {
|
|
1618
|
+
const targetTableHandler = dbTX[targetTable];
|
|
1619
|
+
const targetReturning = yield targetTableHandler.prepareReturning("*", targetTableHandler.parseFieldFilter((_f = targetTableRules === null || targetTableRules === void 0 ? void 0 : targetTableRules.insert) === null || _f === void 0 ? void 0 : _f.returningFields));
|
|
1620
|
+
let clientTargetInserts = insertedChildren.map(d => {
|
|
1621
|
+
let _d = Object.assign({}, d);
|
|
1622
|
+
let res = {};
|
|
1623
|
+
targetReturning.map(r => {
|
|
1624
|
+
res[r.alias] = _d[r.alias];
|
|
1625
|
+
});
|
|
1626
|
+
return res;
|
|
1627
|
+
});
|
|
1628
|
+
returnData[targetTable] = clientTargetInserts.length === 1 ? clientTargetInserts[0] : clientTargetInserts;
|
|
1629
|
+
}
|
|
1630
|
+
})));
|
|
1631
|
+
return returnData;
|
|
1632
|
+
}
|
|
1633
|
+
return row;
|
|
1634
|
+
})));
|
|
1635
|
+
const result = isMultiInsert ? _data : _data[0];
|
|
1636
|
+
let res = isNestedInsert ?
|
|
1637
|
+
{ insertResult: result } :
|
|
1638
|
+
{ data: result };
|
|
1639
|
+
return res;
|
|
1640
|
+
});
|
|
1641
|
+
}
|
|
1642
|
+
insert(rowOrRows, param2, param3_unused, tableRules, _localParams = null) {
|
|
1643
|
+
var _a;
|
|
1410
1644
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1645
|
+
const localParams = _localParams || {};
|
|
1646
|
+
const { dbTX } = localParams;
|
|
1411
1647
|
try {
|
|
1412
1648
|
const { returning, onConflictDoNothing, fixIssues = false } = param2 || {};
|
|
1413
1649
|
const { testRule = false, returnQuery = false } = localParams || {};
|
|
1414
|
-
let returningFields, forcedData,
|
|
1650
|
+
let returningFields, forcedData,
|
|
1651
|
+
// validate: TableRule["insert"]["validate"],
|
|
1652
|
+
// preValidate: any,
|
|
1653
|
+
fields;
|
|
1415
1654
|
if (tableRules) {
|
|
1416
1655
|
if (!tableRules.insert)
|
|
1417
1656
|
throw "insert rules missing for " + this.name;
|
|
1418
1657
|
returningFields = tableRules.insert.returningFields;
|
|
1419
1658
|
forcedData = tableRules.insert.forcedData;
|
|
1420
1659
|
fields = tableRules.insert.fields;
|
|
1421
|
-
validate = tableRules.insert.validate;
|
|
1422
|
-
preValidate = tableRules.insert.preValidate;
|
|
1660
|
+
// validate = tableRules.insert.validate;
|
|
1661
|
+
// preValidate = tableRules.insert.preValidate;
|
|
1423
1662
|
/* If no returning fields specified then take select fields as returning */
|
|
1424
1663
|
if (!returningFields)
|
|
1425
|
-
returningFields = utils_1.get(tableRules, "select.fields");
|
|
1426
|
-
if (!returningFields)
|
|
1427
|
-
returningFields = utils_1.get(tableRules, "insert.fields");
|
|
1664
|
+
returningFields = utils_1.get(tableRules, "select.fields") || utils_1.get(tableRules, "insert.fields");
|
|
1428
1665
|
if (!fields)
|
|
1429
1666
|
throw ` invalid insert rule for ${this.name} -> fields missing `;
|
|
1430
1667
|
/* Safely test publish rules */
|
|
1431
1668
|
if (testRule) {
|
|
1669
|
+
// if(this.is_media && tableRules.insert.preValidate) throw "Media table cannot have a preValidate. It already is used internally by prostgles for file upload";
|
|
1432
1670
|
yield this.validateViewRules(fields, null, returningFields, null, "insert");
|
|
1433
1671
|
if (forcedData) {
|
|
1434
1672
|
const keys = Object.keys(forcedData);
|
|
@@ -1449,21 +1687,23 @@ class TableHandler extends ViewHandler {
|
|
|
1449
1687
|
if (typeof onConflictDoNothing === "boolean" && onConflictDoNothing) {
|
|
1450
1688
|
conflict_query = " ON CONFLICT DO NOTHING ";
|
|
1451
1689
|
}
|
|
1452
|
-
if (
|
|
1453
|
-
|
|
1454
|
-
|
|
1690
|
+
if (param2) {
|
|
1691
|
+
const good_params = ["returning", "multi", "onConflictDoNothing", "fixIssues"];
|
|
1692
|
+
const bad_params = Object.keys(param2).filter(k => !good_params.includes(k));
|
|
1693
|
+
if (bad_params && bad_params.length)
|
|
1694
|
+
throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
|
|
1695
|
+
}
|
|
1696
|
+
if (!rowOrRows)
|
|
1697
|
+
rowOrRows = {}; //throw "Provide data in param1";
|
|
1698
|
+
let returningSelect = this.makeReturnQuery(yield this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
|
|
1455
1699
|
const makeQuery = (_row, isOne = false) => __awaiter(this, void 0, void 0, function* () {
|
|
1456
1700
|
let row = Object.assign({}, _row);
|
|
1457
|
-
if (
|
|
1458
|
-
|
|
1459
|
-
}
|
|
1460
|
-
if (!isPojoObject(row))
|
|
1701
|
+
if (!isPojoObject(row)) {
|
|
1702
|
+
console.trace(row);
|
|
1461
1703
|
throw "\ninvalid insert data provided -> " + JSON.stringify(row);
|
|
1704
|
+
}
|
|
1462
1705
|
const { data, allowedCols } = this.validateNewData({ row, forcedData, allowedFields: fields, tableRules, fixIssues });
|
|
1463
1706
|
let _data = Object.assign({}, data);
|
|
1464
|
-
if (validate) {
|
|
1465
|
-
_data = yield validate(_data);
|
|
1466
|
-
}
|
|
1467
1707
|
let insertQ = "";
|
|
1468
1708
|
if (!Object.keys(_data).length)
|
|
1469
1709
|
insertQ = `INSERT INTO ${prostgles_types_1.asName(this.name)} DEFAULT VALUES `;
|
|
@@ -1471,21 +1711,21 @@ class TableHandler extends ViewHandler {
|
|
|
1471
1711
|
insertQ = this.colSet.getInsertQuery(_data, allowedCols); // pgp.helpers.insert(_data, columnSet);
|
|
1472
1712
|
return insertQ + conflict_query + returningSelect;
|
|
1473
1713
|
});
|
|
1474
|
-
if (param2) {
|
|
1475
|
-
const good_params = ["returning", "multi", "onConflictDoNothing", "fixIssues"];
|
|
1476
|
-
const bad_params = Object.keys(param2).filter(k => !good_params.includes(k));
|
|
1477
|
-
if (bad_params && bad_params.length)
|
|
1478
|
-
throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
|
|
1479
|
-
}
|
|
1480
1714
|
let query = "";
|
|
1481
1715
|
let queryType = "none";
|
|
1716
|
+
/**
|
|
1717
|
+
* If media it will: upload file and continue insert
|
|
1718
|
+
* If nested insert it will: make separate inserts and not continue main insert
|
|
1719
|
+
*/
|
|
1720
|
+
const { data, insertResult } = yield this.insertDataParse(rowOrRows, param2, param3_unused, tableRules, localParams);
|
|
1721
|
+
if (insertResult)
|
|
1722
|
+
return insertResult;
|
|
1482
1723
|
if (Array.isArray(data)) {
|
|
1483
1724
|
// if(returning) throw "Sorry but [returning] is dissalowed for multi insert";
|
|
1484
1725
|
let queries = yield Promise.all(data.map((p) => __awaiter(this, void 0, void 0, function* () {
|
|
1485
1726
|
const q = yield makeQuery(p);
|
|
1486
1727
|
return q;
|
|
1487
1728
|
})));
|
|
1488
|
-
// console.log(queries)
|
|
1489
1729
|
query = exports.pgp.helpers.concat(queries);
|
|
1490
1730
|
if (returning)
|
|
1491
1731
|
queryType = "many";
|
|
@@ -1495,12 +1735,18 @@ class TableHandler extends ViewHandler {
|
|
|
1495
1735
|
if (returning)
|
|
1496
1736
|
queryType = "one";
|
|
1497
1737
|
}
|
|
1498
|
-
// console.log(query);
|
|
1499
1738
|
if (returnQuery)
|
|
1500
1739
|
return query;
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1740
|
+
let result;
|
|
1741
|
+
// console.log(this.t?.ctx?.start, "insert in " + this.name, data);
|
|
1742
|
+
const tx = ((_a = dbTX === null || dbTX === void 0 ? void 0 : dbTX[this.name]) === null || _a === void 0 ? void 0 : _a.t) || this.t;
|
|
1743
|
+
if (tx) {
|
|
1744
|
+
result = tx[queryType](query).catch(err => makeErr(err, localParams));
|
|
1745
|
+
}
|
|
1746
|
+
else {
|
|
1747
|
+
result = this.db.tx(t => t[queryType](query)).catch(err => makeErr(err, localParams));
|
|
1748
|
+
}
|
|
1749
|
+
return result;
|
|
1504
1750
|
}
|
|
1505
1751
|
catch (e) {
|
|
1506
1752
|
if (localParams && localParams.testRule)
|
|
@@ -1510,6 +1756,11 @@ class TableHandler extends ViewHandler {
|
|
|
1510
1756
|
});
|
|
1511
1757
|
}
|
|
1512
1758
|
;
|
|
1759
|
+
makeReturnQuery(items) {
|
|
1760
|
+
if (items === null || items === void 0 ? void 0 : items.length)
|
|
1761
|
+
return " RETURNING " + items.map(s => s.getQuery() + " AS " + prostgles_types_1.asName(s.alias)).join(", ");
|
|
1762
|
+
return "";
|
|
1763
|
+
}
|
|
1513
1764
|
delete(filter, params, param3_unused, table_rules, localParams = null) {
|
|
1514
1765
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1515
1766
|
try {
|
|
@@ -1557,7 +1808,7 @@ class TableHandler extends ViewHandler {
|
|
|
1557
1808
|
if (!returningFields) {
|
|
1558
1809
|
throw "Returning dissallowed";
|
|
1559
1810
|
}
|
|
1560
|
-
_query += yield this.prepareReturning(returning, this.parseFieldFilter(returningFields));
|
|
1811
|
+
_query += this.makeReturnQuery(yield this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
|
|
1561
1812
|
}
|
|
1562
1813
|
if (returnQuery)
|
|
1563
1814
|
return _query;
|
|
@@ -1590,20 +1841,14 @@ class TableHandler extends ViewHandler {
|
|
|
1590
1841
|
return tblH.find(filter, { select: "", limit: 1 }, {}, table_rules, localParams)
|
|
1591
1842
|
.then(exists => {
|
|
1592
1843
|
if (exists && exists.length) {
|
|
1593
|
-
// console.log(filter, "exists");
|
|
1594
1844
|
return tblH.update(filter, newData, params, table_rules, localParams);
|
|
1595
1845
|
}
|
|
1596
1846
|
else {
|
|
1597
|
-
// console.log(filter, "existnts")
|
|
1598
1847
|
return tblH.insert(Object.assign(Object.assign({}, newData), filter), params, null, table_rules, localParams);
|
|
1599
1848
|
}
|
|
1600
1849
|
});
|
|
1601
1850
|
});
|
|
1602
1851
|
}
|
|
1603
|
-
// .catch(existnts => {
|
|
1604
|
-
// console.log(filter, "existnts")
|
|
1605
|
-
// return this.insert({ ...filter, ...newData}, params);
|
|
1606
|
-
// });
|
|
1607
1852
|
}
|
|
1608
1853
|
catch (e) {
|
|
1609
1854
|
if (localParams && localParams.testRule)
|
|
@@ -1707,7 +1952,7 @@ class DboBuilder {
|
|
|
1707
1952
|
this.schema = "public";
|
|
1708
1953
|
this.init = () => __awaiter(this, void 0, void 0, function* () {
|
|
1709
1954
|
let onSchemaChange;
|
|
1710
|
-
if (this.prostgles.watchSchema) {
|
|
1955
|
+
if (this.prostgles.opts.watchSchema) {
|
|
1711
1956
|
onSchemaChange = (event) => {
|
|
1712
1957
|
this.prostgles.onSchemaChange(event);
|
|
1713
1958
|
};
|
|
@@ -1730,14 +1975,20 @@ class DboBuilder {
|
|
|
1730
1975
|
}
|
|
1731
1976
|
else {
|
|
1732
1977
|
txDB[tov.name] = new TableHandler(this.db, tov, this.pubSubManager, this, t, this.joinPaths);
|
|
1978
|
+
/**
|
|
1979
|
+
* Pass only the transaction object to ensure consistency
|
|
1980
|
+
*/
|
|
1981
|
+
// txDB[tov.name] = new ViewHandler(t, tov, this.pubSubManager, this, t, this.joinPaths);
|
|
1982
|
+
// } else {
|
|
1983
|
+
// txDB[tov.name] = new TableHandler(t as any, tov, this.pubSubManager, this, t, this.joinPaths);
|
|
1733
1984
|
}
|
|
1734
1985
|
});
|
|
1735
|
-
return dbTX(txDB);
|
|
1986
|
+
return dbTX(txDB, t);
|
|
1736
1987
|
});
|
|
1737
1988
|
};
|
|
1738
1989
|
this.prostgles = prostgles;
|
|
1739
1990
|
this.db = this.prostgles.db;
|
|
1740
|
-
this.schema = this.prostgles.schema || "public";
|
|
1991
|
+
this.schema = this.prostgles.opts.schema || "public";
|
|
1741
1992
|
this.dbo = {};
|
|
1742
1993
|
// this.joins = this.prostgles.joins;
|
|
1743
1994
|
}
|
|
@@ -1749,14 +2000,19 @@ class DboBuilder {
|
|
|
1749
2000
|
}
|
|
1750
2001
|
parseJoins() {
|
|
1751
2002
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1752
|
-
if (this.prostgles.joins) {
|
|
1753
|
-
let _joins = yield this.prostgles.joins;
|
|
2003
|
+
if (this.prostgles.opts.joins) {
|
|
2004
|
+
let _joins = yield this.prostgles.opts.joins;
|
|
2005
|
+
let inferredJoins = yield getInferredJoins(this.db, this.prostgles.opts.schema);
|
|
1754
2006
|
if (typeof _joins === "string" && _joins === "inferred") {
|
|
1755
|
-
_joins =
|
|
2007
|
+
_joins = inferredJoins;
|
|
2008
|
+
/* If joins are specified then include inferred joins except the explicit tables */
|
|
2009
|
+
}
|
|
2010
|
+
else if (Array.isArray(_joins)) {
|
|
2011
|
+
const joinTables = _joins.map(j => j.tables).flat();
|
|
2012
|
+
_joins = _joins.concat(inferredJoins.filter(j => !j.tables.find(t => joinTables.includes(t))));
|
|
1756
2013
|
}
|
|
1757
2014
|
let joins = JSON.parse(JSON.stringify(_joins));
|
|
1758
2015
|
this.joins = joins;
|
|
1759
|
-
// console.log(joins);
|
|
1760
2016
|
// Validate joins
|
|
1761
2017
|
try {
|
|
1762
2018
|
// 1 find duplicates
|
|
@@ -1822,9 +2078,6 @@ class DboBuilder {
|
|
|
1822
2078
|
}
|
|
1823
2079
|
});
|
|
1824
2080
|
});
|
|
1825
|
-
// console.log(this.joinPaths)
|
|
1826
|
-
// console.log(888, this.prostgles.joins);
|
|
1827
|
-
// console.log(this.joinGraph, findShortestPath(this.joinGraph, "colors", "drawings"));
|
|
1828
2081
|
}
|
|
1829
2082
|
return this.joinPaths;
|
|
1830
2083
|
});
|
|
@@ -1857,7 +2110,6 @@ export type TxCB = {
|
|
|
1857
2110
|
i18nDef += ` ${JSON.stringify(tov.name)}: { \n`;
|
|
1858
2111
|
i18nDef += ` [key in ${tov.columns.map(c => JSON.stringify(c.name)).join(" | ")}]: { [lang_id in keyof LANG_IDS]: string }; \n`;
|
|
1859
2112
|
i18nDef += ` }; \n`;
|
|
1860
|
-
// console.log("dboInit", tov.name, tov.columns.map(c => c.name))
|
|
1861
2113
|
const filterKeywords = Object.values(this.prostgles.keywords);
|
|
1862
2114
|
const $filterCol = tov.columns.find(c => filterKeywords.includes(c.name));
|
|
1863
2115
|
if ($filterCol) {
|
|
@@ -1917,13 +2169,81 @@ export type TxCB = {
|
|
|
1917
2169
|
this.dboDefinition += ` ${joinType}: JoinMakerTables;\n`;
|
|
1918
2170
|
});
|
|
1919
2171
|
}
|
|
1920
|
-
if (this.prostgles.transactions) {
|
|
2172
|
+
if (this.prostgles.opts.transactions) {
|
|
1921
2173
|
let txKey = "tx";
|
|
1922
|
-
if (typeof this.prostgles.transactions === "string")
|
|
1923
|
-
txKey = this.prostgles.transactions;
|
|
2174
|
+
if (typeof this.prostgles.opts.transactions === "string")
|
|
2175
|
+
txKey = this.prostgles.opts.transactions;
|
|
1924
2176
|
this.dboDefinition += ` ${txKey}: (t: TxCB) => Promise<any | void> ;\n`;
|
|
1925
2177
|
this.dbo[txKey] = (cb) => this.getTX(cb);
|
|
1926
2178
|
}
|
|
2179
|
+
if (!this.dbo.sql) {
|
|
2180
|
+
let needType = true; // this.publishRawSQL && typeof this.publishRawSQL === "function";
|
|
2181
|
+
let DATA_TYPES = !needType ? [] : yield this.db.any("SELECT oid, typname FROM pg_type");
|
|
2182
|
+
let USER_TABLES = !needType ? [] : yield this.db.any("SELECT relid, relname FROM pg_catalog.pg_statio_user_tables");
|
|
2183
|
+
this.dbo.sql = (query, params, options, localParams) => __awaiter(this, void 0, void 0, function* () {
|
|
2184
|
+
var _a;
|
|
2185
|
+
const canRunSQL = (localParams) => __awaiter(this, void 0, void 0, function* () {
|
|
2186
|
+
if (!localParams)
|
|
2187
|
+
return true;
|
|
2188
|
+
const { socket } = localParams;
|
|
2189
|
+
const publishParams = yield this.prostgles.publishParser.getPublishParams({ socket });
|
|
2190
|
+
let res = yield this.prostgles.opts.publishRawSQL(publishParams);
|
|
2191
|
+
return Boolean(res && typeof res === "boolean" || res === "*");
|
|
2192
|
+
});
|
|
2193
|
+
if (!(yield canRunSQL(localParams)))
|
|
2194
|
+
throw "Not allowed to run SQL";
|
|
2195
|
+
const { returnType } = options || {};
|
|
2196
|
+
const { socket } = localParams || {};
|
|
2197
|
+
if (returnType === "noticeSubscription") {
|
|
2198
|
+
if (!socket)
|
|
2199
|
+
throw "Only allowed with client socket";
|
|
2200
|
+
return yield this.prostgles.dbEventsManager.addNotice(socket);
|
|
2201
|
+
}
|
|
2202
|
+
else if (returnType === "statement") {
|
|
2203
|
+
try {
|
|
2204
|
+
return exports.pgp.as.format(query, params);
|
|
2205
|
+
}
|
|
2206
|
+
catch (err) {
|
|
2207
|
+
throw err.toString();
|
|
2208
|
+
}
|
|
2209
|
+
}
|
|
2210
|
+
else if (this.db) {
|
|
2211
|
+
let qres = yield this.db.result(query, params);
|
|
2212
|
+
const { duration, fields, rows, command } = qres;
|
|
2213
|
+
if (command === "LISTEN") {
|
|
2214
|
+
if (!socket)
|
|
2215
|
+
throw "Only allowed with client socket";
|
|
2216
|
+
return yield this.prostgles.dbEventsManager.addNotify(query, socket);
|
|
2217
|
+
}
|
|
2218
|
+
else if (returnType === "rows") {
|
|
2219
|
+
return rows;
|
|
2220
|
+
}
|
|
2221
|
+
else if (returnType === "row") {
|
|
2222
|
+
return rows[0];
|
|
2223
|
+
}
|
|
2224
|
+
else if (returnType === "value") {
|
|
2225
|
+
return (_a = Object.values((rows === null || rows === void 0 ? void 0 : rows[0]) || {})) === null || _a === void 0 ? void 0 : _a[0];
|
|
2226
|
+
}
|
|
2227
|
+
else if (returnType === "values") {
|
|
2228
|
+
return rows.map(r => Object.values(r[0]));
|
|
2229
|
+
}
|
|
2230
|
+
else {
|
|
2231
|
+
if (fields && DATA_TYPES.length) {
|
|
2232
|
+
qres.fields = fields.map(f => {
|
|
2233
|
+
const dataType = DATA_TYPES.find(dt => +dt.oid === +f.dataTypeID), tableName = USER_TABLES.find(t => +t.relid === +f.tableID), { name } = f;
|
|
2234
|
+
return Object.assign(Object.assign(Object.assign({}, f), (dataType ? { dataType: dataType.typname } : {})), (tableName ? { tableName: tableName.relname } : {}));
|
|
2235
|
+
});
|
|
2236
|
+
}
|
|
2237
|
+
return qres;
|
|
2238
|
+
}
|
|
2239
|
+
}
|
|
2240
|
+
else
|
|
2241
|
+
console.error("db missing");
|
|
2242
|
+
});
|
|
2243
|
+
}
|
|
2244
|
+
else {
|
|
2245
|
+
console.warn(`Could not create dbo.sql handler because there is already a table named "sql"`);
|
|
2246
|
+
}
|
|
1927
2247
|
this.dboDefinition += "};\n";
|
|
1928
2248
|
this.tsTypesDefinition = [
|
|
1929
2249
|
common_types,
|
|
@@ -2349,7 +2669,6 @@ function getInferredJoins(db, schema = "public") {
|
|
|
2349
2669
|
});
|
|
2350
2670
|
}
|
|
2351
2671
|
});
|
|
2352
|
-
// console.log(joins);
|
|
2353
2672
|
return joins;
|
|
2354
2673
|
});
|
|
2355
2674
|
}
|