PHPackages                             subapp/sql - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. subapp/sql

ActiveLibrary[Database &amp; ORM](/categories/database)

subapp/sql
==========

SQL Two Way Parser/Builder

1.2.2(7y ago)11811MITPHPPHP &gt;=7.2

Since Mar 6Pushed 7y ago1 watchersCompare

[ Source](https://github.com/subapp/sql)[ Packagist](https://packagist.org/packages/subapp/sql)[ RSS](/packages/subapp-sql/feed)WikiDiscussions master Synced 5d ago

READMEChangelog (8)Dependencies (4)Versions (11)Used By (1)

sql
===

[](#sql)

SQL Parser-QueryBuilder
-----------------------

[](#sql-parser-querybuilder)

### Main Factory

[](#main-factory)

```
$factory = Sql::getInstance();
```

### Query/Builder

[](#querybuilder)

```
$query = $factory->newQuery();
$builder = $query->getBuilder();
```

### Create AST

[](#create-ast)

```
$parser = $factory->getProcessor(); // as default
$parser->getLexer()->tokenize('select U.id, U.name, max(U.id) from users U where U.id > 100');
$ast = $parser->parse();
```

### Converter

[](#converter)

```
$converter = $factory->getConverter();

$array  = $converter->toArray($ast);
$ast    = $converter->toNode($array);

$converter->toSql($ast);
// > SELECT U.id, U.name, MAX(U.id) FROM users AS U WHERE U.id > 100
```

### Query/Builder

[](#querybuilder-1)

#### Select

[](#select)

```
$query->reset(); // optional. this action rewrite root node

$query->select('users')->noCache();
$query->columns('test', 'id', 'created', 'count(*) cnt');
$query->where('id = 1');

$query->getSql();
```

```
SELECT SQL_NO_CACHE (test, id, created, COUNT(*) AS cnt) FROM users WHERE id = 1

```

#### Insert

[](#insert)

```
$query->reset(); // optional. this action rewrite root node

$query->insert('users U')->ignore();
$query->fields('U.name', 'created');
$query->values([
    ['tedd', '2019-01-01'],
]);
$query->values([
    ['john', $builder->sql('now()')],
    ['nedd', '2019-01-01'],
]);

$query->getSql();
```

```
INSERT IGNORE INTO users AS U (U.`name`, created) VALUES ('tedd', '2019-01-01'), ('john', NOW()), ('nedd', '2019-01-01')

```

#### Update

[](#update)

```
$query->reset(); // optional. this action rewrite root node

$query->update('users U')->delayed();
$query->sets([
    'name' => 'John',
    'date' => '2018-01-01',
    'hits' => $builder->sql('sum(U.hit)')
]);

$where = $builder->and(
    $builder->or('U.id > 2', 'U.id < len(U.email)'),
    $builder->or('U.id < 0', 'U.id > len(U.name)', $builder->eq('x', $builder->sql('len(x)')))
);

$query->where($where);
```

```
UPDATE DELAYED users AS U SET name = 'John', date = '2018-01-01', hits = SUM(U.hit) WHERE (U.id > 2 OR U.id < LEN(U.email)) AND (U.id < 0 OR U.id > LEN(U.name) OR x = LEN(x))

```

#### Delete

[](#delete)

```
$query->reset(); // optional. this action rewrite root node

$query->delete('users U')->quick();
$query->where(
    $builder->or(
        'U.id = 1',
        $builder->ge('U.id', 1000),
        $builder->ge('U.access',
            $builder->sql('rand()')
        ))
);
$query->limit(1);

$query->getSql();
```

```
DELETE QUICK users AS U WHERE (U.id = 1 OR U.`id` >= 1000 OR U.`access` >= RAND()) LIMIT 0, 1

```

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~5 days

Recently: every ~11 days

Total

10

Last Release

2580d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7359856434a6096986dabd1ae61bd3c792faa68a06c7b91e36dbb555c8352f31?d=identicon)[DezByte](/maintainers/DezByte)

---

Top Contributors

[![dezbyte](https://avatars.githubusercontent.com/u/17449370?v=4)](https://github.com/dezbyte "dezbyte (4 commits)")

---

Tags

sqlSQL Buildersql-query

### Embed Badge

![Health badge](/badges/subapp-sql/health.svg)

```
[![Health](https://phpackages.com/badges/subapp-sql/health.svg)](https://phpackages.com/packages/subapp-sql)
```

###  Alternatives

[doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.

9.7k578.4M5.6k](/packages/doctrine-dbal)[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k115.1M102](/packages/jdorn-sql-formatter)[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[guanguans/soar-php

SQL optimizer and rewriter(assisted SQL tuning). - SQL 优化器和重写器(辅助 SQL 调优)。

19619.7k6](/packages/guanguans-soar-php)[php-database-migration/php-database-migration

rake and mybatis SQL migration tool

8961.2k](/packages/php-database-migration-php-database-migration)[corneltek/lazyrecord

The Fast PHP ORM

103.6k2](/packages/corneltek-lazyrecord)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
