- /* TODO allow more args to nail down version and release */
- if (ac >= 3) {
- sprintf(sql, "%s where package = '%s' %s;",
- select, av[2], group);
- } else {
- sprintf(sql, "%s %s;", select, group);
+ excludes = sqlite3_str_value(exclude);
+ includes = sqlite3_str_value(include);
+
+ sqlite3_str_appendall(query, " ");
+ sqlite3_str_appendall(query, select);
+ sqlite3_str_appendall(query, " where true");
+
+ if (includes) {
+ sqlite3_str_appendf(query, " and status in (%s)", includes+1);
+ }
+ if (excludes) {
+ sqlite3_str_appendf(query, " and status not in (%s)", excludes+1);
+ }
+
+ if (ac >= argn) {
+ int release;
+ char version[32];
+ char package[32];
+
+ pkgstr = av[argn];
+
+ parse_package(pkgstr, package, version, &release);
+ if (*package != 0) {
+ sqlite3_str_appendf(query, " and package = %Q",
+ package);
+ }
+ if (*version != 0) {
+ sqlite3_str_appendf(query, " and version = %Q",
+ version);
+ }
+ if (release != -1) {
+ sqlite3_str_appendf(query, " and release = %d",
+ release);
+ }