{"action":"created","issue":{"url":"https://api.github.com/repos/tpolecat/doobie/issues/164","labels_url":"https://api.github.com/repos/tpolecat/doobie/issues/164/labels{/name}","comments_url":"https://api.github.com/repos/tpolecat/doobie/issues/164/comments","events_url":"https://api.github.com/repos/tpolecat/doobie/issues/164/events","html_url":"https://github.com/tpolecat/doobie/issues/164","id":76922965,"number":164,"title":"specs2 check fails inappropriately under JOIN circumstances","user":{"login":"kryptt","id":107965,"avatar_url":"https://avatars.githubusercontent.com/u/107965?v=3","gravatar_id":"","url":"https://api.github.com/users/kryptt","html_url":"https://github.com/kryptt","followers_url":"https://api.github.com/users/kryptt/followers","following_url":"https://api.github.com/users/kryptt/following{/other_user}","gists_url":"https://api.github.com/users/kryptt/gists{/gist_id}","starred_url":"https://api.github.com/users/kryptt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kryptt/subscriptions","organizations_url":"https://api.github.com/users/kryptt/orgs","repos_url":"https://api.github.com/users/kryptt/repos","events_url":"https://api.github.com/users/kryptt/events{/privacy}","received_events_url":"https://api.github.com/users/kryptt/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/tpolecat/doobie/milestones/6","html_url":"https://github.com/tpolecat/doobie/milestones/0.2.3","labels_url":"https://api.github.com/repos/tpolecat/doobie/milestones/6/labels","id":1086694,"number":6,"title":"0.2.3","description":"","creator":{"login":"tpolecat","id":1200131,"avatar_url":"https://avatars.githubusercontent.com/u/1200131?v=3","gravatar_id":"","url":"https://api.github.com/users/tpolecat","html_url":"https://github.com/tpolecat","followers_url":"https://api.github.com/users/tpolecat/followers","following_url":"https://api.github.com/users/tpolecat/following{/other_user}","gists_url":"https://api.github.com/users/tpolecat/gists{/gist_id}","starred_url":"https://api.github.com/users/tpolecat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tpolecat/subscriptions","organizations_url":"https://api.github.com/users/tpolecat/orgs","repos_url":"https://api.github.com/users/tpolecat/repos","events_url":"https://api.github.com/users/tpolecat/events{/privacy}","received_events_url":"https://api.github.com/users/tpolecat/received_events","type":"User","site_admin":false},"open_issues":10,"closed_issues":4,"state":"open","created_at":"2015-04-28T03:41:58Z","updated_at":"2015-06-16T05:28:54Z","due_on":"2015-07-31T07:00:00Z","closed_at":null},"comments":2,"created_at":"2015-05-16T02:24:51Z","updated_at":"2015-06-18T14:20:08Z","closed_at":null,"body":"```\r\n[info] Query0[User.ViewUserRoles] defined at user-queries.scala:87\r\n[info]   SELECT r.id, r.code\r\n[info]   FROM core.users u LEFT JOIN core.resource_roles(?) ur ON true\r\n[info]   LEFT JOIN core.roles r ON ur.role_id = r.id\r\n[info]   WHERE u.id = ?\r\n[error]    x Non-nullable column ID is unnecessarily mapped to an Option type. (user-queries.scala:87)\r\n[info] \r\n[info] x C09 code       VARCHAR   (varchar)    NOT NULL  →  Option[String]\r\n[error]    x Non-nullable column CODE is unnecessarily mapped to an Option type. (user-queries.scala:87)\r\n```\r\n\r\nIt happens that these columns can show up as null even though they are non-null at the table level since they come from a LEFT JOIN."},"comment":{"url":"https://api.github.com/repos/tpolecat/doobie/issues/comments/113170965","html_url":"https://github.com/tpolecat/doobie/issues/164#issuecomment-113170965","issue_url":"https://api.github.com/repos/tpolecat/doobie/issues/164","id":113170965,"user":{"login":"refried","id":538571,"avatar_url":"https://avatars.githubusercontent.com/u/538571?v=3","gravatar_id":"","url":"https://api.github.com/users/refried","html_url":"https://github.com/refried","followers_url":"https://api.github.com/users/refried/followers","following_url":"https://api.github.com/users/refried/following{/other_user}","gists_url":"https://api.github.com/users/refried/gists{/gist_id}","starred_url":"https://api.github.com/users/refried/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/refried/subscriptions","organizations_url":"https://api.github.com/users/refried/orgs","repos_url":"https://api.github.com/users/refried/repos","events_url":"https://api.github.com/users/refried/events{/privacy}","received_events_url":"https://api.github.com/users/refried/received_events","type":"User","site_admin":false},"created_at":"2015-06-18T14:20:08Z","updated_at":"2015-06-18T14:20:08Z","body":"Found this gem in the docs for `java.sql.DatabaseMetaData`.  Is that the API that doobie uses?\r\n\r\n```\r\nstatic short\tattributeNoNulls   Indicates that NULL values might not be allowed.\r\nstatic short\tattributeNullable  Indicates that NULL values are definitely allowed.\r\n```\r\n\r\n\"no nulls\" means \"maybe no nulls\""}}