{"ok": true, "database": "mytown-research", "query_name": "surveillance_company_family", "rows": [], "truncated": false, "columns": ["city", "state", "spend_date", "vendor", "product", "amount", "amount_type", "dup_rank", "geo_suspect", "anomaly", "quote", "source_document"], "query": {"sql": "WITH family_terms(family, term) AS (\n  VALUES\n    ('axon','axon'), ('axon','taser'), ('axon','evidence.com'),\n    ('axon','fusus'), ('axon','dedrone'), ('axon','vievu'),\n    ('motorola','motorola'), ('motorola','vigilant'),\n    ('motorola','avigilon'), ('motorola','watchguard'),\n    ('flock','flock'), ('flock','raven'), ('flock','condor'),\n    ('flock','aerodome'),\n    ('soundthinking','soundthinking'), ('soundthinking','shotspotter'),\n    ('soundthinking','crimetracer'), ('soundthinking','coplink'),\n    ('soundthinking','plateranger'),\n    ('magnet','magnet forensics'), ('magnet','graykey'),\n    ('magnet','grayshift'),\n    ('securus','securus'), ('securus','aventiv'),\n    ('viapath','viapath'), ('viapath','global tel'), ('viapath','gtl')\n)\nSELECT DISTINCT s.city, s.state_norm AS state, s.spend_date, s.vendor, s.product,\n       s.amount, s.amount_type, s.dup_rank, s.geo_suspect, s.anomaly,\n       s.quote, s.source_document\nFROM surveillance_spending AS s\nJOIN family_terms AS f\n  ON lower(COALESCE(s.vendor,'') || ' ' || COALESCE(s.product,'') || ' ' ||\n           COALESCE(s.quote,'')) LIKE '%' || f.term || '%'\nWHERE f.family = lower(:company)\n  AND (:state = '' OR s.state_norm = upper(:state))\n  AND (:from_date = '' OR s.spend_date >= :from_date)\nORDER BY s.state_norm, s.city, s.spend_date, s.vendor", "params": {"company": "", "state": "", "from_date": ""}}, "error": null, "private": false, "allow_execute_sql": true, "query_ms": 27.074840007117018, "source": "MyTown", "source_url": "https://mytown.theboringparts.com", "license": "CC BY 4.0", "license_url": "https://creativecommons.org/licenses/by/4.0/"}