Home / File/ query.ts — drizzle-orm Source File

query.ts — drizzle-orm Source File

Architecture documentation for query.ts, a typescript file in the drizzle-orm codebase. 7 imports, 0 dependents.

File typescript DrizzleORM QueryBuilders 7 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4["query.ts"]
  143ae12b_ee90_0583_ca71_70602b28741f["expo-sqlite"]
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4 --> 143ae12b_ee90_0583_ca71_70602b28741f
  d4d235b8_5320_ab49_32b1_655b9b8a9a32["react"]
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4 --> d4d235b8_5320_ab49_32b1_655b9b8a9a32
  27705a9d_afe9_57dd_8c97_e52d8a67d426["entity.ts"]
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4 --> 27705a9d_afe9_57dd_8c97_e52d8a67d426
  be483a7f_d5d7_7a9b_9a13_44a4a6aafbbd["sql.ts"]
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4 --> be483a7f_d5d7_7a9b_9a13_44a4a6aafbbd
  c9460fa2_b68e_584b_2be3_a4db38ea6f7c["index.ts"]
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4 --> c9460fa2_b68e_584b_2be3_a4db38ea6f7c
  348331c0_e3b7_152b_0e5c_e64fb42ff3c8["query.ts"]
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4 --> 348331c0_e3b7_152b_0e5c_e64fb42ff3c8
  4d55618d_fa7b_8e54_edb2_b85ae393d95b["subquery.ts"]
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4 --> 4d55618d_fa7b_8e54_edb2_b85ae393d95b
  style dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { addDatabaseChangeListener } from 'expo-sqlite';
import { useEffect, useState } from 'react';
import { is } from '~/entity.ts';
import { SQL } from '~/sql/sql.ts';
import type { AnySQLiteSelect } from '~/sqlite-core/index.ts';
import { getTableConfig, getViewConfig, SQLiteTable, SQLiteView } from '~/sqlite-core/index.ts';
import { SQLiteRelationalQuery } from '~/sqlite-core/query-builders/query.ts';
import { Subquery } from '~/subquery.ts';

export const useLiveQuery = <T extends Pick<AnySQLiteSelect, '_' | 'then'> | SQLiteRelationalQuery<'sync', unknown>>(
	query: T,
	deps: unknown[] = [],
) => {
	const [data, setData] = useState<Awaited<T>>(
		(is(query, SQLiteRelationalQuery) && query.mode === 'first' ? undefined : []) as Awaited<T>,
	);
	const [error, setError] = useState<Error>();
	const [updatedAt, setUpdatedAt] = useState<Date>();

	useEffect(() => {
		const entity = is(query, SQLiteRelationalQuery) ? query.table : (query as AnySQLiteSelect).config.table;

		if (is(entity, Subquery) || is(entity, SQL)) {
			setError(new Error('Selecting from subqueries and SQL are not supported in useLiveQuery'));
			return;
		}

		let listener: ReturnType<typeof addDatabaseChangeListener> | undefined;

		const handleData = (data: any) => {
			setData(data);
			setUpdatedAt(new Date());
		};

		query.then(handleData).catch(setError);

		if (is(entity, SQLiteTable) || is(entity, SQLiteView)) {
			const config = is(entity, SQLiteTable) ? getTableConfig(entity) : getViewConfig(entity);
			listener = addDatabaseChangeListener(({ tableName }) => {
				if (config.name === tableName) {
					query.then(handleData).catch(setError);
				}
			});
		}

		return () => {
			listener?.remove();
		};
	}, deps);

	return {
		data,
		error,
		updatedAt,
	} as const;
};

Domain

Subdomains

Functions

Dependencies

  • entity.ts
  • expo-sqlite
  • index.ts
  • query.ts
  • react
  • sql.ts
  • subquery.ts

Frequently Asked Questions

What does query.ts do?
query.ts is a source file in the drizzle-orm codebase, written in typescript. It belongs to the DrizzleORM domain, QueryBuilders subdomain.
What functions are defined in query.ts?
query.ts defines 1 function(s): useLiveQuery.
What does query.ts depend on?
query.ts imports 7 module(s): entity.ts, expo-sqlite, index.ts, query.ts, react, sql.ts, subquery.ts.
Where is query.ts in the architecture?
query.ts is located at drizzle-orm/src/expo-sqlite/query.ts (domain: DrizzleORM, subdomain: QueryBuilders, directory: drizzle-orm/src/expo-sqlite).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free