On 3/25/2017 11:40 AM, Kyle Lahnakoski wrote:
Pavel, I like PythonQL. I perform a lot of data transformation, and often find Python's list comprehensions too limiting; leaving me wishing for LINQ-like language features. As an alternative to extending Python with PythonQL, Terry Reedy suggested interpreting a DSL string, and Pavel Velikhov alluded to using magic method tricks found in ORM libraries. I can see how both these are not satisfactory. A third alternative could be to encode the query clauses as JSON objects. For example:
PythonQL version
result = [ select (x, sum_y) for x in range(1,8), y in range(1,7) where x % 2 == 0 and y % 2 != 0 and x > y group by x let sum_y = sum(y) where sum_y % 2 != 0 ]
Someone mentioned the problem of adding multiple new keywords. Even 1 requires a proposal to meet a high bar; I think we average less than 1 new keyword per release in the last 20 years.
Searching '\bgroup\b' just in /lib (the 3.6 stdlib on Windows) gets over 300 code hits in about 30 files. I think this makes in ineligible to bere's match.group() accounts for many. 'select' has fair number of code uses also. I also see 'where', 'let', and 'by' in the above.
result = pq([ {"select":["x", "sum_y"]}, {"for":{"x": range(1,8), "y": range(1,7)}}, {"where": lambda x,y: x % 2 == 0 and y % 2 != 0 and x > y}, {"groupby": "x"}, {"with":{"sum_y":{"SUM":"y"}}, {"where": {"neq":[{"mod":["sum_y", 2]}, 0]}} ]) This representation does look a little lispy, and it may resemble PythonQL's parse tree. I think the benefits are: 1) no python language change 2) easier to parse 3) better than string-based DSL for catching syntax errors 4) {"clause": parameters} format is flexible for handling common query patterns ** 5) works in javascript too 6) easy to compose with automation (my favorite) It is probably easy for you to see the drawbacks.
-- Terry Jan Reedy _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/