class Supabase::Query

Defined in:

crystal-supabase/query.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new(client : Client, table : String) #

[View source]

Instance Method Detail

def conditions : Array(String) #

[View source]
def delete #

Executes a DELETE query

Returns response body as String Raises error if request fails.

Example:

response = client
  .from("users")
  .eq("id", "1")
  .delete

Bulk delete
response = client
  .from("users")
  .in_("id", [1, 2])
  .delete()
  .execute
puts response

[View source]
def eq(column : String, value : String) #

Adds equality filter: column = value

response = client
  .from("users")
  .select("*")
  .eq("role", "admin")
  .execute
puts response

[View source]
def execute : String #

Executes the current query on Supabase based on the operation type: SELECT, INSERT, UPDATE, UPSERT, or DELETE.

Returns the response body as a String. Raises an error if the request fails.


[View source]
def gt(column : String, value : String) #

Adds greater than filter: column > value

response = client
  .from("users")
  .select("*")
  .gt("age", "18")
  .execute
puts response

[View source]
def gte(column : String, value : String) #

Adds greater than or equal filter: column >= value

response = client
  .from("users")
  .select("*")
  .gte("score", "70")
  .execute
puts response

[View source]
def ilike(column : String, pattern : String) #

Adds ILIKE filter (case-insensitive LIKE)

response = client
  .from("articles")
  .select("*")
  .ilike("title", "%crystal%")
  .execute
puts response

[View source]
def in_(column : String, values : Array(String | Int)) #

Adds IN filter: column IN (values)

response = client
  .from("orders")
  .select("*")
  .in_("status", ["pending", "shipped"])
  .execute
puts response

[View source]
def insert(payload : String) #

Executes an INSERT query with the given JSON payload

Returns response body as String Raises error if request fails.

Example:

payload = %({"name": "Alice", "age": 30})
response = client
  .from("users")
  .insert(payload)
  .execute
puts response

Bulk insert
payload = %([
  {"id": 1, "name": "Bob"},
  {"id": 2, "name": "Charlie"}
])
response = client
  .from("users")
  .insert(payload)
  .execute
puts response

[View source]
def is_null(column : String, is_null : Bool = true) #

Adds IS NULL or IS NOT NULL filter

response = client
  .from("profiles")
  .select("*")
  .is_null("bio", true)
  .execute()
puts response

[View source]
def like(column : String, pattern : String) #
response = client
  .from("products")
  .select("*")
  .lte("price", "500")
  .execute
puts response

[View source]
def limit(count : Int32) #

Limits number of returned rows

response = client
  .from("logs")
  .select("*")
  .limit(10)
  .execute
puts response

[View source]
def lt(column : String, value : String) #

Adds less than filter: column < value

response = client
  .from("products")
  .select("*")
  .lt("price", "100")
  .execute
puts response

[View source]
def lte(column : String, value : String) #

Adds less than or equal filter: column <= value

response = client
  .from("products")
  .select("*")
  .lte("price", "500")
  .execute
puts response

[View source]
def neq(column : String, value : String) #

Adds inequality filter: column != value

response = client
  .from("users")
  .select("*")
  .neq("status", "inactive")
  .execute
puts response

[View source]
def not(column : String, operator : String, value : String) #

Adds NOT operator for custom filters

response = client
  .from("users")
  .select("*")
  .not("email", "like", "%@test.com")
  .execute
puts response

[View source]
def offset(count : Int32) #

Skips number of rows (offset)

response = client
  .from("logs")
  .select("*")
  .offset(20)
  .limit(10)
  .execute
puts response

[View source]
def order_asc(column : String) #

Sorts by column ascending

response = client
  .from("tasks")
  .select("*")
  .order_asc("created_at")
  .execute
puts response

[View source]
def order_desc(column : String) #

Sorts by column descending

response = client
  .from("tasks")
  .select("*")
  .order_desc("created_at")
  .execute
puts response

[View source]
def select(fields : String) #

Executes a SELECT query

Returns response body as String Raises error if request fails.

Example:

response = client
  .from("users")
  .select("*")
  .eq("active", "true")
  .execute
puts response

[View source]
def select_fields : String #

[View source]
def table : String #

[View source]
def update(payload : String) #

Executes an UPDATE query with the given JSON payload

Returns response body as String Raises error if request fails.

Example:

payload = %({"name": "Charlie"})
response = client
  .from("users")
  .eq("id", "1")
  .update(payload)
  .execute
puts response

[View source]
def upsert(payload : String, on_conflict : Array(String)) #

Executes an UPSERT query with conflict resolution on specified columns

Returns response body as String Raises error if request fails.

Example:

payload = %({"id": 1, "name": "Bob"})
response = client
  .from("users")
  .upsert(payload, ["id"])
  .execute
puts response

Bulk upsert
payload = %([
  {"id": 1, "name": "Bob"},
  {"id": 2, "name": "Charlie"}
])
response = client
  .from("users")
  .upsert(payload, ["id"])
  .execute
puts response

[View source]