{"action":"created","issue":{"url":"https://api.github.com/repos/quasar-analytics/quasar/issues/1319","repository_url":"https://api.github.com/repos/quasar-analytics/quasar","labels_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/1319/labels{/name}","comments_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/1319/comments","events_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/1319/events","html_url":"https://github.com/quasar-analytics/quasar/pull/1319","id":168734778,"number":1319,"title":"Support for Mongo 3.2 pipeline ops with type safety","user":{"login":"mossprescott","id":6147371,"avatar_url":"https://avatars.githubusercontent.com/u/6147371?v=3","gravatar_id":"","url":"https://api.github.com/users/mossprescott","html_url":"https://github.com/mossprescott","followers_url":"https://api.github.com/users/mossprescott/followers","following_url":"https://api.github.com/users/mossprescott/following{/other_user}","gists_url":"https://api.github.com/users/mossprescott/gists{/gist_id}","starred_url":"https://api.github.com/users/mossprescott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mossprescott/subscriptions","organizations_url":"https://api.github.com/users/mossprescott/orgs","repos_url":"https://api.github.com/users/mossprescott/repos","events_url":"https://api.github.com/users/mossprescott/events{/privacy}","received_events_url":"https://api.github.com/users/mossprescott/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/quasar-analytics/quasar/labels/ready","name":"ready","color":"009800"}],"state":"open","locked":false,"assignee":{"login":"wemrysi","id":32185,"avatar_url":"https://avatars.githubusercontent.com/u/32185?v=3","gravatar_id":"","url":"https://api.github.com/users/wemrysi","html_url":"https://github.com/wemrysi","followers_url":"https://api.github.com/users/wemrysi/followers","following_url":"https://api.github.com/users/wemrysi/following{/other_user}","gists_url":"https://api.github.com/users/wemrysi/gists{/gist_id}","starred_url":"https://api.github.com/users/wemrysi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wemrysi/subscriptions","organizations_url":"https://api.github.com/users/wemrysi/orgs","repos_url":"https://api.github.com/users/wemrysi/repos","events_url":"https://api.github.com/users/wemrysi/events{/privacy}","received_events_url":"https://api.github.com/users/wemrysi/received_events","type":"User","site_admin":false},"assignees":[{"login":"wemrysi","id":32185,"avatar_url":"https://avatars.githubusercontent.com/u/32185?v=3","gravatar_id":"","url":"https://api.github.com/users/wemrysi","html_url":"https://github.com/wemrysi","followers_url":"https://api.github.com/users/wemrysi/followers","following_url":"https://api.github.com/users/wemrysi/following{/other_user}","gists_url":"https://api.github.com/users/wemrysi/gists{/gist_id}","starred_url":"https://api.github.com/users/wemrysi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wemrysi/subscriptions","organizations_url":"https://api.github.com/users/wemrysi/orgs","repos_url":"https://api.github.com/users/wemrysi/repos","events_url":"https://api.github.com/users/wemrysi/events{/privacy}","received_events_url":"https://api.github.com/users/wemrysi/received_events","type":"User","site_admin":false}],"milestone":null,"comments":6,"created_at":"2016-08-01T20:28:51Z","updated_at":"2016-08-02T16:04:06Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/quasar-analytics/quasar/pulls/1319","html_url":"https://github.com/quasar-analytics/quasar/pull/1319","diff_url":"https://github.com/quasar-analytics/quasar/pull/1319.diff","patch_url":"https://github.com/quasar-analytics/quasar/pull/1319.patch"},"body":"Supercedes #1303 and closes #1270.\r\n\r\n`WorkflowF` is replaced by a group of related types:\r\n- `WorkflowOpCoreF`, containing all the old ops (aliased as `Workflow2_6F`)\r\n- `WorkflowOp3_2F`, containing `$lookup` and `$sample`\r\n- `WorkflowF`, which is a coproduct of the two types (aliased as `Workflow3_2F`)\r\n\r\nWorkflowBuilder, `optimize` and the MongoDB planner are all parameterized so that either the 2.6 or 3.2 type may be used. When a query is to be evaluated, the backend version is interrogated to determine which type to use.\r\n\r\nWhen the workflow is \"crushed\" to `WorkflowTask`, this information is lost and the executors always see the largest coproduct type.\r\n\r\nIn this commit, the new type is used when running against 3.2 or later, but the new ops are never actually generated and the only difference is whether ops are injected into the coproduct or not.\r\n\r\nSome significant re-arranging was required, but it was mostly superficial:\r\n- many functions over `Workflow` have become typeclasses. This results in several single-function typeclasses; some consolidation might be in order.\r\n- ops no longer inherit from the traits `SingleSourceF`, `PipelineF`, and `ShapePreservingF`. Instead, instances of those traits are available as wrappers around the actual ops (which may be embeddind in a coproduct).\r\n- there are now \"convenience\" extractors for each op type, which project from any suitable coproduct.\r\n- most of the public API of WorkflowBuilder is now packaged in an `Ops` class which captures the workflow type `F`.\r\n- the op case classes all got a `F` suffix to avoid a compiler warning about name collisions on case-insensitive file systems. This is our convention for fixpoint types anyway."},"comment":{"url":"https://api.github.com/repos/quasar-analytics/quasar/issues/comments/236952957","html_url":"https://github.com/quasar-analytics/quasar/pull/1319#issuecomment-236952957","issue_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/1319","id":236952957,"user":{"login":"wemrysi","id":32185,"avatar_url":"https://avatars.githubusercontent.com/u/32185?v=3","gravatar_id":"","url":"https://api.github.com/users/wemrysi","html_url":"https://github.com/wemrysi","followers_url":"https://api.github.com/users/wemrysi/followers","following_url":"https://api.github.com/users/wemrysi/following{/other_user}","gists_url":"https://api.github.com/users/wemrysi/gists{/gist_id}","starred_url":"https://api.github.com/users/wemrysi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wemrysi/subscriptions","organizations_url":"https://api.github.com/users/wemrysi/orgs","repos_url":"https://api.github.com/users/wemrysi/repos","events_url":"https://api.github.com/users/wemrysi/events{/privacy}","received_events_url":"https://api.github.com/users/wemrysi/received_events","type":"User","site_admin":false},"created_at":"2016-08-02T16:04:06Z","updated_at":"2016-08-02T16:04:06Z","body":"Well, one clean build and the others appear to have stalled, not fail plus your local success, so I'll go ahead and merge."}}
{"actor":{"display_login":"wemrysi"}}