Home / Function/ useLiveQuery() — drizzle-orm Function Reference

useLiveQuery() — drizzle-orm Function Reference

Architecture documentation for the useLiveQuery() function in query.ts from the drizzle-orm codebase.

Entity Profile

Dependency Diagram

graph TD
  0e712925_b864_aeb7_ffa7_c459c5421ecb["useLiveQuery()"]
  dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4["query.ts"]
  0e712925_b864_aeb7_ffa7_c459c5421ecb -->|defined in| dbbab1b3_c73e_3fd1_8375_b9dba33fa8f4
  style 0e712925_b864_aeb7_ffa7_c459c5421ecb fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

drizzle-orm/src/expo-sqlite/query.ts lines 10–56

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

Frequently Asked Questions

What does useLiveQuery() do?
useLiveQuery() is a function in the drizzle-orm codebase, defined in drizzle-orm/src/expo-sqlite/query.ts.
Where is useLiveQuery() defined?
useLiveQuery() is defined in drizzle-orm/src/expo-sqlite/query.ts at line 10.

Analyze Your Own Codebase

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

Try Supermodel Free