lbreme / lexepa-sql
Library for lexing and parsing a SQL INSERT statement
Installs: 7
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/lbreme/lexepa-sql
Requires
- php: >=7.0.0
README
Library for lexing and parsing a SQL INSERT query.
Installing Lexepa-Sql
First, get Composer, if you don't already use it.
Next, run the following command inside the directory of your project:
composer require lbreme/lexepa-sql
How does it work?
The Lexepa-Sql library analyzes any file that contains one or more INSERT SQL queries. During the analysis a series of callback functions are called to which the elements that constitute the query are passed as arguments.
Let's clarify with an example, which is contained in the file class-example-sql.php, which to make it work is to copy in the root of your project, along with the test file insert.sql:
/*
We create a class derived from the Lexepa_Sql_Abstract class, which implements all the
callback functions that will be called by the analysis of the SQL INSERT query
*/
class Example_Sql extends Lexepa_Sql_Abstract
{
/**
* Begin of the SQL INSERT query.
*
* @param int $begin_offset Offset of the SQL INSERT query.
*/
public function begin_insert( $begin_offset )
{
echo 'Offset of the SQL INSERT query: ' . $begin_offset . '<br />';
}
/**
* Table name found
*
* @param string $table_name Table name.
* @param int $offset Offset of the table name.
*/
public function table_name( $table_name, $offset )
{
echo 'Table name: ' . $table_name . '<br />';
}
/**
* Field name found
*
* @param string $field_name Field name.
* @param int $offset Offset of the field name.
*/
public function field_name( $field_name, $offset )
{
echo 'Field name: ' . $field_name . '<br />';
}
/**
* Field value found
*
* @param string $field_value Field value.
* @param int $offset Offset of the field value.
*/
public function field_value( $field_value, $offset )
{
echo 'Field value: ' . $field_value . '<br />';
}
/**
* End of the SQL INSERT query
*
* @param int $end_offset Offset of the end of the SQL INSERT query.
*/
public function end_insert( $end_offset )
{
echo 'Offset of the end of the SQL INSERT query: ' . $end_offset . '<br />';
}
/**
* End of the file parsing
*
* @param bool $offset Offset of the end of the file parsing.
*/
public function end_parsing( $offset )
{
echo 'Offset of the end of the file parsing: ' . $offset . '<br />';
}
/**
* Set error parsing the file.
*
* @param string $error Error parsing the file.
*/
public function set_error( $error )
{
echo $error . '<br />';
}
}
$example_sql = new Example_Sql();
/*
We instantiate the Lexepa-Sql library class, passing as arguments the $example_sql object
containing the callback functions and the file name to be parsed
*/
$lexepa_sql = new Lexepa_Sql( $example_sql, 'insert.sql' );
// Let's start the analysis
$lexepa_sql->parse_sql();
The result of this example is as follows:
Offset of the begin of the SQL INSERT query: 0 Table name: wp_options Field value: 1 Field value: siteurl Field value: https://www.mysite.com/ Field value: yes Field value: 2 Field value: home Field value: https://www.mysite.com/ Field value: yes Field value: 3 Field value: blogname Field value: My site Field value: yes Field value: 4 Field value: blogdescription Field value: My revised site Field value: yes Offset of the end of the SQL INSERT query: 206 Offset of the begin of the SQL INSERT query: 208 Table name: wp_postmeta Field value: 71 Field value: 33 Field value: _edit_last Field value: 1 Field value: 72 Field value: 33 Field value: adventurous-header-image Field value: default Field value: 73 Field value: 33 Field value: adventurous-sidebarlayout Field value: default Field value: 74 Field value: 33 Field value: adventurous-featured-image Field value: default Field value: 75 Field value: 33 Field value: _edit_lock Field value: 1600100291:1 Field value: 76 Field value: 35 Field value: _edit_last Field value: 1 Offset of the end of the SQL INSERT query: 489 Offset of the end of the file parsing: 491
The callback functions implemented by the Lexepa_Sql_Abstract class are contained and documented in the interface file class-lexepa-sql-interface.php