� =��g������dZddlmZddlZddlZddlZddlTddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddlmZ ddlmZn #e$rdZYnwxYwGd�de��Zd�Zd�ZGd�de��ZGd�de��ZGd�de��ZGd�dedd����ZGd�d e��ZGd!�d"e��Zd#�ZdS)$ah Lightweight schema migrations. Example Usage ------------- Instantiate a migrator: # Postgres example: my_db = PostgresqlDatabase(...) migrator = PostgresqlMigrator(my_db) # SQLite example: my_db = SqliteDatabase('my_database.db') migrator = SqliteMigrator(my_db) Then you will use the `migrate` function to run various `Operation`s which are generated by the migrator: migrate( migrator.add_column('some_table', 'column_name', CharField(default='')) ) Migrations are not run inside a transaction, so if you wish the migration to run in a transaction you will need to wrap the call to `migrate` in a transaction block, e.g.: with my_db.transaction(): migrate(...) Supported Operations -------------------- Add new field(s) to an existing model: # Create your field instances. For non-null fields you must specify a # default value. pubdate_field = DateTimeField(null=True) comment_field = TextField(default='') # Run the migration, specifying the database table, field name and field. migrate( migrator.add_column('comment_tbl', 'pub_date', pubdate_field), migrator.add_column('comment_tbl', 'comment', comment_field), ) Renaming a field: # Specify the table, original name of the column, and its new name. migrate( migrator.rename_column('story', 'pub_date', 'publish_date'), migrator.rename_column('story', 'mod_date', 'modified_date'), ) Dropping a field: migrate( migrator.drop_column('story', 'some_old_field'), ) Making a field nullable or not nullable: # Note that when making a field not null that field must not have any # NULL values present. migrate( # Make `pub_date` allow NULL values. migrator.drop_not_null('story', 'pub_date'), # Prevent `modified_date` from containing NULL values. migrator.add_not_null('story', 'modified_date'), ) Renaming a table: migrate( migrator.rename_table('story', 'stories_tbl'), ) Adding an index: # Specify the table, column names, and whether the index should be # UNIQUE or not. migrate( # Create an index on the `pub_date` column. migrator.add_index('story', ('pub_date',), False), # Create a multi-column index on the `pub_date` and `status` fields. migrator.add_index('story', ('pub_date', 'status'), False), # Create a unique index on the category and title fields. migrator.add_index('story', ('category_id', 'title'), True), ) Dropping an index: # Specify the index name. migrate(migrator.drop_index('story', 'story_pub_date_status')) Adding or dropping table constraints: .. code-block:: python # Add a CHECK() constraint to enforce the price cannot be negative. migrate(migrator.add_constraint( 'products', 'price_check', Check('price >= 0'))) # Remove the price check constraint. migrate(migrator.drop_constraint('products', 'price_check')) # Add a UNIQUE constraint on the first and last names. migrate(migrator.add_unique('person', 'first_name', 'last_name')) �)� namedtupleN)�*)� CommaNodeList)�EnclosedNodeList��Entity)� Expression)�Node)�NodeList)�OP)� callable_)� sort_models)�sqlite3)�_truncate_constraint_name)�CockroachDatabasec�*�eZdZdZd�Zd�Zd�Zd�ZdS)� Operationz/Encapsulate a single schema altering operation.c�>�||_||_||_||_dS�N)�migrator�method�args�kwargs)�selfrrrrs �a/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/playhouse/migrate.py�__init__zOperation.__init__�s"�� �� ��� ��� ��� � � �c�D�|jj�|��dSr)r�database�execute)r�nodes rr zOperation.execute�s!�� � ��&�&�t�,�,�,�,�,rc�2�t|ttf��r|�|��dSt|t��r|���dSt|t tf��r|D]}|�|���dSdSr) � isinstancer �Contextr r�run�list�tuple�_handle_result)r�result�items rr(zOperation._handle_result�s��� �f�t�W�o� .� .� *� �L�L�� � � � � � �� � *� *� *� �J�J�L�L�L�L�L� ���u� � .� .� *�� *� *���#�#�D�)�)�)�)� *� *� *� *rc��|j���}d|d<t|j|j��}|�||ji|����dS)NT� with_context)r�copy�getattrrrr(r)rrrs rr%z Operation.run�s]����!�!�#�#��!%��~������ �4�4�� ���F�F�D�I�8��8�8�9�9�9�9�9rN)�__name__� __module__� __qualname__�__doc__rr r(r%�rrrr�sV������9�9���� -�-�-�*�*�*�:�:�:�:�:rrc�F��tj����fd���}|S)Nc�x��|�dd��}|r �|g|�Ri|��St|�jg|�Ri|��S)Nr,F)�poprr/)rrrr,�fns �r�innerzoperation.<locals>.inner�s`����z�z�.�%�8�8� � � -��2�d�,�T�,�,�,�V�,�,� ,���r�{�<�T�<�<�<�V�<�<�<r)� functools�wraps)r7r8s` r� operationr;�s8����_�R���=�=�=�=���=� �Lrc��d�|ft|��z��}t|��dkrPtj|�d�������}|dd��d|dd���}|S)N�_�@zutf-8�8�)�joinr'�len�hashlib�md5�encode� hexdigest)� table_name�columns� index_name� index_hashs r�make_index_namerK�s������:�-�%��.�.�8�9�9�J� �:�������[��!2�!2�7�!;�!;�<�<�F�F�H�H� � *�3�B�3�����B�Q�B���@� � �rc���eZdZdZdZd�Zd�Zed���Ze d���Z d�Z d�Z e d���Z e d ���Ze d ���Ze d ���Zd �Ze dd���Ze d���Ze d���Ze dd���Ze d���Ze d���Ze d���Ze d���Ze d���Ze dd���Ze d���Ze dd���Ze d���Zd S) �SchemaMigratorFc��||_dSr)r)rrs rrzSchemaMigrator.__init__�s �� �� � � rc�4�|j���Sr)r�get_sql_context�rs r� make_contextzSchemaMigrator.make_context�s���}�,�,�.�.�.rc�T�tr$t|t��rt|��St|t��rt |��St|t ��rt |��St|t��rt|��Std|z���)NzUnsupported database: %s) rr#�CockroachDBMigrator�PostgresqlDatabase�PostgresqlMigrator� MySQLDatabase� MySQLMigrator�SqliteDatabase�SqliteMigrator� ValueError)�clsrs r� from_databasezSchemaMigrator.from_database�s��� � ,��H�6G�!H�!H� ,�&�x�0�0� 0� ��"4� 5� 5� ,�%�h�/�/� /� ��-� 0� 0� ,� ��*�*� *� ��.� 1� 1� ,�!�(�+�+� +��3�h�>�?�?�?rc ��|j}t|��r |��}|����d���t |�����d���t t |��tj|� |��d�����S)NzUPDATE z SET T)�flat) �defaultr rR�literal�sqlrr r �EQ�db_value)r�table� column_name�fieldr`s r� apply_defaultzSchemaMigrator.apply_default�s����-�� �W� � � ��g�i�i�G��!�!�#�#����#�#���V�E�]�]�#�#����!�!���Z��;�'�'��E��N�N�7�+�+�� ��� � �  !rc�l�|�d���t|����S)N� ALTER TABLE )rarbr)r�ctxres r� _alter_tablezSchemaMigrator._alter_table�s(���{�{�>�*�*�.�.�v�e�}�}�=�=�=rc��|�||���d���t|����S)N� ALTER COLUMN �rlrarbr�rrkre�columns r� _alter_columnzSchemaMigrator._alter_column�s:�����c�5�)�)���)�*�*���V�F�^�^�$�$� &rc��|���}|jdc}|_|j|kr|x|_|_|�||���d���|�|����||_t|t��r|� ||��|S)NTz ADD COLUMN ) rR�nullrf�namerlrarb�ddlr#�ForeignKeyField�add_inline_fk_sql)rrerfrgrk� field_nulls r�alter_add_columnzSchemaMigrator.alter_add_column�s������!�!��!&��T�� �E�J� � � � +� +�-8� 8�E�J��*� � �,�s�E� "� "� �'�.� !� !� �#�e�i�i��n�n� � � ��� � �e�_� -� -� /� � "� "�3�� .� .� .�� rc��|�|���|���d���t |�����d���|��S)N� ADD CONSTRAINT � �rlrRrarbr�rreru� constraints r�add_constraintzSchemaMigrator.add_constraint�s\�����d�/�/�1�1�5�9�9���+�,�,���V�D�\�\�"�"��������Z���  "rc���dd�|��z}ttd��td�|D����f��}|�|||��S)Nzuniq_%sr=�UNIQUEc�,�g|]}t|����Sr3r��.0rqs r� <listcomp>z-SchemaMigrator.add_unique.<locals>.<listcomp> s��H�H�H��f�V�n�n�H�H�Hr)rAr �SQLrr�)rre� column_names�constraint_namer�s r� add_uniquezSchemaMigrator.add_uniquesl��#�c�h�h�|�&<�&<�<��� ��M�M� �H�H�<�H�H�H� I� I�K�L�L� ��"�"�5�/�:�F�F�Frc��|�|���|���d���t |����S)Nz DROP CONSTRAINT r~�rrerus r�drop_constraintzSchemaMigrator.drop_constraint sF�����d�/�/�1�1�5�9�9���,�-�-���V�D�\�\�"�"� $rc��|�d���t|jjj�����d���t t|jj��f����}|j �|�d|j z��}|j �|�d|j z��}|S)N� REFERENCES r}� ON DELETE %s� ON UPDATE %s) rarbr� rel_model�_metarGr� rel_fieldrf� on_delete� on_update�rrkrgs rrxz SchemaMigrator.add_inline_fk_sqls�������'�'���F�5�?�0�;�<�<�=�=���� � ���$�f�U�_�-H�&I�&I�%K�L�L�M�M� � �?� &��+�+�o���?�@�@�C� �?� &��+�+�o���?�@�@�C�� rNc� �|p d|�d|�d|��}|����d���t|�����d���tt |�������d���t t|��f�����d���t|�����d���t|�����d ��} |�| �d |z��} |�| �d |z��} | S) N�fk_r=�_refs_rjr|z FOREIGN KEY r�� (�)r�r�)rRrarbrrr) rrerf�rel� rel_columnr�r�r�r�rks r�add_foreign_key_constraintz)SchemaMigrator.add_foreign_key_constraintsD��%�C�C�e�e�e�>I�k�k�>A�c�)C� ��� ������'�'���F�5�M�M�"�"���*�+�+���F�4�Z�@�@�A�A�B�B����(�(���$�f�[�&9�&9�%;�<�<�=�=����'�'���F�3�K�K� � ���� � ���F�:�&�&�'�'���� � � � � ��+�+�o� �9�:�:�C� � ��+�+�o� �9�:�:�C�� rc ��|js|j�td|z���t|t��}|r|jstd���|�|||��g}|js@|�|�|||��|� ||��g��|rW|j rP|� |� |||j jj|jj|j|j����|js|jrBt+|dd��}|� |�||f|j|����|S)Nz!%s is not null but has no defaultz$Foreign keys must specify a `field`.� index_type)rtr`r[r#rwr�rz�extendrh� add_not_null�explicit_create_foreign_key�appendr�r�r�rGrfr�r��index�uniquer.� add_index)rrerfrg�is_foreign_key� operations�usings r� add_columnzSchemaMigrator.add_column9s��� �z� P�e�m�3��@�;�N�O�O� O�#�E�?�;�;�� � E�%�/� E��C�D�D� D��+�+�E�;��F�F�G� ��z� 8� � � ��"�"�5�+�u�=�=��!�!�%��5�5�7� 8� 8� 8� � &�d�>� &� � � ��/�/����O�)�4��O�/��O��O� %�%� &� &� &� �;� C�%�,� C��E�<��6�6�E� � � �d�n�n�U�[�N�-2�\�5�B�B� C� C� C��rc��t�r��NotImplementedError)rrerfs r�drop_foreign_key_constraintz*SchemaMigrator.drop_foreign_key_constraint`���!�!rTc�|�|���}|�||���d���t |����|r|�d��d�|j�|��D��}||vr|jr|�||��|gS|S)N� DROP COLUMN � CASCADEc��g|] }|j�� Sr3�rq)r�� foreign_keys rr�z.SchemaMigrator.drop_column.<locals>.<listcomp>ns1��F�F�F�� � �F�F�Fr) rRrlrarbrr�get_foreign_keys�explicit_delete_foreign_keyr�)rrerf�cascaderk� fk_columnss r� drop_columnzSchemaMigrator.drop_columnds������!�!�� � � �3�� &� &� �'�/� "� "� �#�f�[�!�!� "� "� "� � $� �K�K� � #� #� #�F�F�#�}�=�=�e�D�D�F�F�F� � �*� $� $��)I� $��4�4�U�K�H�H�#�N� N�� rc��|�|���|���d���t |�����d���t |����S)N� RENAME COLUMN � TO r~)rre�old_name�new_names r� rename_columnzSchemaMigrator.rename_columnvsh�����d�/�/�1�1�5�9�9���*�+�+���V�H�%�%�&�&��������V�H�%�%�&�&�  (rc�z�|�|���||���d��S)Nz SET NOT NULL�rrrRra�rrerqs rr�zSchemaMigrator.add_not_nulls4�����t�0�0�2�2�E�6�B�B����)�)� +rc�z�|�|���||���d��S)Nz DROP NOT NULLr�r�s r� drop_not_nullzSchemaMigrator.drop_not_null�s5�����t�0�0�2�2�E�6�B�B���)�*�*� ,rc���|�td���t|��r |��}t|t��r$|�d��rt |��}|�|���|���d��� t|�����d��� |��S)N� `default` must be not None/NULL.�r��'rnz SET DEFAULT ) r[r r#�str�endswithr�rlrRrarbr)rrerqr`s r�add_column_defaultz!SchemaMigrator.add_column_default�s��� �?��?�@�@� @� �W� � � ��g�i�i�G� �g�s� #� #� #��(8�(8��(D�(D� #��'�l�l�G����d�/�/�1�1�5�9�9���)�*�*���V�F�^�^�$�$����)�)���W���  rc���|�|���|���d���t |�����d��S)Nrnz DROP DEFAULTr~r�s r�drop_column_defaultz"SchemaMigrator.drop_column_default�sS�����d�/�/�1�1�5�9�9���)�*�*���V�F�^�^�$�$����)�)�  +rc�j�|���}|�|||���d���|�|����}|�Lt |t ��st|��}|�d���|��}|S)Nz TYPE z USING )rRrrrarb� ddl_datatyper#r r��rrerqrg�castrks r�alter_column_typez SchemaMigrator.alter_column_type�s������!�!���� �c�5�&�1�1����!�!���E�&�&�s�+�+�,�,� � � ��d�D�)�)� !��4�y�y���+�+�i�(�(�,�,�T�2�2�C�� rc��|�|���|���d���t |����S)Nz RENAME TO r~�rr�r�s r� rename_tablezSchemaMigrator.rename_table�sG�����d�/�/�1�1�8�<�<����'�'���V�H�%�%�&�&� (rc��� �|���}t||��}t|��� � fd�|D��}t|� |||���}|�|��S)Nc�:��g|]}t�j|����Sr3)r.�c)r�rq� table_objs �rr�z,SchemaMigrator.add_index.<locals>.<listcomp>�s%���C�C�C��� � �V�,�,�C�C�Cr)r�r�)rRrK�Table�Indexrb) rrerHr�r�rkrI�colsr�r�s @rr�zSchemaMigrator.add_index�so������!�!��$�U�G�4�4� ��%�L�L� �C�C�C�C�7�C�C�C���j�)�T�&��N�N�N���w�w�u�~�~�rc��|����d���t|����S)N� DROP INDEX �rRrarbr�rrerIs r� drop_indexzSchemaMigrator.drop_index�s5����������'�'���V�J�'�'�(�(� *r)NNN)Tr)FN)r/r0r1r�r�rrR� classmethodr]r;rhrlrrrzr�r�r�rxr�r�r�r�r�r�r�r�r�r�r�r�r�r3rrrMrM�s�������"'��"'��!�!�!�/�/�/�� @� @��[� @�� !� !��Y� !�>�>�>�&�&�&� ����Y��(�"�"��Y�"��G�G��Y�G��$�$��Y�$� � � ��=A�37�����Y��2�$�$��Y�$�L�"�"��Y�"������Y��"�(�(��Y�(��+�+��Y�+� �,�,��Y�,� ����Y��"�+�+��Y�+�� � � ��Y� ��(�(��Y�(� �����Y���*�*��Y�*�*�*rrMc�J��eZdZd�Zed���Ze�fd���Z�xZS)rVc�|�d}|j�||z��}d�|���D��S)Nai SELECT pg_attribute.attname FROM pg_index, pg_class, pg_attribute WHERE pg_class.oid = '%s'::regclass AND indrelid = pg_class.oid AND pg_attribute.attrelid = pg_class.oid AND pg_attribute.attnum = any(pg_index.indkey) AND indisprimary; c��g|] }|d�� S�rr3)r��rows rr�z;PostgresqlMigrator._primary_key_columns.<locals>.<listcomp>�s��4�4�4�3��A��4�4�4r)r� execute_sql�fetchall)r�tbl�query�cursors r�_primary_key_columnsz'PostgresqlMigrator._primary_key_columns�sB��  ����*�*�5�3�;�7�7��4�4�&�/�/�"3�"3�4�4�4�4rc�V�|����d|z��S)NzSET search_path TO %s)rRra)r� schema_names r�set_search_pathz"PostgresqlMigrator.set_search_path�s'���������0�;�>�?�?� Arc���|�|��}tt|��}|�||d���g}t |��dkr�|�d|d�d�}d}|j�||f��}t|�����r7|�d|d�d�} |� |�|| ����|S)NT)r,�r=r�_seqz� SELECT 1 FROM information_schema.sequences WHERE LOWER(sequence_name) = LOWER(%s) ) r��superrVr�rBrr��bool�fetchoner�) rr�r��pk_names� ParentClassr��seq_namer�r�� new_seq_name� __class__s �rr�zPostgresqlMigrator.rename_table�s�����,�,�X�6�6���.��5�5� � � $� $�X�x�d� $� K� K�M� � �x�=�=�A� � �&.�h�h��� � � �<�H��E� �]�.�.�u�x�k�B�B�F��F�O�O�%�%�&�&� -�.6�h�h��� � � �D� ��!�!�+�":�":��l�#,�#,�-�-�-��r)r/r0r1r�r;r�r�� __classcell__)r�s@rrVrV�sq������� 5� 5� 5��A�A��Y�A� ������Y�����rrVc�.�eZdZdZd�Zed���ZdS)rTTc��dSrr3r�s rrxz%CockroachDBMigrator.add_inline_fk_sql���� �rc��|����d���t|�����d��S)Nr�r�r�r�s rr�zCockroachDBMigrator.drop_index�sB����������'�'���V�J�'�'�(�(����$�$�  &rN)r/r0r1r�rxr;r�r3rrrTrT�sD������"&�� � � ��&�&��Y�&�&�&rrTc�X�eZdZed���Zed���Zed���Zdd�ZdS)� MySQLColumnc��|jdkS)N�PRI��pkrQs r�is_pkzMySQLColumn.is_pk ����w�%��rc��|jdkS)N�UNIr rQs r� is_uniquezMySQLColumn.is_uniquer rc��|jdkS)N�YES)rtrQs r�is_nullzMySQLColumn.is_nulls���y�E�!�!rNc��|�|j}|�|j}t|��t|j��g}|jr"|�td����|r#|�td����n"|�td����|jr"|�td����|jr'|�t|j����t|��S)Nr��NULL�NOT NULLz PRIMARY KEY) rrurr�� definitionrr�r �extrar )rrfr�partss rrbzMySQLColumn.sqls��� �?��l�G� � ��)�K� �;� � � ��� � �"�� �>� (� �L�L��X��� '� '� '� � *� �L�L��V��� %� %� %� %� �L�L��Z��� )� )� )� �:� -� �L�L��]�+�+� ,� ,� ,� �:� *� �L�L��T�Z��� )� )� )�����r�NN)r/r0r1�propertyr rrrbr3rrrrsw������ � � ��X� �� � ��X� ��"�"��X�"������rr�_Column)rurrtr r`rc���eZdZdZdZd�Zed���Zd�Zd�Z ed���Z d�Z ed���Z ed ���Z ed ���Zedd ���Zed ���Zd S)rXTc��|�||���d���t|����S)N� MODIFY rorps rrrzMySQLMigrator._alter_column/s9�����c�5�)�)����$�$���V�F�^�^�$�$� &rc���|����d���t|�����d���t|����S)Nz RENAME TABLE r�r�r�s rr�zMySQLMigrator.rename_table5sU����������)�)���V�H�%�%�&�&��������V�H�%�%�&�&�  (rc��|j�d|z��}|���}|D]}t|�}|j|kr|cS�dS)NzDESCRIBE `%s`;F)rr�r�rru)rrerfr��rowsr�rqs r�_get_column_definitionz$MySQLMigrator._get_column_definition>se����*�*�+;�e�+C�D�D����� � ��� � �C� �#�&�F��{�k�)�)�� � � �*��urc��|j�d||f��}|���}|std|�d|�d����|dS)Nz�SELECT constraint_name FROM information_schema.key_column_usage WHERE table_schema = DATABASE() AND table_name = %s AND column_name = %s AND referenced_table_name IS NOT NULL AND referenced_column_name IS NOT NULL;z+Unable to find foreign key constraint for "z " on table "z".r)rr�r��AttributeError)rrerfr�r)s r�get_foreign_key_constraintz(MySQLMigrator.get_foreign_key_constraintGss����*�*�3��K� �"�"�����"�"��� >� �.�).��� � � �=�>�>� >��a�y�rc���|�||��}|�|���|���d���t |����S)Nz DROP FOREIGN KEY )r%rlrRrarbr)rrerf� fk_constraints rr�z)MySQLMigrator.drop_foreign_key_constraintXs]���7�7��{�K�K� ����d�/�/�1�1�5�9�9���-�.�.���V�M�*�*�+�+� -rc��dSrr3r�s rrxzMySQLMigrator.add_inline_fk_sql`rrc���|�||��}|�|���|���d���|�d�����}t d�|j�|��D����}||vr|S||}|�||��||� |||j |j ��fS)NrF�rc3�(K�|] }|j|fV��dSrr��r��fks r� <genexpr>z-MySQLMigrator.add_not_null.<locals>.<genexpr>k�<����=�=���Y��O�=�=�=�=�=�=r) r"rlrRrarb�dictrr�r�r�� dest_table� dest_column)rrerq� column_defr�� fk_objects� fk_metadatas rr�zMySQLMigrator.add_not_nullcs���0�0���?�?� ��%��d�&7�&7�&9�&9�5�A�A� ���,�,���Z�^�^�E�^�:�:�;�;� � �=�=��m�4�4�U�;�;�=�=�=�=�=� � �� #� #�� � ��(� ��0�0���?�?���/�/����*��+� -�-�.� .rc��|�||��}|jrtd���|�|���|���d���|�d�����S)NzPrimary keys can not be nullrTr*)r"r r[rlrRrarbr�s rr�zMySQLMigrator.drop_not_nullzs{���,�,�U�F�;�;�� �<� =��;�<�<� <����d�/�/�1�1�5�9�9����$�$���V�Z�Z��Z�-�-�.�.� 0rc�L�td�|j�|��D����}||v}|�||��}|�|���|���d���t|�����d���|�|�����}|rA||}|� ||��||� |||j |j ��gS|S)Nc3�(K�|] }|j|fV��dSrr�r,s rr.z.MySQLMigrator.rename_column.<locals>.<genexpr>�r/rz CHANGE r})rf) r0rr�r"rlrRrarbrr�r�r1r2) rrer�r�r4r�rq� rename_ctxr5s rr�zMySQLMigrator.rename_column�s*���=�=��m�4�4�U�;�;�=�=�=�=�=� �"�Z�/���,�,�U�H�=�=���#�|�D�$5�$5�$7�$7��?�?��w�z�*�*��s�6�(�+�+�,�,��w�s�|�|��s�6�:�:�(�:�;�;�<�<� � � �$�X�.�K��0�0���A�A���/�/����*��+� -�-�� �� rNc�P�|�td���|���}|�||���d���t |�����d���|�|����S)Nz5alter_column_type() does not support cast with MySQL.rr})r[rRrlrarbrrvr�s rr�zMySQLMigrator.alter_column_type�s��� � ��&�'�'� '����!�!�����c�5�)�)����$�$���V�F�^�^�$�$��������U�Y�Y�s�^�^�$�$�  &rc���|����d���t|�����d���t|����S)Nr�z ON r�r�s rr�zMySQLMigrator.drop_index�sS����������'�'���V�J�'�'�(�(��������V�E�]�]�#�#�  %rr)r/r0r1r�r�rrr;r�r"r%r�rxr�r�r�r�r�r3rrrXrX+s������"&��"&��&�&�&� �(�(��Y�(�������"�-�-��Y�-� � � ��.�.��Y�.�,�0�0��Y�0�����Y��6� &� &� &��Y� &��%�%��Y�%�%�%rrXc��eZdZdZejd��Zejd��Zejd��Zejdej ��Z d�Z d�Z e d���Zd �Ze dd ���Ze dd ���Ze d���Ze d���Ze d���Ze d���Ze dd���Ze d���Ze d���Ze dd���ZdS)rZz� SQLite supports a subset of ALTER TABLE queries, view the docs for the full details http://sqlite.org/lang_altertable.html z (.+?)\((.+)\)z(?:[^,(]|\([^)]*\))+z ["`']?([\w]+)z FOREIGN KEY\s+\("?([\w]+)"?\)\s+c�^�|j�d|z��}d�|jD��S)Nzselect * from "%s" limit 1c��g|] }|d�� Sr�r3)r�r*s rr�z4SqliteMigrator._get_column_names.<locals>.<listcomp>�s��4�4�4�D��Q��4�4�4r)rr�� description�rre�ress r�_get_column_namesz SqliteMigrator._get_column_names�s3���m�'�'�(D�u�(L�M�M��4�4�C�O�4�4�4�4rc��|j�dd|���g��}|���S)NzBselect name, sql from sqlite_master where type=? and LOWER(name)=?re)rr��lowerr�r@s r�_get_create_tablez SqliteMigrator._get_create_table�s>���m�'�'�.� �e�k�k�m�m� $�&�&���|�|�~�~�rc �� ���td��j�|��D����}|���|vrt d|�d|�d������|��\}}�j�|��}�j�|��tj dd|��}�j � |��� ��\}}�j �|��} d�| D��} g} g} g} d}| D�]}�j�|��� ��\}||kr||||��}|rm| �|��| �|���j�|��� ��\}| �|����| �|��|����|��s*| �|��| �|����t't)| | ����}|�|���d �}�sd �}n �|kr��fd �}g}| D]^}�j�|��}|�)|� ��d |kr ||��}|r|�|���_|d z}tjd|ztj��}|� d|z|��}d�|��}t5t7d��t9|��g��t7|����d|�d���g}t5t7d��t9|��t=d�| D����t7d��t?d�| D����t7d��t9|��f��}t5t7d��t9|��g��}|||�� ||��gz }tCd�|��D]u}||j"vr(|�t7|j#�����3�r@��$|j#|���}|�"|�t7|�����v|S)Nc3�HK�|]}|j���V��dSr)rurDr�s rr.z0SqliteMigrator._update_column.<locals>.<genexpr>�sL����F�F� ��k�'�'�)�)�F�F�F�F�F�FrzColumn "z" does not exist on "�"z\s+r}c�6�g|]}|�����Sr3��strip�r��cols rr�z1SqliteMigrator._update_column.<locals>.<listcomp>�s ��<�<�<�s�s�y�y�{�{�<�<�<r)zforeign zprimary z constraint zcheck c��|Srr3�r3s r�<lambda>z/SqliteMigrator._update_column.<locals>.<lambda>s��*�rc��dSrr3rOs rrPz/SqliteMigrator._update_column.<locals>.<lambda>s��d�rc�@���j�d�z|��S)NzFOREIGN KEY ("%s") )�fk_re�sub)r3� new_columnrs ��rrPz/SqliteMigrator._update_column.<locals>.<lambda> s"���d�j�n�n�%� �2��/�/�rr�__tmp__z ("?)%s("?)z\1%s\2�, zDROP TABLE IF EXISTSr�r�z INSERT INTOc�,�g|]}t|����Sr3rrLs rr�z1SqliteMigrator._update_column.<locals>.<listcomp>'s��F�F�F�c�f�S�k�k�F�F�Fr�SELECTc�,�g|]}t|����Sr3rrLs rr�z1SqliteMigrator._update_column.<locals>.<listcomp>)s��H�H�H�3�6�#�;�;�H�H�Hr�FROMz DROP TABLEc��|jSr)rb)�idxs rrPz/SqliteMigrator._update_column.<locals>.<lambda>6s����r)%�setr� get_columnsrDr[rE� get_indexesr��rerT� column_re�search�groups�column_split_re�findall�column_name_re�matchr�� startswithr0�zip�getrS�compile�IrAr r�rrKrrr��filterrHrb� _fix_index)rre�column_to_updater7rH� create_table�indexes� raw_create� raw_columns� split_columns� column_defs�new_column_defs�new_column_names�original_column_names�constraint_termsr3rf�new_column_def�original_to_new� fk_filter_fn�cleaned_columnsrh� temp_table�rgx�create�queries�populate_table� drop_originalr�rbrUs` @r�_update_columnzSqliteMigrator._update_column�sD�����F�F�$(�M�$=�$=�e�$D�$D�F�F�F�F�F�� � !� !� #� #�7� 2� 2��*�.�.�.����7�8�8� 8�#�4�4�U�;�;���|��-�+�+�E�2�2�� � �&�&�u�-�-�-��v�f�c�<�8�8� �#'�.�"7�"7� �"E�"E�"L�"L�"N�"N�� �K��,�4�4�[�A�A� �<�<�m�<�<�<� ����� "��L��%� >� >�J��.�4�4�Z�@�@�G�G�I�I�L�K��.�.�.�!#��K��!<�!<��!�9�#�*�*�>�:�:�:�)�0�0��=�=�=�#'�#6�#<�#<�&�$(�$(�(.����!�K�$�+�+�K�8�8�8���&�&�z�2�2�2�"�'�'�)�)�4�4�5E�F�F�>�$�+�+�K�8�8�8�)�0�0��=�=�=���s�#8�:J�K�K�L�L��$�(�(�)9�:�:� �4�4� �� �2�2�L�L� �+� +� +������L���)� 3� 3�J��J�$�$�Z�0�0�E�� �U�\�\�^�^�A�%6�:J�%J�%J�)�\�*�5�5� �� 3��&�&�z�2�2�2���Y�&� ��j���-�r�t�4�4����� �� #� ���� �)�)�O�,�,�� �c�0�1�1�6�*�3E�3E�F� G� G� �V�\�\�^�^�^�^�W�W�W�5� 6� 6�8�� "� � � � � �:� � � �F�F�5E�F�F�F� G� G� ��M�M� �H�H�2G�H�H�H� I� I� ��K�K� �5�M�M�#����!�#�l�"3�"3�V�E�]�]�!C�D�D� � � � � � � �j�%� 0� 0�2� 2���/�/��9�9� -� -�E��u�}�4�4����s�5�9�~�~�.�.�.�.�� -��o�o�e�i�1A�:�N�N���?��N�N�3�s�8�8�,�,�,���rc��|�|��}t|��dkr|�||��S|�dd��\}}t|�|����dkr|�d|�||����S|�dd��d�d��}d�|D��}g}|D]I} t jd|z| ��r|| t|��d�z} |�| ���J|�dd �d �|D�����d�S) N��(r�r�r�,c�8�g|]}|�d����S)z"`[]' rJ)r��parts rr�z-SqliteMigrator._fix_index.<locals>.<listcomp>Rs$��;�;�;�T�4�:�:�i�(�(�;�;�;rz%s(?:[\'"`\]]?\s|$)rWc3� K�|] }d|zV�� dS)z"%s"Nr3)r�r�s rr.z,SqliteMigrator._fix_index.<locals>.<genexpr>]s&����)D�)D��&�1�*�)D�)D�)D�)D�)D�)Dr)�splitrB�replace�rsplitrarhr�rA) rrbrprUr�lhs�rhsrH�cleanrqs rrozSqliteMigrator._fix_index@sf��� � �*�+�+�� �u�:�:��?�?��;�;�/��<�<� <��:�:�c�1�%�%���S� �s�y�y�)�*�*� +� +�q� 0� 0�!�c�c�3�;�;�/?��#L�#L�#L�M� M�� � �3��"�"�1�%�+�+�C�0�0��;�;�U�;�;�;�� ��� !� !�F��x�.�1A�A�6�J�J� E�#�f�S�1A�-B�-B�-C�-C�&D�D�� �L�L�� � � � ��3�3�� � �)D�)D�e�)D�)D�)D� D� D� D� D�E�ErTFc��tjdkra|s_|���}|�||���d���t |����|S|�||d���S)N)��#rr�c��dSrr3)�a�bs rrPz,SqliteMigrator.drop_column.<locals>.<lambda>gs��D�r)r�sqlite_version_inforRrlrarbrr�)rrerfr��legacyrks rr�zSqliteMigrator.drop_column_s�� � &�*� 4� 4�V� 4��#�#�%�%�C� � � �s�E� *� *��g�o�&�&��c�&��%�%�&�&�&��J��"�"�5�+�7H�7H�I�I�Irc�|��tjdkr�|s�|�|���|���d���t |�����d���t �����S�fd�}|�|||��S)N)r��rr�r�c�0��|�|���Sr�r�)rfr3r�s �r�_renamez-SqliteMigrator.rename_column.<locals>._renamers����%�%�k�8�<�<� <r)rr�rlrRrarbrr�)rrer�r�r�r�s ` rr�zSqliteMigrator.rename_columnis���� � &�*� 4� 4�V� 4��!�\�$�"3�"3�"5�"5�u�=�=��W�.�/�/��S���)�)�*�*��W�V�_�_��S���)�)�*�*�  ,�  =� =� =� =� =��"�"�5�(�G�<�<�<rc�6�d�}|�|||��S)Nc� �|dzS)Nz NOT NULLr3�rfr3s r� _add_not_nullz2SqliteMigrator.add_not_null.<locals>._add_not_nullxs ��� �+� +r�r�)rrerqr�s rr�zSqliteMigrator.add_not_nullvs)�� ,� ,� ,��"�"�5�&�-�@�@�@rc�6�d�}|�|||��S)Nc�.�|�dd��S)Nr�r�r�s r�_drop_not_nullz4SqliteMigrator.drop_not_null.<locals>._drop_not_null~s���%�%�j�"�5�5� 5rr�)rrerqr�s rr�zSqliteMigrator.drop_not_null|s)�� 6� 6� 6��"�"�5�&�.�A�A�Arc�����td���t���r ����t�t��r.��d��s����sd�z��fd�}|�|||��S)Nr�r�z'%s'c���|d�zzS)Nz DEFAULT %sr3)rfr3r`s �r� _add_defaultz7SqliteMigrator.add_column_default.<locals>._add_default�s���� �� 7�7� 7r)r[r r#r�r��isdigitr�)rrerqr`r�s ` rr�z!SqliteMigrator.add_column_default�s���� �?��?�@�@� @� �W� � � ��g�i�i�G� �w�� $� $� '�W�-=�-=�j�-I�-I� '��O�O�%�%� '��w�&�G� 8� 8� 8� 8� 8��"�"�5�&�,�?�?�?rc�6�d�}|�|||��S)Nc�l�tjdd|tj��}|���S)NzDEFAULT\s+[\w"\'\(\)]+(\s|$)r�)rarTrmrK)rfr3rMs r� _drop_defaultz9SqliteMigrator.drop_column_default.<locals>._drop_default�s(���&�8�"�j�"�$�O�O�C��9�9�;�;� rr�)rrerqr�s rr�z"SqliteMigrator.drop_column_default�s+�� � � ��"�"�5�&�-�@�@�@rNc�����|�td���|�������fd�}|�|�|��S)Nz6alter_column_type() does not support cast with Sqlite.c���������}��t������|�����\}}|Sr)rvrbrr�)rfr3� node_listrbr=rqrkrgs ���r�_alter_column_typez<SqliteMigrator.alter_column_type.<locals>._alter_column_type�sL���� � �#���I��W�W�V�F�^�^�,�,�0�0��;�;�A�A�C�C�F�C���Jr)r[rRr�)rrerqrgr�r�rks `` @rr�z SqliteMigrator.alter_column_type�sq����� � ��'�(�(� (����!�!�� � � � � � � ��"�"�5�&�2D�E�E�Erc��t�rr�rs rr�zSqliteMigrator.add_constraint�r�rc��t�rr�r�s rr�zSqliteMigrator.drop_constraint�r�rc��t�rr�)rrerfrgr�r�s rr�z)SqliteMigrator.add_foreign_key_constraint�s ��"�!r)TF)Frr)r/r0r1r2rarlrbrergrmrSrBrEr;r�ror�r�r�r�r�r�r�r�r�r�r3rrrZrZ�s����������� �+�,�,�I� �b�j�!8�9�9�O��R�Z� 4�5�5�N� �B�J�:�B�D� A� A�E�5�5�5�����q�q��Y�q�fF�F�F�>�J�J�J��Y�J�� =� =� =��Y� =��A�A��Y�A� �B�B��Y�B� � @� @��Y� @��A�A��Y�A� � F� F� F��Y� F��"�"��Y�"��"�"��Y�"��=A�"�"�"��Y�"�"�"rrZc�8�|D]}|����dSr)r%)r�rr;s r�migrater��s*����� �� � ������r) r2� collectionsrr9rCra�peeweerrrr r r r r rrr�playhouse.cockroachdbr� ImportError�objectrr;rKrMrVrTrrXrZr�r3rr�<module>r�s���q�q�d#�"�"�"�"�"��������� � � � ����� � � � � � �#�#�#�#�#�#�������������������������������������������������,�,�,�,�,�,��7�7�7�7�7�7�7��������������:�:�:�:�:��:�:�:�6������Q*�Q*�Q*�Q*�Q*�V�Q*�Q*�Q*�h+�+�+�+�+��+�+�+�\ &� &� &� &� &�,� &� &� &� � � � � �*�*�Y�)=�>�>� � � �FI%�I%�I%�I%�I%�N�I%�I%�I%�Xw"�w"�w"�w"�w"�^�w"�w"�w"�t����s�A#�#A-�,A-
Memory