#Dynamic funtion in convex

1 messages · Page 1 of 1 (latest)

lofty steppe
#

how can ı write this codes's convex funtion ?

`query = "SELECT * FROM flights WHERE 1 = 1"
params = []

if departure_airport:
    query += " AND departure_airport = ?"
    params.append(departure_airport)

if arrival_airport:
    query += " AND arrival_airport = ?"
    params.append(arrival_airport)

if start_time:
    query += " AND scheduled_departure >= ?"
    params.append(start_time)

if end_time:
    query += " AND scheduled_departure <= ?"
    params.append(end_time)`
drowsy patio
#

When running this hypothetical sql query, what index(es) are on the flights table?

#

If there are no indexes, the equivalent Convex code would use filter https://stack.convex.dev/complex-filters-in-convex

const query = filter(ctx.db.query("flights"), (flight) => {
  if (departure_airport && departure_airport !== flight.departure_airport) return false;
  if (arrival_airport && arrival_airport !== flight.arrival_airport) return false;
  if (start_time && start_time > flight.scheduled_departure) return false;
  ... etc ...
  return true;
});
Stack

There’s a new Convex helper to perform generic TypeScript filters, with the same performance as built-in Convex filters, and unlimited potential.

lofty steppe
#

when ı tried without indexes getting limit error so ı added index but no idea for with indexes:

flights: defineTable({ actual_arrival: v.union(v.null(), v.string()), actual_departure: v.union(v.null(), v.string()), aircraft_code: v.string(), arrival_airport: v.string(), departure_airport: v.string(), flight_id: v.float64(), flight_no: v.string(), scheduled_arrival: v.string(), scheduled_departure: v.string(), status: v.string(), }).index("by_departure_airport", ["departure_airport"]) .index("by_arrival_airport", ["arrival_airport"]) .index("by_actual_departure", ["actual_departure"]) .index("by_actual_arrival", ["actual_arrival"]), })