Skip to content

nextras/multi-query-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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.

License

MIT. See full license.

About

Parses particular queries form a SQL file.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 3

  •  
  •  
  •