Metadata-Version: 1.1
Name: mysqlparse
Version: 0.1.5
Summary: A library for parsing SQL statements.
Home-page: https://github.com/seporaitis/mysqlparse
Author: Julius Seporaitis
Author-email: julius@seporaitis.net
License: MIT
Description: ==========
        mysqlparse
        ==========
        
        .. image:: https://img.shields.io/pypi/v/mysqlparse.svg
                :target: https://pypi.python.org/pypi/mysqlparse
        
        .. image:: https://img.shields.io/travis/seporaitis/mysqlparse.svg
                :target: https://travis-ci.org/seporaitis/mysqlparse
        
        
        A highly experimental attempt to have a sane parser library to parse MySQL statements.
        
        At the moment - use it at your own risk!
        
        
        Features
        --------
        
        * Parses SOME SQL strings.
        
        
        Example
        -------
        
        Some properties that can be accessed.
        
        .. code-block:: python
        
            >>> import mysqlparse
            >>> sql = mysqlparse.parse("""
            ...     ALTER TABLE `django_user` ADD COLUMN `notes` LONGTEXT NOT NULL
            ... """)
            >>> print(sql.statements[0].statement_type)
            ALTER
            >>> print(sql.statements[0].table_name)
            `django_user`
            >>> print(sql.statements[0].ignore)
            False
            >>> print(sql.statements[0].alter_specification[0].alter_action)
            ADD COLUMN
            >>> print(sql.statements[0].alter_specification[0].column_name)
            `notes`
            >>> print(sql.statements[0].alter_specification[0].data_type)
            LONGTEXT
            >>> print(sql.statements[0].alter_specification[0].null)
            False
            >>> print(sql.statements[0].alter_specification[0].column_position)
            LAST
        
        Checking that the alter statement is backwards compatible with a
        previous version of SOME code, which does not know how to save
        ``notes`` as ``NOT NULL``:
        
        .. code-block:: python
        
            for statement in sql.statements:
                if statement != 'ALTER':
                    continue
                for column in statement.alter_specification:
                    if column.data_type == 'LONGTEXT':
                        if column.null is False and column.default != 'NULL':
                            print "{s.table_name}.{c.column_name} is `LONGTEXT NOT NULL` which may break the production system. Use `LONGTEXT DEFAULT NULL` instead.".format(
                                s=statement,
                                c=column,
                            )
        
        
        How can you help?
        -----------------
        
        A short list of things that would help (from relatively easiest):
        
        * Raise an issue with an edge case statement that **should** parse,
          but doesn't.
        
        * Raise an issue with how you would like to use this library.
        
        * Document the available properties in the parsed object.
        
        * Add a missing test case or suggest a way to avoid so much repetition
          in tests checking the same statement, but with variations.
        
        * Suggest how to use `pyparsing` to do statement validation.
        
        * Maybe it is possible to generate `pyparsing` parser from the MySQL
          source code?
        
        * Add ability to unparse the parse (sub)trees back into valid SQL.
        
        
        Why?
        ----
        
        Out of frustration for lack of a better tool.
        
        
        
        
        History
        -------
        
        0.1.5 (2016-08-23)
        ------------------
        
        * Change the licence from ``AGPLv3`` to ``MIT`` licence.
        
        
        0.1.4 (2016-02-28)
        ------------------
        
        * Brought back ``HISTORY.rst``.
        * Add ``mysqlparse.parse`` function.
        * Add ``six`` as a dependency to make writing Py2 and Py3 compatible code easier.
        * Add support for ``ALTER TABLE .. MODIFY [COLUMN]`` statements.
        * Add support for ``ALTER TABLE .. DROP *`` statements.
        * Move version string from ``setup.py`` into ``mysqlparse``.
        
        
        0.1.3 (2016-02-20)
        ------------------
        
        * Updated ``README.rst``.
        * Add support for ``ALTER TABLE ... ADD INDEX`` statements.
        
        
        0.1.2 (2016-02-16)
        ------------------
        
        * A little tidy up.
        * Removed ``defaultValue`` parse action.
        * Improved ``NULL`` handling.
        * Updated tests to pass.
        
        
        0.1.1 (2016-02-15)
        ------------------
        
        * Fixed packaging configuration.
        
        
        0.1.0 (2016-02-15)
        ------------------
        
        * First release with code parsing some of ``ALTER TABLE ... ADD COLUMN`` statements.
        
Keywords: sql parse pyparsing mysql database
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
