prostgles-server 1.5.119 → 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 +53 -28
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +432 -113
- 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 +163 -78
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +241 -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 +581 -175
- package/lib/FileManager.ts +546 -0
- package/lib/Prostgles.ts +424 -252
- 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 +83 -62
- package/tests/client/package.json +3 -3
- 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 +43 -1
- package/tests/isomorphic_queries.ts +33 -2
- package/tests/server/DBoGenerated.d.ts +192 -0
- package/tests/server/index.js +64 -26
- package/tests/server/index.ts +64 -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,34 +286,91 @@ 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
|
-
getInfo(tableRules, localParams) {
|
|
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
|
}
|
|
291
346
|
// TODO: fix renamed table trigger problem
|
|
292
|
-
getColumns(tableRules, localParams) {
|
|
347
|
+
getColumns(lang, param2, param3, tableRules, localParams) {
|
|
293
348
|
return __awaiter(this, void 0, void 0, function* () {
|
|
294
349
|
try {
|
|
295
350
|
const p = this.getValidatedRules(tableRules, localParams);
|
|
296
351
|
if (!p.select.getColumns)
|
|
297
352
|
throw "Not allowed";
|
|
298
353
|
// console.log("getColumns", this.name, this.columns.map(c => c.name))
|
|
299
|
-
|
|
354
|
+
let _lang = lang;
|
|
355
|
+
return this.columns.map(c => {
|
|
356
|
+
var _a, _b, _c, _e, _f, _g, _h, _j;
|
|
357
|
+
let label = c.comment || c.name;
|
|
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;
|
|
360
|
+
_lang = _lang || fallbackLang;
|
|
361
|
+
if ((lang || fallbackLang) && iConf) {
|
|
362
|
+
let langLabel;
|
|
363
|
+
if (lang)
|
|
364
|
+
langLabel = iConf[lang];
|
|
365
|
+
if (!langLabel && fallbackLang)
|
|
366
|
+
langLabel = iConf[fallbackLang];
|
|
367
|
+
label = langLabel || label;
|
|
368
|
+
}
|
|
369
|
+
return Object.assign(Object.assign({}, c), { label, tsDataType: postgresToTsType(c.udt_name), insert: Boolean(p.insert && p.insert.fields && p.insert.fields.includes(c.name)), select: Boolean(p.select && p.select.fields && p.select.fields.includes(c.name)), filter: Boolean(p.select && p.select.filterFields && p.select.filterFields.includes(c.name)), update: Boolean(p.update && p.update.fields && p.update.fields.includes(c.name)), delete: Boolean(p.delete && p.delete.filterFields && p.delete.filterFields.includes(c.name)) });
|
|
370
|
+
});
|
|
300
371
|
}
|
|
301
372
|
catch (e) {
|
|
373
|
+
console.trace(e);
|
|
302
374
|
throw "Something went wrong in " + `db.${this.name}.getColumns()`;
|
|
303
375
|
}
|
|
304
376
|
});
|
|
@@ -430,9 +502,10 @@ class ViewHandler {
|
|
|
430
502
|
return __awaiter(this, void 0, void 0, function* () {
|
|
431
503
|
try {
|
|
432
504
|
filter = filter || {};
|
|
505
|
+
const allowedReturnTypes = ["row", "value", "values"];
|
|
433
506
|
const { returnType } = selectParams || {};
|
|
434
|
-
if (returnType && !
|
|
435
|
-
throw `returnType (${returnType}) can only be ${
|
|
507
|
+
if (returnType && !allowedReturnTypes.includes(returnType)) {
|
|
508
|
+
throw `returnType (${returnType}) can only be ${allowedReturnTypes.join(" OR ")}`;
|
|
436
509
|
}
|
|
437
510
|
const { testRule = false, returnQuery = false } = localParams || {};
|
|
438
511
|
if (testRule)
|
|
@@ -460,7 +533,6 @@ class ViewHandler {
|
|
|
460
533
|
throw ` invalid publish.${this.name}.select.maxLimit -> expecting integer but got ` + maxLimit;
|
|
461
534
|
}
|
|
462
535
|
let q = yield QueryBuilder_1.getNewQuery(this, filter, selectParams, param3_unused, tableRules, localParams), _query = QueryBuilder_1.makeQuery(this, q, undefined, undefined, selectParams);
|
|
463
|
-
// console.log(_query)
|
|
464
536
|
if (testRule) {
|
|
465
537
|
try {
|
|
466
538
|
yield this.db.any("EXPLAIN " + _query);
|
|
@@ -471,7 +543,6 @@ class ViewHandler {
|
|
|
471
543
|
throw `INTERNAL ERROR: Publish config is not valid for publish.${this.name}.select `;
|
|
472
544
|
}
|
|
473
545
|
}
|
|
474
|
-
// console.log(_query);
|
|
475
546
|
if (returnQuery)
|
|
476
547
|
return _query;
|
|
477
548
|
if (["row", "value"].includes(returnType)) {
|
|
@@ -650,24 +721,26 @@ class ViewHandler {
|
|
|
650
721
|
}
|
|
651
722
|
const makeTableChain = (finalFilter) => {
|
|
652
723
|
let joinPaths = [];
|
|
724
|
+
let expectOne = true;
|
|
653
725
|
tables.map((t2, depth) => {
|
|
654
726
|
let t1 = depth ? tables[depth - 1] : thisTable;
|
|
655
727
|
let exactPaths = [t1, t2];
|
|
656
728
|
if (!depth && eConfig.shortestJoin)
|
|
657
729
|
exactPaths = undefined;
|
|
658
|
-
|
|
730
|
+
const jinf = this.getJoins(t1, t2, exactPaths);
|
|
731
|
+
expectOne = expectOne && jinf.expectOne;
|
|
732
|
+
joinPaths = joinPaths.concat(jinf.paths);
|
|
659
733
|
});
|
|
660
|
-
let r = makeJoin(joinPaths, 0);
|
|
661
|
-
// console.log(r);
|
|
734
|
+
let r = makeJoin({ paths: joinPaths, expectOne }, 0);
|
|
662
735
|
return r;
|
|
663
|
-
function makeJoin(
|
|
736
|
+
function makeJoin(joinInfo, ji) {
|
|
737
|
+
const { paths } = joinInfo;
|
|
664
738
|
const jp = paths[ji];
|
|
665
739
|
let prevTable = ji ? paths[ji - 1].table : jp.source;
|
|
666
740
|
let table = paths[ji].table;
|
|
667
741
|
let tableAlias = prostgles_types_1.asName(ji < paths.length - 1 ? `jd${ji}` : table);
|
|
668
742
|
let prevTableAlias = prostgles_types_1.asName(ji ? `jd${ji - 1}` : thisTable);
|
|
669
743
|
let cond = `${jp.on.map(([c1, c2]) => `${prevTableAlias}.${prostgles_types_1.asName(c1)} = ${tableAlias}.${prostgles_types_1.asName(c2)}`).join("\n AND ")}`;
|
|
670
|
-
// console.log(join, cond);
|
|
671
744
|
let j = `SELECT 1 \n` +
|
|
672
745
|
`FROM ${prostgles_types_1.asName(table)} ${tableAlias} \n` +
|
|
673
746
|
`WHERE ${cond} \n`; //
|
|
@@ -677,7 +750,7 @@ class ViewHandler {
|
|
|
677
750
|
}
|
|
678
751
|
const indent = (a, b) => a;
|
|
679
752
|
if (ji < paths.length - 1) {
|
|
680
|
-
j += `AND ${makeJoin(
|
|
753
|
+
j += `AND ${makeJoin(joinInfo, ji + 1)} \n`;
|
|
681
754
|
}
|
|
682
755
|
j = indent(j, ji + 1);
|
|
683
756
|
let res = `EXISTS ( \n` +
|
|
@@ -688,9 +761,9 @@ class ViewHandler {
|
|
|
688
761
|
};
|
|
689
762
|
let t2Rules = undefined, forcedFilter, filterFields, tableAlias;
|
|
690
763
|
/* Check if allowed to view data */
|
|
691
|
-
if (localParams && localParams.socket && this.dboBuilder.publishParser) {
|
|
764
|
+
if (localParams && (localParams.socket || localParams.httpReq) && this.dboBuilder.publishParser) {
|
|
692
765
|
/* Need to think about joining through dissallowed tables */
|
|
693
|
-
t2Rules = yield this.dboBuilder.publishParser.getValidatedRequestRuleWusr({ tableName: t2, command: "find",
|
|
766
|
+
t2Rules = yield this.dboBuilder.publishParser.getValidatedRequestRuleWusr({ tableName: t2, command: "find", localParams });
|
|
694
767
|
if (!t2Rules || !t2Rules.select)
|
|
695
768
|
throw "Dissallowed";
|
|
696
769
|
({ forcedFilter, filterFields } = t2Rules.select);
|
|
@@ -704,14 +777,13 @@ class ViewHandler {
|
|
|
704
777
|
addKeywords: false,
|
|
705
778
|
tableAlias,
|
|
706
779
|
localParams,
|
|
707
|
-
tableRule: tableRules
|
|
780
|
+
tableRule: t2Rules //tableRules
|
|
708
781
|
}));
|
|
709
782
|
}
|
|
710
783
|
catch (err) {
|
|
711
784
|
// console.trace(err)
|
|
712
785
|
throw "Issue with preparing $exists query for table " + t2 + "\n->" + JSON.stringify(err);
|
|
713
786
|
}
|
|
714
|
-
// console.log(f2, finalWhere);
|
|
715
787
|
if (!isJoined) {
|
|
716
788
|
res = ` EXISTS (SELECT 1 \nFROM ${prostgles_types_1.asName(t2)} \n${finalWhere ? `WHERE ${finalWhere}` : ""}) `;
|
|
717
789
|
}
|
|
@@ -806,7 +878,6 @@ class ViewHandler {
|
|
|
806
878
|
return false;
|
|
807
879
|
});
|
|
808
880
|
}
|
|
809
|
-
// console.log(allowedSelect);
|
|
810
881
|
/* Add remaining allowed fields */
|
|
811
882
|
allowedSelect = allowedSelect.concat(p.allColumns.filter(c => allowed_colnames.includes(c.name) &&
|
|
812
883
|
!allowedSelect.find(s => s.alias === c.name)).map(f => ({
|
|
@@ -841,14 +912,12 @@ class ViewHandler {
|
|
|
841
912
|
pgp: exports.pgp,
|
|
842
913
|
select: allowedSelect
|
|
843
914
|
});
|
|
844
|
-
// console.log({ f, q })
|
|
845
915
|
let templates = [q].filter(q => q);
|
|
846
916
|
if (existsCond)
|
|
847
917
|
templates.push(existsCond);
|
|
848
918
|
templates = templates.concat(computedColConditions);
|
|
849
919
|
return templates.sort() /* sorted to ensure duplicate subscription channels are not created due to different condition order */
|
|
850
920
|
.join(" AND \n");
|
|
851
|
-
// console.log(templates)
|
|
852
921
|
// return templates; //pgp.as.format(template, data);
|
|
853
922
|
/*
|
|
854
923
|
SHOULD CHECK DATA TYPES TO AVOID "No operator matches the given data type" error
|
|
@@ -937,7 +1006,6 @@ class ViewHandler {
|
|
|
937
1006
|
if (!_ob || !_ob.length)
|
|
938
1007
|
return "";
|
|
939
1008
|
const validatedAggAliases = select.filter(s => s.type !== "joinedColumn").map(s => s.alias);
|
|
940
|
-
// console.log({ validatedAggAliases })
|
|
941
1009
|
let bad_param = _ob.find(({ key }) => !(validatedAggAliases || []).includes(key) &&
|
|
942
1010
|
(!column_names.includes(key) ||
|
|
943
1011
|
(allowedFields.length && !allowedFields.includes(key))));
|
|
@@ -1138,8 +1206,8 @@ function isPojoObject(obj) {
|
|
|
1138
1206
|
class TableHandler extends ViewHandler {
|
|
1139
1207
|
constructor(db, tableOrViewInfo, pubSubManager, dboBuilder, t, joinPaths) {
|
|
1140
1208
|
super(db, tableOrViewInfo, pubSubManager, dboBuilder, t, joinPaths);
|
|
1141
|
-
this.prepareReturning = (returning, allowedFields
|
|
1142
|
-
let result =
|
|
1209
|
+
this.prepareReturning = (returning, allowedFields) => __awaiter(this, void 0, void 0, function* () {
|
|
1210
|
+
let result = [];
|
|
1143
1211
|
if (returning) {
|
|
1144
1212
|
let sBuilder = new QueryBuilder_1.SelectItemBuilder({
|
|
1145
1213
|
allFields: this.column_names.slice(0),
|
|
@@ -1149,9 +1217,7 @@ class TableHandler extends ViewHandler {
|
|
|
1149
1217
|
isView: this.is_view
|
|
1150
1218
|
});
|
|
1151
1219
|
yield sBuilder.parseUserSelect(returning);
|
|
1152
|
-
|
|
1153
|
-
result = "RETURNING ";
|
|
1154
|
-
result += sBuilder.select.map(s => s.getQuery() + " AS " + QueryBuilder_1.asNameAlias(s.alias, tableAlias)).join(", ");
|
|
1220
|
+
return sBuilder.select;
|
|
1155
1221
|
}
|
|
1156
1222
|
return result;
|
|
1157
1223
|
});
|
|
@@ -1163,6 +1229,7 @@ class TableHandler extends ViewHandler {
|
|
|
1163
1229
|
batching: null
|
|
1164
1230
|
};
|
|
1165
1231
|
this.is_view = false;
|
|
1232
|
+
this.is_media = dboBuilder.prostgles.isMedia(this.name);
|
|
1166
1233
|
}
|
|
1167
1234
|
/* TO DO: Maybe finished query batching */
|
|
1168
1235
|
willBatch(query) {
|
|
@@ -1252,7 +1319,6 @@ class TableHandler extends ViewHandler {
|
|
|
1252
1319
|
const queries = yield Promise.all(data.map(([filter, data]) => __awaiter(this, void 0, void 0, function* () {
|
|
1253
1320
|
return yield this.update(filter, data, Object.assign(Object.assign({}, (params || {})), { returning: undefined }), tableRules, Object.assign(Object.assign({}, (localParams || {})), { returnQuery: true }));
|
|
1254
1321
|
})));
|
|
1255
|
-
// console.log(queries)
|
|
1256
1322
|
return this.db.tx(t => {
|
|
1257
1323
|
const _queries = queries.map(q => t.none(q));
|
|
1258
1324
|
return t.batch(_queries);
|
|
@@ -1324,13 +1390,11 @@ class TableHandler extends ViewHandler {
|
|
|
1324
1390
|
throw "Unrecognised params in textPatch field: " + unrecProps.join(", ");
|
|
1325
1391
|
patchedTextData.push(Object.assign(Object.assign({}, d), { fieldName: c.name }));
|
|
1326
1392
|
}
|
|
1327
|
-
// console.log("update2", patchedTextData);
|
|
1328
1393
|
});
|
|
1329
1394
|
if (patchedTextData && patchedTextData.length) {
|
|
1330
1395
|
if (tableRules && !tableRules.select)
|
|
1331
1396
|
throw "Select needs to be permitted to patch data";
|
|
1332
1397
|
const rows = yield this.find(filter, { select: patchedTextData.reduce((a, v) => (Object.assign(Object.assign({}, a), { [v.fieldName]: 1 })), {}) }, null, tableRules);
|
|
1333
|
-
// console.log(rows)
|
|
1334
1398
|
if (rows.length !== 1) {
|
|
1335
1399
|
throw "Cannot patch data within a filter that affects more/less than 1 row";
|
|
1336
1400
|
}
|
|
@@ -1357,9 +1421,8 @@ class TableHandler extends ViewHandler {
|
|
|
1357
1421
|
let qType = "none";
|
|
1358
1422
|
if (returning) {
|
|
1359
1423
|
qType = multi ? "any" : "one";
|
|
1360
|
-
query += yield this.prepareReturning(returning, this.parseFieldFilter(returningFields));
|
|
1424
|
+
query += this.makeReturnQuery(yield this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
|
|
1361
1425
|
}
|
|
1362
|
-
// console.log(query)
|
|
1363
1426
|
if (returnQuery)
|
|
1364
1427
|
return query;
|
|
1365
1428
|
if (this.t) {
|
|
@@ -1389,29 +1452,221 @@ class TableHandler extends ViewHandler {
|
|
|
1389
1452
|
// let cs = new pgp.helpers.ColumnSet(this.columnSet.columns.filter(c => dataKeys.includes(c.name)), { table: this.name });
|
|
1390
1453
|
return { data, allowedCols: this.columns.filter(c => dataKeys.includes(c.name)).map(c => c.name) };
|
|
1391
1454
|
}
|
|
1392
|
-
|
|
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;
|
|
1393
1644
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1645
|
+
const localParams = _localParams || {};
|
|
1646
|
+
const { dbTX } = localParams;
|
|
1394
1647
|
try {
|
|
1395
1648
|
const { returning, onConflictDoNothing, fixIssues = false } = param2 || {};
|
|
1396
1649
|
const { testRule = false, returnQuery = false } = localParams || {};
|
|
1397
|
-
let returningFields, forcedData,
|
|
1650
|
+
let returningFields, forcedData,
|
|
1651
|
+
// validate: TableRule["insert"]["validate"],
|
|
1652
|
+
// preValidate: any,
|
|
1653
|
+
fields;
|
|
1398
1654
|
if (tableRules) {
|
|
1399
1655
|
if (!tableRules.insert)
|
|
1400
1656
|
throw "insert rules missing for " + this.name;
|
|
1401
1657
|
returningFields = tableRules.insert.returningFields;
|
|
1402
1658
|
forcedData = tableRules.insert.forcedData;
|
|
1403
1659
|
fields = tableRules.insert.fields;
|
|
1404
|
-
validate = tableRules.insert.validate;
|
|
1405
|
-
preValidate = tableRules.insert.preValidate;
|
|
1660
|
+
// validate = tableRules.insert.validate;
|
|
1661
|
+
// preValidate = tableRules.insert.preValidate;
|
|
1406
1662
|
/* If no returning fields specified then take select fields as returning */
|
|
1407
1663
|
if (!returningFields)
|
|
1408
|
-
returningFields = utils_1.get(tableRules, "select.fields");
|
|
1409
|
-
if (!returningFields)
|
|
1410
|
-
returningFields = utils_1.get(tableRules, "insert.fields");
|
|
1664
|
+
returningFields = utils_1.get(tableRules, "select.fields") || utils_1.get(tableRules, "insert.fields");
|
|
1411
1665
|
if (!fields)
|
|
1412
1666
|
throw ` invalid insert rule for ${this.name} -> fields missing `;
|
|
1413
1667
|
/* Safely test publish rules */
|
|
1414
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";
|
|
1415
1670
|
yield this.validateViewRules(fields, null, returningFields, null, "insert");
|
|
1416
1671
|
if (forcedData) {
|
|
1417
1672
|
const keys = Object.keys(forcedData);
|
|
@@ -1432,21 +1687,23 @@ class TableHandler extends ViewHandler {
|
|
|
1432
1687
|
if (typeof onConflictDoNothing === "boolean" && onConflictDoNothing) {
|
|
1433
1688
|
conflict_query = " ON CONFLICT DO NOTHING ";
|
|
1434
1689
|
}
|
|
1435
|
-
if (
|
|
1436
|
-
|
|
1437
|
-
|
|
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)));
|
|
1438
1699
|
const makeQuery = (_row, isOne = false) => __awaiter(this, void 0, void 0, function* () {
|
|
1439
1700
|
let row = Object.assign({}, _row);
|
|
1440
|
-
if (
|
|
1441
|
-
|
|
1442
|
-
}
|
|
1443
|
-
if (!isPojoObject(row))
|
|
1701
|
+
if (!isPojoObject(row)) {
|
|
1702
|
+
console.trace(row);
|
|
1444
1703
|
throw "\ninvalid insert data provided -> " + JSON.stringify(row);
|
|
1704
|
+
}
|
|
1445
1705
|
const { data, allowedCols } = this.validateNewData({ row, forcedData, allowedFields: fields, tableRules, fixIssues });
|
|
1446
1706
|
let _data = Object.assign({}, data);
|
|
1447
|
-
if (validate) {
|
|
1448
|
-
_data = yield validate(_data);
|
|
1449
|
-
}
|
|
1450
1707
|
let insertQ = "";
|
|
1451
1708
|
if (!Object.keys(_data).length)
|
|
1452
1709
|
insertQ = `INSERT INTO ${prostgles_types_1.asName(this.name)} DEFAULT VALUES `;
|
|
@@ -1454,21 +1711,21 @@ class TableHandler extends ViewHandler {
|
|
|
1454
1711
|
insertQ = this.colSet.getInsertQuery(_data, allowedCols); // pgp.helpers.insert(_data, columnSet);
|
|
1455
1712
|
return insertQ + conflict_query + returningSelect;
|
|
1456
1713
|
});
|
|
1457
|
-
if (param2) {
|
|
1458
|
-
const good_params = ["returning", "multi", "onConflictDoNothing", "fixIssues"];
|
|
1459
|
-
const bad_params = Object.keys(param2).filter(k => !good_params.includes(k));
|
|
1460
|
-
if (bad_params && bad_params.length)
|
|
1461
|
-
throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
|
|
1462
|
-
}
|
|
1463
1714
|
let query = "";
|
|
1464
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;
|
|
1465
1723
|
if (Array.isArray(data)) {
|
|
1466
1724
|
// if(returning) throw "Sorry but [returning] is dissalowed for multi insert";
|
|
1467
1725
|
let queries = yield Promise.all(data.map((p) => __awaiter(this, void 0, void 0, function* () {
|
|
1468
1726
|
const q = yield makeQuery(p);
|
|
1469
1727
|
return q;
|
|
1470
1728
|
})));
|
|
1471
|
-
// console.log(queries)
|
|
1472
1729
|
query = exports.pgp.helpers.concat(queries);
|
|
1473
1730
|
if (returning)
|
|
1474
1731
|
queryType = "many";
|
|
@@ -1478,12 +1735,18 @@ class TableHandler extends ViewHandler {
|
|
|
1478
1735
|
if (returning)
|
|
1479
1736
|
queryType = "one";
|
|
1480
1737
|
}
|
|
1481
|
-
// console.log(query);
|
|
1482
1738
|
if (returnQuery)
|
|
1483
1739
|
return query;
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
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;
|
|
1487
1750
|
}
|
|
1488
1751
|
catch (e) {
|
|
1489
1752
|
if (localParams && localParams.testRule)
|
|
@@ -1493,6 +1756,11 @@ class TableHandler extends ViewHandler {
|
|
|
1493
1756
|
});
|
|
1494
1757
|
}
|
|
1495
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
|
+
}
|
|
1496
1764
|
delete(filter, params, param3_unused, table_rules, localParams = null) {
|
|
1497
1765
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1498
1766
|
try {
|
|
@@ -1540,7 +1808,7 @@ class TableHandler extends ViewHandler {
|
|
|
1540
1808
|
if (!returningFields) {
|
|
1541
1809
|
throw "Returning dissallowed";
|
|
1542
1810
|
}
|
|
1543
|
-
_query += yield this.prepareReturning(returning, this.parseFieldFilter(returningFields));
|
|
1811
|
+
_query += this.makeReturnQuery(yield this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
|
|
1544
1812
|
}
|
|
1545
1813
|
if (returnQuery)
|
|
1546
1814
|
return _query;
|
|
@@ -1573,20 +1841,14 @@ class TableHandler extends ViewHandler {
|
|
|
1573
1841
|
return tblH.find(filter, { select: "", limit: 1 }, {}, table_rules, localParams)
|
|
1574
1842
|
.then(exists => {
|
|
1575
1843
|
if (exists && exists.length) {
|
|
1576
|
-
// console.log(filter, "exists");
|
|
1577
1844
|
return tblH.update(filter, newData, params, table_rules, localParams);
|
|
1578
1845
|
}
|
|
1579
1846
|
else {
|
|
1580
|
-
// console.log(filter, "existnts")
|
|
1581
1847
|
return tblH.insert(Object.assign(Object.assign({}, newData), filter), params, null, table_rules, localParams);
|
|
1582
1848
|
}
|
|
1583
1849
|
});
|
|
1584
1850
|
});
|
|
1585
1851
|
}
|
|
1586
|
-
// .catch(existnts => {
|
|
1587
|
-
// console.log(filter, "existnts")
|
|
1588
|
-
// return this.insert({ ...filter, ...newData}, params);
|
|
1589
|
-
// });
|
|
1590
1852
|
}
|
|
1591
1853
|
catch (e) {
|
|
1592
1854
|
if (localParams && localParams.testRule)
|
|
@@ -1690,7 +1952,7 @@ class DboBuilder {
|
|
|
1690
1952
|
this.schema = "public";
|
|
1691
1953
|
this.init = () => __awaiter(this, void 0, void 0, function* () {
|
|
1692
1954
|
let onSchemaChange;
|
|
1693
|
-
if (this.prostgles.watchSchema) {
|
|
1955
|
+
if (this.prostgles.opts.watchSchema) {
|
|
1694
1956
|
onSchemaChange = (event) => {
|
|
1695
1957
|
this.prostgles.onSchemaChange(event);
|
|
1696
1958
|
};
|
|
@@ -1713,14 +1975,20 @@ class DboBuilder {
|
|
|
1713
1975
|
}
|
|
1714
1976
|
else {
|
|
1715
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);
|
|
1716
1984
|
}
|
|
1717
1985
|
});
|
|
1718
|
-
return dbTX(txDB);
|
|
1986
|
+
return dbTX(txDB, t);
|
|
1719
1987
|
});
|
|
1720
1988
|
};
|
|
1721
1989
|
this.prostgles = prostgles;
|
|
1722
1990
|
this.db = this.prostgles.db;
|
|
1723
|
-
this.schema = this.prostgles.schema || "public";
|
|
1991
|
+
this.schema = this.prostgles.opts.schema || "public";
|
|
1724
1992
|
this.dbo = {};
|
|
1725
1993
|
// this.joins = this.prostgles.joins;
|
|
1726
1994
|
}
|
|
@@ -1732,14 +2000,19 @@ class DboBuilder {
|
|
|
1732
2000
|
}
|
|
1733
2001
|
parseJoins() {
|
|
1734
2002
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1735
|
-
if (this.prostgles.joins) {
|
|
1736
|
-
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);
|
|
1737
2006
|
if (typeof _joins === "string" && _joins === "inferred") {
|
|
1738
|
-
_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))));
|
|
1739
2013
|
}
|
|
1740
2014
|
let joins = JSON.parse(JSON.stringify(_joins));
|
|
1741
2015
|
this.joins = joins;
|
|
1742
|
-
// console.log(joins);
|
|
1743
2016
|
// Validate joins
|
|
1744
2017
|
try {
|
|
1745
2018
|
// 1 find duplicates
|
|
@@ -1805,9 +2078,6 @@ class DboBuilder {
|
|
|
1805
2078
|
}
|
|
1806
2079
|
});
|
|
1807
2080
|
});
|
|
1808
|
-
// console.log(this.joinPaths)
|
|
1809
|
-
// console.log(888, this.prostgles.joins);
|
|
1810
|
-
// console.log(this.joinGraph, findShortestPath(this.joinGraph, "colors", "drawings"));
|
|
1811
2081
|
}
|
|
1812
2082
|
return this.joinPaths;
|
|
1813
2083
|
});
|
|
@@ -1832,8 +2102,14 @@ export type TxCB = {
|
|
|
1832
2102
|
yield this.parseJoins();
|
|
1833
2103
|
let joinTableNames = [];
|
|
1834
2104
|
let allDataDefs = "";
|
|
2105
|
+
let i18nDef = "type DeepPartial<T> = { [P in keyof T]?: DeepPartial<T[P]>; }; \n";
|
|
2106
|
+
i18nDef += "export type I18N_DBO_CONFIG<LANG_IDS = { en: 1, fr: 1 }> = { \n";
|
|
2107
|
+
i18nDef += " fallbackLang: keyof LANG_IDS; \n";
|
|
2108
|
+
i18nDef += " column_labels?: DeepPartial<{ \n";
|
|
1835
2109
|
this.tablesOrViews.map(tov => {
|
|
1836
|
-
|
|
2110
|
+
i18nDef += ` ${JSON.stringify(tov.name)}: { \n`;
|
|
2111
|
+
i18nDef += ` [key in ${tov.columns.map(c => JSON.stringify(c.name)).join(" | ")}]: { [lang_id in keyof LANG_IDS]: string }; \n`;
|
|
2112
|
+
i18nDef += ` }; \n`;
|
|
1837
2113
|
const filterKeywords = Object.values(this.prostgles.keywords);
|
|
1838
2114
|
const $filterCol = tov.columns.find(c => filterKeywords.includes(c.name));
|
|
1839
2115
|
if ($filterCol) {
|
|
@@ -1880,6 +2156,8 @@ export type TxCB = {
|
|
|
1880
2156
|
}
|
|
1881
2157
|
}
|
|
1882
2158
|
});
|
|
2159
|
+
i18nDef += " }> \n";
|
|
2160
|
+
i18nDef += "} \n";
|
|
1883
2161
|
let joinBuilderDef = "";
|
|
1884
2162
|
if (joinTableNames.length) {
|
|
1885
2163
|
joinBuilderDef += "export type JoinMakerTables = {\n";
|
|
@@ -1891,13 +2169,81 @@ export type TxCB = {
|
|
|
1891
2169
|
this.dboDefinition += ` ${joinType}: JoinMakerTables;\n`;
|
|
1892
2170
|
});
|
|
1893
2171
|
}
|
|
1894
|
-
if (this.prostgles.transactions) {
|
|
2172
|
+
if (this.prostgles.opts.transactions) {
|
|
1895
2173
|
let txKey = "tx";
|
|
1896
|
-
if (typeof this.prostgles.transactions === "string")
|
|
1897
|
-
txKey = this.prostgles.transactions;
|
|
2174
|
+
if (typeof this.prostgles.opts.transactions === "string")
|
|
2175
|
+
txKey = this.prostgles.opts.transactions;
|
|
1898
2176
|
this.dboDefinition += ` ${txKey}: (t: TxCB) => Promise<any | void> ;\n`;
|
|
1899
2177
|
this.dbo[txKey] = (cb) => this.getTX(cb);
|
|
1900
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
|
+
}
|
|
1901
2247
|
this.dboDefinition += "};\n";
|
|
1902
2248
|
this.tsTypesDefinition = [
|
|
1903
2249
|
common_types,
|
|
@@ -1905,7 +2251,8 @@ export type TxCB = {
|
|
|
1905
2251
|
allDataDefs,
|
|
1906
2252
|
joinBuilderDef,
|
|
1907
2253
|
`/* DBO Definition. Isomorphic */`,
|
|
1908
|
-
this.dboDefinition
|
|
2254
|
+
this.dboDefinition,
|
|
2255
|
+
i18nDef,
|
|
1909
2256
|
].join("\n");
|
|
1910
2257
|
return this.dbo;
|
|
1911
2258
|
// let dbo = makeDBO(db, allTablesViews, pubSubManager, true);
|
|
@@ -2022,33 +2369,6 @@ function isPlainObject(o) {
|
|
|
2022
2369
|
return Object(o) === o && Object.getPrototypeOf(o) === Object.prototype;
|
|
2023
2370
|
}
|
|
2024
2371
|
exports.isPlainObject = isPlainObject;
|
|
2025
|
-
// export const _PG_strings = ['bpchar','char','varchar','text','citext','uuid','bytea','inet','time','timetz','interval','name'] as const;
|
|
2026
|
-
// export const _PG_numbers = ['int2','int4','int8','float4','float8','numeric','money','oid'] as const;
|
|
2027
|
-
// export const _PG_json = ['json', 'jsonb'] as const;
|
|
2028
|
-
// export const _PG_bool = ['bool'] as const;
|
|
2029
|
-
// export const _PG_date = ['date', 'timestamp', 'timestamptz'] as const;
|
|
2030
|
-
// export const _PG_postgis = ['geometry'] as const;
|
|
2031
|
-
// export type PG_COLUMN_UDT_DATA_TYPE =
|
|
2032
|
-
// | typeof _PG_strings[number]
|
|
2033
|
-
// | typeof _PG_numbers[number]
|
|
2034
|
-
// | typeof _PG_json[number]
|
|
2035
|
-
// | typeof _PG_bool[number]
|
|
2036
|
-
// | typeof _PG_date[number]
|
|
2037
|
-
// | typeof _PG_postgis[number];
|
|
2038
|
-
// export const TS_PG_Types: { [key: string]: readonly string[]; } = {
|
|
2039
|
-
// "string": _PG_strings,
|
|
2040
|
-
// "number": _PG_numbers,
|
|
2041
|
-
// "boolean": _PG_bool,
|
|
2042
|
-
// "Object": _PG_json,
|
|
2043
|
-
// "Date": _PG_date,
|
|
2044
|
-
// "Array<number>": _PG_numbers.map(s => `_${s}`),
|
|
2045
|
-
// "Array<boolean>": _PG_bool.map(s => `_${s}`),
|
|
2046
|
-
// "Array<string>": _PG_strings.map(s => `_${s}`),
|
|
2047
|
-
// "Array<Object>": _PG_json.map(s => `_${s}`),
|
|
2048
|
-
// "Array<Date>": _PG_date.map(s => `_${s}`),
|
|
2049
|
-
// "any": [],
|
|
2050
|
-
// } as const;
|
|
2051
|
-
// export type TS_COLUMN_DATA_TYPES = keyof typeof TS_PG_Types;
|
|
2052
2372
|
function postgresToTsType(udt_data_type) {
|
|
2053
2373
|
return Object.keys(prostgles_types_1.TS_PG_Types).find(k => {
|
|
2054
2374
|
return prostgles_types_1.TS_PG_Types[k].includes(udt_data_type) || !prostgles_types_1.TS_PG_Types[k].length;
|
|
@@ -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
|
}
|