Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
pkg query: Allow using the `?' operator in expressions.
Alexandre Perrin committed 12 years ago
commit 1a128de43e8c02ca1e786a38d00bf8b949c688c0
parent 8270a41
1 file changed +15 -13
modified pkg/query.c
@@ -494,53 +494,55 @@ format_sql_condition(const char *str, struct sbuf *sqlcond, bool for_remote)
					sbuf_cat(sqlcond, "desc");
					state = OPERATOR_STRING;
					break;
-
				case '#':
+
				case '#': /* FALLTHROUGH */
+
				case '?':
					str++;
					const char *dbstr = for_remote ? "%1$s." : "";
+
					const char *sqlop = (str[0] == '#' ? "COUNT(*)" : "COUNT(*) > 0");
					switch (str[0]) {
						case 'd':
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %sdeps AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %sdeps AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'r':
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %sdeps AS d WHERE d.origin=p.origin)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %sdeps AS d WHERE d.origin=p.origin)", sqlop, dbstr);
							break;
						case 'C':
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %spkg_categories AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %spkg_categories AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'F':
							if (for_remote)
								goto bad_option;
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %sfiles AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %sfiles AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'O':
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %soptions AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %soptions AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'D':
							if (for_remote)
								goto bad_option;
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %spkg_directories AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %spkg_directories AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'L':
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %spkg_licenses AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %spkg_licenses AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'U':
							if (for_remote)
								goto bad_option;
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %spkg_users AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %spkg_users AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'G':
							if (for_remote)
								goto bad_option;
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %spkg_groups AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %spkg_groups AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'B':
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %spkg_shlibs_required AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %spkg_shlibs_required AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'b':
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %spkg_shlibs_provided AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %spkg_shlibs_provided AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						case 'A':
-
							sbuf_printf(sqlcond, "(SELECT COUNT(*) FROM %spkg_annotation AS d WHERE d.package_id=p.id)", dbstr);
+
							sbuf_printf(sqlcond, "(SELECT %s FROM %spkg_annotation AS d WHERE d.package_id=p.id)", sqlop, dbstr);
							break;
						default:
							goto bad_option;