{"id":24807284,"url":"https://github.com/stackpress/inquire","last_synced_at":"2025-10-13T09:30:37.708Z","repository":{"id":267123723,"uuid":"900220092","full_name":"stackpress/inquire","owner":"stackpress","description":"Strong typed SQL","archived":false,"fork":false,"pushed_at":"2025-01-22T02:00:09.000Z","size":189,"stargazers_count":0,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-22T02:27:43.487Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stackpress.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-08T07:30:51.000Z","updated_at":"2025-01-22T01:34:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"90ce62b4-4017-45f2-af91-8883bc4899dd","html_url":"https://github.com/stackpress/inquire","commit_stats":null,"previous_names":["stackpress/inquire"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpress%2Finquire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpress%2Finquire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpress%2Finquire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpress%2Finquire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stackpress","download_url":"https://codeload.github.com/stackpress/inquire/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236323453,"owners_count":19130635,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-30T09:18:02.100Z","updated_at":"2025-10-13T09:30:37.702Z","avatar_url":"https://github.com/stackpress.png","language":"TypeScript","readme":"# 💬 Inquire\n\n[![NPM Package](https://img.shields.io/npm/v/@stackpress/inquire.svg?style=flat)](https://www.npmjs.com/package/@stackpress/inquire)\n[![Tests Status](https://img.shields.io/github/actions/workflow/status/stackpress/inquire/test.yml)](https://github.com/stackpress/inquire/actions)\n[![Coverage Status](https://coveralls.io/repos/github/stackpress/inquire/badge.svg?branch=main)](https://coveralls.io/github/stackpress/inquire?branch=main)\n[![Commits](https://img.shields.io/github/last-commit/stackpress/inquire)](https://github.com/stackpress/inquire/commits/main/)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat)](https://github.com/stackpress/inquire/blob/main/LICENSE)\n\nSuper lightweight generic typed SQL query builder, SQL dialects and composite engine. Schema builder, but no ORM. Bring your own database library.\n\n## What is Inquire?\n\nInquire is a powerful yet lightweight SQL query builder that provides a unified interface for working with multiple database engines. Unlike traditional ORMs, Inquire focuses on query building and execution while letting you bring your own database connection library. This approach gives you the flexibility to use your preferred database driver while benefiting from a consistent, type-safe query building experience.\n\n## Key Features\n\n- **🪶 Lightweight**: No ORM overhead - just pure query building\n- **🔧 Generic Typed**: Full TypeScript support with generic types for enhanced type safety\n- **🗄️ Multi-Database**: Same expressive query builder pattern for all SQL engines\n- **🔄 Unified Interface**: Consistent API across different database engines\n- **📝 Schema Builder**: Create and modify database schemas programmatically\n- **🔗 Template Strings**: Support for type-safe template string query building\n- **⚡ Transaction Support**: Common transaction pattern across all engines\n- **🎯 Dialect Agnostic**: Query builders work with any supported SQL dialect\n\n## Supported Databases\n\nInquire supports a wide range of database engines through dedicated connection packages:\n\n- **MySQL** - via `@stackpress/inquire-mysql2` (Node MySQL2)\n- **PostgreSQL** - via `@stackpress/inquire-pg` (Node PostGres pg)\n- **SQLite** - via `@stackpress/inquire-sqlite3` (Better SQLite3)\n- **PGLite** - via `@stackpress/inquire-pglite` (PGLite)\n- **CockroachDB** - Compatible with PostgreSQL adapter\n- **NeonDB** - Compatible with PostgreSQL adapter\n- **Vercel Postgres** - Compatible with PostgreSQL adapter\n- **Supabase** - Compatible with PostgreSQL adapter\n\n## Installation\n\nInstall the core library:\n\n```bash\nnpm install @stackpress/inquire\n```\n\nThen install the appropriate database adapter:\n\n```bash\n# For MySQL\nnpm install @stackpress/inquire-mysql2 mysql2\n\n# For PostgreSQL\nnpm install @stackpress/inquire-pg pg\n\n# For SQLite\nnpm install @stackpress/inquire-sqlite3 better-sqlite3\n\n# For PGLite\nnpm install @stackpress/inquire-pglite @electric-sql/pglite\n```\n\n## Quick Start\n\n### MySQL Connection\n\n```typescript\nimport mysql from 'mysql2/promise';\nimport connect from '@stackpress/inquire-mysql2';\n\n// Create the raw database connection\nconst resource = await mysql.createConnection({\n  host: 'localhost',\n  user: 'root',\n  database: 'inquire',\n});\n\n// Map the resource to the Inquire engine\nconst engine = connect(resource);\n```\n\n### PostgreSQL Connection\n\n```typescript\nimport { Client, Pool } from 'pg';\nimport connect from '@stackpress/inquire-pg';\n\n// Using a Pool\nconst pool = new Pool({\n  database: 'inquire',\n  user: 'postgres'\n});\nconst connection = await pool.connect();\n\n// Or using a Client\nconst client = new Client({\n  database: 'inquire',\n  user: 'postgres'\n});\nawait client.connect();\n\n// Map the resource to the Inquire engine\nconst engine = connect(connection); // or connect(client)\n```\n\n### SQLite Connection\n\n```typescript\nimport sqlite from 'better-sqlite3';\nimport connect from '@stackpress/inquire-sqlite3';\n\n// Create the raw database connection\nconst resource = sqlite(':memory:');\n\n// Map the resource to the Inquire engine\nconst engine = connect(resource);\n```\n\n## Basic Usage\n\nOnce you have an engine instance, you can start building and executing queries:\n\n```typescript\n// Create a table\nawait engine.create('users')\n  .addField('id', { type: 'INTEGER', autoIncrement: true })\n  .addField('name', { type: 'VARCHAR', length: 255 })\n  .addField('email', { type: 'VARCHAR', length: 255 })\n  .addPrimaryKey('id');\n\n// Insert data\nawait engine\n  .insert('users')\n  .values({ name: 'John Doe', email: 'john@example.com' });\n\n// Select data\nconst users = await engine\n  .select('*')\n  .from('users')\n  .where('name = ?', ['John Doe']);\n\nconsole.log(users);\n\n// Update data\nawait engine\n  .update('users')\n  .set({ email: 'john.doe@example.com' })\n  .where('id = ?', [1]);\n\n// Delete data\nawait engine\n  .delete('users')\n  .where('id = ?', [1]);\n```\n\n## Query Builders\n\nInquire provides comprehensive query builders for all common SQL operations:\n\n- **[Create](./docs/builders/Create.md)** - Create tables and schemas\n- **[Alter](./docs/builders/Alter.md)** - Modify existing tables\n- **[Select](./docs/builders/Select.md)** - Query data with joins, conditions, and aggregations\n- **[Insert](./docs/builders/Insert.md)** - Insert single or multiple records\n- **[Update](./docs/builders/Update.md)** - Update existing records\n- **[Delete](./docs/builders/Delete.md)** - Delete records with conditions\n\n## Template String Queries\n\nFor complex queries, you can use type-safe template strings:\n\n```typescript\ntype User = {\n  id: number;\n  name: string;\n  email: string;\n};\n\nconst userId = 123;\nconst results = await engine.sql\u003cUser\u003e`\n  SELECT u.*, p.title \n  FROM users u \n  LEFT JOIN posts p ON u.id = p.user_id \n  WHERE u.id = ${userId}\n`;\n// results is typed as User[]\n```\n\n## Transactions\n\nExecute multiple queries in a transaction:\n\n```typescript\nconst result = await engine.transaction(async (trx) =\u003e {\n  await trx.insert('users').values({ name: 'Alice' });\n  await trx.insert('posts').values({ title: 'Hello World', user_id: 1 });\n  return 'success';\n});\n```\n\n## Type Safety\n\nInquire is designed with TypeScript in mind, providing full type safety:\n\n```typescript\ntype User = {\n  id: number;\n  name: string;\n  email: string;\n};\n\n// Type-safe queries\nconst users = await engine.select\u003cUser\u003e('*').from('users');\n// users is now typed as User[]\n\nconst user = await engine.select\u003cUser\u003e('*')\n  .from('users')\n  .where('id = ?', [1])\n  .limit(1);\n// user is typed as User[]\n```\n\n## API Documentation\n\nFor detailed API documentation, see:\n\n- **[Engine](./docs/Engine.md)** - Core engine class and methods\n- **[Connection Classes](./docs/Connections.md)** - Database-specific connection implementations\n- **[Query Builders](./docs/builders/README.md)** - Detailed documentation for all query builders\n- **[SQL Dialects](./docs/dialects/README.md)** - Detailed documentation for all SQL dialects\n- **[Examples](./docs/Examples.md)** - Comprehensive usage examples\n\n## Examples\n\nCheck out the [examples directory](./examples) for complete working examples with different database engines:\n\n- [MySQL Example](./examples/with-mysql2)\n- [PostgreSQL Example](./examples/with-pg)\n- [SQLite Example](./examples/with-sqlite3)\n- [PGLite Example](./examples/with-pglite)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackpress%2Finquire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstackpress%2Finquire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackpress%2Finquire/lists"}