GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - nextras/multi-query-parser: Parses particular queries form a SQL file.

BranchesTags
Open more actions menu

Latest commit

 

History

75 Commits
75 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
.idea
.idea
 
 
src
src
 
 
tests
tests
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
composer.json
composer.json
 
 
license.md
license.md
 
 
phpstan.neon
phpstan.neon
 
 
readme.md
readme.md
 
 

Repository files navigation

Nextras Multi Query Parser

Build Downloads this Month Stable Version

A streaming PHP parser for splitting multi-query SQL files into individual statements. Handles database-specific syntax like custom delimiters, dollar-quoted strings, and BEGIN...END blocks. The parser reads input in small chunks and yields statements one by one -- it never loads the entire file into memory, making it suitable for large SQL dumps.

Supported Databases

  • MySQL -- backtick identifiers, DELIMITER command, # comments
  • PostgreSQL -- dollar-quoted strings ($BODY$...$BODY$), E'...' escape strings
  • SQL Server -- [bracketed] identifiers, BEGIN...END blocks
  • SQLite -- all three identifier styles ("double", `backtick`, [bracket]), BEGIN...END blocks for triggers

All parsers handle standard SQL comments (--, /* */), quoted strings, and semicolon delimiters.

Installation

composer require nextras/multi-query-parser

Requires PHP 8.0+.

Usage

Parse a SQL file:

use Nextras\MultiQueryParser\MySqlMultiQueryParser;

$parser = new MySqlMultiQueryParser();

foreach ($parser->parseFile('migrations.sql') as $query) {
    $connection->query($query);
}

Parse a string:

$sql = "CREATE TABLE users (id INT); INSERT INTO users VALUES (1);";

foreach ($parser->parseString($sql) as $query) {
    $connection->query($query);
}

Parse from a file stream:

$stream = fopen('migrations.sql', 'r');

foreach ($parser->parseFileStream($stream) as $query) {
    $connection->query($query);
}

Available parsers: MySqlMultiQueryParser, PostgreSqlMultiQueryParser, SqlServerMultiQueryParser, SqliteMultiQueryParser.

Keep leading comments:

By default, comments are stripped and only query strings are yielded. To control what happens to comments, pass a CommentStrategy to the parser constructor. The bundled PrependLeadingComments strategy keeps the comments preceding a query as a prefix of that query -- useful when comments carry meaningful annotations, e.g. so they remain visible in observability tools:

use Nextras\MultiQueryParser\Strategy\PrependLeadingComments;

$parser = new MySqlMultiQueryParser(new PrependLeadingComments());

$sql = "-- create the users table\nCREATE TABLE users (id INT);";

foreach ($parser->parseString($sql) as $query) {
    echo $query; // "-- create the users table\nCREATE TABLE users (id INT)"
}

All comment styles supported by the given dialect (--, /* */, and # for MySQL) that directly precede a query are preserved with their original formatting; only pure leading whitespace is stripped. A comment that sits between two queries is treated as preceding the following one. Comments not followed by any query (e.g. a trailing comment at the end of input) are dropped.

License

MIT. See full license.

About

Parses particular queries form a SQL file.

nextras.org

Topics

multi-querymysqlnextrasparserpostgresqlsqlsqlitesqlserverstreaming-data

Resources

Readme
MIT license
Activity
Custom properties

Stars

4 stars

Watchers

3 watching

Forks

0 forks
Report repository

Releases

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.