summaryrefslogtreecommitdiff
path: root/src/clojure_sql/core.clj
AgeCommit message (Collapse)Author
2013-11-25Remove a stupid testing thing, update the README a touchCarlo Zancanaro
2013-11-25Add a 'distinct' operator - still a bug to fix on renamingCarlo Zancanaro
2013-11-12Change the query executor model: now it's query local and the interface is ↵Carlo Zancanaro
managed by a protocol.
2013-09-29Remove `having` from the lsit of vars to pull into core (should have been on ↵Carlo Zancanaro
earlier commit).
2013-07-12Remove some scrap code that got committed accidentallyCarlo Zancanaro
2013-07-12Expose a few more helper functions in clojure-sql.coreCarlo Zancanaro
2013-07-01Remove some extra code that was left sitting aroundCarlo Zancanaro
2013-06-23Misc changes.Carlo Zancanaro
2013-06-22Docstrings, one function call change, README update.Carlo Zancanaro
In the compiler there was one call to `table-name` which should have been `field-name`.
2013-06-21Docstrings, re-export from core better (with metadata)Carlo Zancanaro
2013-06-21Add take/drop, move jdbc stuff, document default of postgresCarlo Zancanaro
Add take and drop functionality to the queries, so now you can use the take and drop functions in a similar way to how they work on seqs in clojure. Move jdbc interface stuff into clojure-sql.jdbc, so if you're using jdbc you can include it yourself. (If you're not using jdbc then it shouldn't bother you). Given the default compilation target is actually postgres, document that.
2013-06-20Well, that didn't work. Whatever.Carlo Zancanaro
2013-06-20Fix updates, add "use-jdbc!" function to core.Carlo Zancanaro
2013-06-20Make core nicer, pass the "type" of query to executorsCarlo Zancanaro
2013-06-20Clean up the query deref, make insert!, update! and delete! workCarlo Zancanaro
2013-06-20Fix compiling of n-ary operators (0 & 1 args), add operator aliasesCarlo Zancanaro
n-ary operators with no arguments would break everything (compiling to "()"). This should no longer be the case. Additionally, unary operators (ie. negation) now compile properly in the one arg case. Operator aliases allow us to change how we refer to things like the "~" regex operator in postgresql. At the moment it's aliased as "$". Additionally: booleans now compile to upper case.
2013-06-20A few small changes/fixes to join behaviour, and code cleanupCarlo Zancanaro
Fix compilation of cross joins. Remove the sort clauses on queries when they become subqueries in joins because then the sorting means nothing (although when take/drop stuff is added the sort will be relevant, so we'll see about that). Favour the left side of a join, which is mostly only relevant for the outer join case (and technically it's not quite right for full-outer joins, maybe, but I'll get to that later).
2013-06-13Starting a re-write of the DSL, to be followed by the compiler.Carlo Zancanaro
Flip around field/table aliases, do joins a bit differently. They're my main aims at the moment! I'll also add a preprocessor for the compiler to massage it into a nicer form there. I discovered that joins can be done with a pretty sweet syntax in SQL: (tableA LEFT JOIN tableB) RIGHT JOIN tableC This is pretty much perfect for my purposes. Flipping alias maps just makes more sense and removes a whole bunch of `flip-map` calls that would be unnecessary if the aliases were the other way around. The user-facing side of the DSL will be left unchanged, though. The user provides an `{old-name new-name}` map and internally we convert that into `{new-name old-name}`. Like magic. I'm also adding a bunch more tests. Hopefully that will make things more likely to work for long periods of time. Peace out!
2013-05-23Simplify the compiler, better subquery supportCarlo Zancanaro
The compiler's been simplified a bit by breaking out the `writer` stuff into its own namespace and by generally making the monadic stuff better. It's all hidden behind a nice, simple, `clojure-sql.compiler/compile` function now. Call that and you'll get back what you need. (Internally it's a writer monad which is really modelled as a state monad with the only operation able to be performed on the state being `tell`.) Subqueries are now handled by the DSL in such a way as to not blow up everything. Subqueries have no support for referencing values in the superquery, though, so their utility is quite limited at present. Thinking about how to do subqueries properly may be difficult.
2013-05-15Split out core into compiler/dsl/query.Carlo Zancanaro
The query namespace really only exists because I didn't want to put it in dsl, but I couldn't put it in core without a circular dependency. Users should only have to :require core to do things, though. It just aliases other stuff to make that work.
2013-05-15Update readme, add stubs, make two vars private.Carlo Zancanaro
2013-05-15Remove two bits of code that were lying around from experimentingCarlo Zancanaro
2013-05-15Fix query printing, operators, make joins better (also implicit on clause)Carlo Zancanaro
Queries now print out their `compile-query` output when they are printed, rather than complaining about `print-method`. This is completely a better idea, so whoo! Operators now compile more nicely, and SQL functions can be used too. So stuff like (substring :name 1 3) will work for getting the first three letters of the :name field. Joins now handle outer stuff more nicely, and compile to "INNER JOIN" rather than just "JOIN" (they're the same in SQL, but this makes the intent more clear). Additionally, joins now automatically add an equality constraint to fields which are aliased the same. So if two relations have shared fields then (join rel1 rel2) will give the natural join of the two relations (an on clause can still be provided, but it will be put in a conjunction with the implicit one). If the implicit on is generated for an OUTER join then the duplicate field which cannot be NULL is the one which will be selected (for INNER joins, or joins without an implicit on, there is no ambiguity).
2013-05-15Change some error reporting stuff. Nothing major.Carlo Zancanaro
2013-05-14Fix precondition on renameCarlo Zancanaro
The precondition was too strong. Loosen it just enough to make the function useful in all the ways it should be without allowing bad cases through.
2013-05-14join and rename preconditions removing ambiguity, `on` now optionalCarlo Zancanaro
`join` and `rename` both had the ability to introduce some ambiguity, whether by renaming two fields to the same alias (which one should use that alias?) or by joining two fields with the same alias (which one should use it?). Some preconditions have been added to warn against some ambiguous use cases (although I have just now realised the rename precondition is insufficient, so a new commit will be coming soon).
2013-05-14Throw a nicer exception on ambiguous field, also some cleanupCarlo Zancanaro
2013-05-14Parametrise deref behaviour, add two small tests.Carlo Zancanaro
Now a user can decide what the query's behaviour on deref should be. This means a user using jdbc can plug in with (set-query-deref-behaviour! #(... jdbc-query-code-here ...)) if they want, but if a user wants to use the code for something else then they can do so without needing to import jdbc stuff. (I'll admit I'm not sure what else they'd do with it, but that's slightly beside the point.) Still left to do is to provide a helper for the common case (performing an SQL query with jdbc).
2013-05-14Apparently I got the jdbc query syntax wrong. Corrected.Carlo Zancanaro
The parameters should be passed in the `rest` of the vector, not as a separate seq. My bad.
2013-05-14Fix ordering issue, split out string parameters for jdbc stuffCarlo Zancanaro
The string parameters are now put in the query as a '?' and the string which should go in their place is now placed in an auxiliary list when the query is constructed. This should make it easier to avoid SQL injection stuff. (Although table/column names are still vulnerable to SQL injection, they should not be dynamic so the issue should be minimal.) There was also another issue where some things were used before they were declared (as a result of repl development) which has now been corrected.
2013-05-14Most of the RA stuff works now.Carlo Zancanaro
Need to fix up the compilation to return a query ready for value substitution by the jdbc stuff, or something (rather than embedding parameters in the query). Also need to add insert!, update! and delete! functions.
2013-04-27Initial commit.Carlo Zancanaro