elgris / sqrl Goto Github PK
View Code? Open in Web Editor NEWThis project forked from masterminds/squirrel
Fluent SQL generation for golang
License: MIT License
This project forked from masterminds/squirrel
Fluent SQL generation for golang
License: MIT License
Hi,
I was wondering whether you'd be interested in upgrading sqrl to support Go 1.11 modules?
I think it's fairly straight-forward to do from the instructions here: https://github.com/golang/go/wiki/Modules#quick-start-example
Because it involves tagging and committing the package name I've not submitted a PR but give me a shout if you want help setting this up :-)
Currently only Where
method accepts args
as placeholder values
func (b *SelectBuilder) Where(pred interface{}, args ...interface{}) *SelectBuilder {
b.whereParts = append(b.whereParts, newWherePart(pred, args...))
return b
}
Other methods like GroupBy
can not accept placeholdered data
// GroupBy adds GROUP BY expressions to the query.
func (b *SelectBuilder) GroupBy(groupBys ...string) *SelectBuilder {
b.groupBys = append(b.groupBys, groupBys...)
return b
}
Please add placeholders support to these methods to provide means for building rich SQL statements.
When trying to build since commit 2178fbc I get this error:
../../../github.com/elgris/sqrl/stmtcacher.go:61: stmt.ExecContext undefined (type *sql.Stmt has no field or method ExecContext)
../../../github.com/elgris/sqrl/stmtcacher.go:61: not enough arguments to return
../../../github.com/elgris/sqrl/stmtcacher.go:69: stmt.QueryContext undefined (type *sql.Stmt has no field or method QueryContext)
../../../github.com/elgris/sqrl/stmtcacher.go:69: not enough arguments to return
../../../github.com/elgris/sqrl/stmtcacher.go:77: stmt.QueryRowContext undefined (type *sql.Stmt has no field or method QueryRowContext)
../../../github.com/elgris/sqrl/stmtcacher.go:109: cannot use db (type *sql.DB) as type Preparer in argument to NewStmtCacher:
*sql.DB does not implement Preparer (missing PrepareContext method)
Hi,
Is there support for dynamic where clauses? I could not find any documentation about how to do that. In my case I need to add AND'd conditions with nested OR conditions conditionally, to get something like:
WHERE x=? AND (foo>=? OR bar> ?) AND (bar> ?)
I've tried to create an []sq.Sqlizer
and add the OR-expressions in there, then feed that to SelectBuilder.Where()
but it fails with the message
converting Exec argument # 1's type: unsupported type []sqrl.Sqlizer, a slice
Ideally there is some kind of ConditionBuilder for this I guess.
Currently it is impossible to fully unit test code that is using sqrl since Query
method requires *sql.Rows
as return value. I am proposing to add RowsScanner interface that would allow *sql.Rows
to be replaced by another struct that implements required methods.
type Queryer interface {
Query(query string, args ...interface{}) (RowsScanner, error)
}
As far as I can tell, RowsScanner could look something like this:
type RowsScanner interface {
Columns() ([]string, error)
Next() bool
Close() error
Err() error
RowScanner
}
For example: DELETE a FROM A a JOIN B b ON a.c = b.c ....
sqrl.Delete("s").From("A a").Join("B b ON a.c = b.c). ...
Due to delete statement builder handling in sqrl.Delete(...), if only a single element (remains after filtering) it is pushed to the From-part instead. Causing an invalid query to be generated at least for MySQL: DELETE FROM A a JOIN B b ON a.c = b.c ....
It would be nice to tell sqrl to escape column names for example "status" is a reserved symbol in mysql.
users := sq.Select("status").From("users").Join("emails USING (email_id)")
fmt.Println(users.ToSql())
output is:
SELECT status FROM users JOIN emails USING (email_id) [] <nil>
should be:
SELECT `status` FROM users JOIN emails USING (email_id) [] <nil>
Executing QueryRow() against a SelectBuilder doesn't work for MySQL, because it is not a QueryRower.
Allow a context.Context be passed into Query(...) and QueryRow(...) etc.
Currently you are not able to create a delete statement, to delete from multiple tables, like in mysql documentation described: http://dev.mysql.com/doc/refman/5.7/en/delete.html#idm140368126356160
Is it possible to implement it?
Adding PrefixExp and SuffixExp to allow more complex prefix expressions to be easily built in line, rather than having to create a seperate subquery builder, build the sql, and then use that as arguments to .Prefix(sql, args...). The code to be included will be from squirrel package.
The query params inside a FromSelect are numbered independently from the whole query, so:
psql.Update(`mytable`).
Set("name", "newname").
FromSelect(psql.Select("column").From("anothertable").Where(sq.Eq{"column": 3})).
Where(sq.Eq{"name": "oldname"})
Args will be ["newname", "oldname", 3], but query string will be:
update mytable set name = $1
select column from anothertable where column = $1
where name = $2
Correct should be:
update mytable set name = $1
select column from anothertable where column = $3
where name = $2
FromSelect should change the placeholder count to start from where the parent Update ends
Hello to everyone:
I know that sqrl is not thread safe, but: In a webservice context, What if on every request a cached pointer to an SelectBuilder is dereferenced and assigned to a variable?
Something like this:
var sqlSelect sqrl.Select("*").From("users") // *sqr.SelectBuilder
.
.
.
func calledOnEveryRequest() (error) {
query := *sqlSelect // Is "query" a completely new copy (deep copy) of sqlSelect value?
.
.
.
}
Many thanks in advance.
These methods were a recent addition and I found about it when i was migrating to sqrl these were missing. It's not a big deal, but since this has the same interface, I thought it'd be nice to have them. I will make a PR with those added.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.