On Thu, Apr 18, 2024, 15:37 Dave Page <dp...@pgadmin.org> wrote: > Hi > > On Thu, 18 Apr 2024 at 15:26, Anil Sahoo <anil.sa...@enterprisedb.com> > wrote: > >> Hi Dave, >> We took help from Code Mirror, i.e Code Mirror gives the parsed SQL from >> the editor through a tree called syntaxTree and by using some logic we >> extracted the statements which have semicolon in it and also added some >> extra logic to break the whole query on next of next line as empty or if >> comments are there. >> >> Using all this logic we got the individual queries and checked where our >> cursor is in editor and checked with the query and through this we got the >> actual query at cursor position. >> >> For example, >> >> 1. if the cursor is at starting or ending position or anywhere in >> between a query with semicolon or without semicolon, that can be single >> line or multi line then the query gets extracted. >> 2. if the cursor is at starting or ending position or anywhere in >> between a comment that can be single line or multi line then the comment >> gets extracted. >> 3. if the cursor is at a position where the previous line has a query >> then that query gets extracted. >> >> For the anonymous block containing multiple queries, code mirror gives >> the statements differently. That is an incomplete query we can say, so the >> query tool gives error. We can say some limitations are there with Code >> Mirror. >> >> Please let me know if you have any questions on this. >> > > My main concern is that it doesn't get it wrong. Ever. Consider: > > DELETE FROM foo; SELECT * FROM foo; > > Is that one statement or two? What if it's in the middle of a pl/python3 > function: > > my_sql = 'DELETE FROM foo; SELECT * FROM foo;' > > or > > my_sql = """DELETE FROM foo; > SELECT * FROM foo; > """ >
Or, indeed, an SQL function. Would the user want the CREATE statement to be run, or just the embedded SQL statement? I wouldn't like to guess. Thom