{"push_id":1441984002,"size":4,"distinct_size":1,"ref":"refs/heads/master","head":"1ad87c2b96604ac38ab4f5080f7f2f0a6f5a883c","before":"05d38e98246773594ea633b2a1a228c7aeceba7a","commits":[{"sha":"8be64614799b6e457d61500285487feb39a688e3","author":{"name":"Colin J. Fuller","email":"43f333d9b027c18a5e761f9958c98c72d9d252fd@khanacademy.org"},"message":"Implement parsing of multi-way joins\n\nSummary:\nMany of our queries that we want to test use multi-way joins, but tinyquery only\nsupports two-way joins.  This revision is the parser part of an implementation\nof multi-way joins.  I set it up so that a join is now a single ast node type\nfor all kinds of joins, consisting of a single left-hand-side expression (the\nFROM part) and a list of one or more right hand side expressions, called\n\"partial joins\" (the JOIN table ON condition) part.  Each partial join has a\ntable expression, a type (INNER, LEFT OUTER, or CROSS), and for non-cross joins,\na condition.\n\nNote that this revision is not intended to ship by itself, as it breaks two-way\njoins in the compiler and evaluator, but I've split this out since it's\nrelatively self-contained.\n\nTest Plan: - `PYTHONPATH=. ../webapp/tools/runtests.py parser_test`\n\nReviewers: samantha\n\nReviewed By: samantha\n\nSubscribers: tom\n\nDifferential Revision: https://phabricator.khanacademy.org/D32037","distinct":false,"url":"https://api.github.com/repos/Khan/tinyquery/commits/8be64614799b6e457d61500285487feb39a688e3"},{"sha":"538f5ab10eca257b52480e441b7cab234f760bfb","author":{"name":"Colin Fuller","email":"43f333d9b027c18a5e761f9958c98c72d9d252fd@khanacademy.org"},"message":"Implement compilation of multi-way joins\n\nSummary:\nIn a previous revision, I implemented parsing of joins between more than two\ntables.  However, we still lacked the compilation and evaluation stages, and\nmoreover, we broke the old two-way joins because they too were represented as\nmutli-way joins.\n\nThis revision implements compilation of multi-way joins.  The implementation was\nrelatively straightforward, and consisted mainly of changing functions that\nacted on two tables to instead act on an arbitrarily-sized array of them.  We\nalso needed, instead of having a single type parameter for the entire join, to\ntrack a join type for each component in the join, since this could potentially\nbe different for each.\n\nThis is still not yet shippable because we haven't implemented the evaluation\nstage, but that will be coming in a separate diff.\n\nTest Plan: `python -m unittest compiler_test`\n\nReviewers: samantha\n\nReviewed By: samantha\n\nSubscribers: tom\n\nDifferential Revision: https://phabricator.khanacademy.org/D32211","distinct":false,"url":"https://api.github.com/repos/Khan/tinyquery/commits/538f5ab10eca257b52480e441b7cab234f760bfb"},{"sha":"0f92250596ec5fac22daf11bbaeb9744a5326f00","author":{"name":"Colin Fuller","email":"43f333d9b027c18a5e761f9958c98c72d9d252fd@khanacademy.org"},"message":"Implement evaluation of multi-way joins\n\nSummary:\nThis is the final in the series of diffs implementing multiple-way joins.  The\nmain change here is that for multi-part joins, I just iterate through the list\nof right-hand-sides and then at each step, set the left-hand side to be the\nresult of the previous join.\n\nI also had to make a couple of changes to the compiler:\n1. I needed not to flatten the list of join conditions, and instead have exactly\n   one list of (one or more) conditions for that join; otherwise, it was\n   difficult to figure out which condition to process with which join.\n2. I needed to pass the join type to the function that compiles the join\n   conditions, since cross joins are now a unified concept, and those don't have a\n   condition (they give [None] for the condition)\n\nI also fixed a bug in the compiler where it could choose the wrong aliased table\nif there were two aliases in the same join with the same prefix (which happens\nto occur in the evaluator test).\n\nTest Plan: `python -m unittest compiler_test evaluator_test`\n\nReviewers: samantha\n\nReviewed By: samantha\n\nSubscribers: tom\n\nDifferential Revision: https://phabricator.khanacademy.org/D32382","distinct":false,"url":"https://api.github.com/repos/Khan/tinyquery/commits/0f92250596ec5fac22daf11bbaeb9744a5326f00"},{"sha":"1ad87c2b96604ac38ab4f5080f7f2f0a6f5a883c","author":{"name":"Colin Fuller","email":"43f333d9b027c18a5e761f9958c98c72d9d252fd@khanacademy.org"},"message":"Merge branch 'multi_way_joins'\n\nConflicts:\n\tcompiler_test.py\n\tevaluator.py","distinct":true,"url":"https://api.github.com/repos/Khan/tinyquery/commits/1ad87c2b96604ac38ab4f5080f7f2f0a6f5a883c"}]}
{"actor":{"display_login":"cjfuller"}}