§
    kÃ¿ay  ã                   óž   — d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z
mZ d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zi fd„ZdS )z+

Code for carrying out Update Operations

é    )ÚGraphÚVariable)ÚQueryContext)Ú_fillTemplateÚ_join)ÚevalBGPÚevalPartc                 óP   — |dk    r| j         S | j                             |¦  «        S )NÚDEFAULT)ÚgraphÚdatasetÚget_context©ÚctxÚgs     ú>/usr/lib/python3/dist-packages/rdflib/plugins/sparql/update.pyÚ_graphOrDefaultr      s)   € ØˆI‚~€~ØŒyÐàŒ{×&Ò& qÑ)Ô)Ð)ó    c                 ó  ‡ — |dk    r‰ j         gS |dk    r%ˆ fd„‰ j                             ¦   «         D ¦   «         S |dk    r&t          ‰ j                             ¦   «         ¦  «        S ‰ j                             |¦  «        gS )z!
    return a list of graphs
    r   ÚNAMEDc                 ó>   •— g | ]}|j         ‰j        j         k    ¯|‘ŒS © )Ú
identifierr   )Ú.0Úcr   s     €r   ú
<listcomp>z_graphAll.<locals>.<listcomp>   s1   ø€ ð 
ð 
ð 
Ø°´ÀÄÔAUÒ1UÐ1UˆAÐ1UÐ1UÐ1Ur   ÚALL)r   r   ÚcontextsÚlistr   r   s   ` r   Ú	_graphAllr       sš   ø€ ð 	ˆI‚~€~Ø”	ˆ{ÐØ	
ˆgŠˆð
ð 
ð 
ð 
Ø”{×+Ò+Ñ-Ô-ð
ñ 
ô 
ð 	
ð 
ˆeŠˆÝ�C”K×(Ò(Ñ*Ô*Ñ+Ô+Ð+à”×'Ò'¨Ñ*Ô*Ð+Ð+r   c                 ó”   — |j         r$|                      |j        d|j         ¬¦  «         dS |                      |j        d¬¦  «         dS )z4
    http://www.w3.org/TR/sparql11-update/#load
    F)ÚdefaultÚpublicIDT©r"   N)ÚgraphiriÚloadÚiri)r   Úus     r   ÚevalLoadr)   $   sN   € ð
 	„zð &Ø�Š�” °´
ˆÑ;Ô;Ð;Ð;Ð;à�Š�” ˆÑ%Ô%Ð%Ð%Ð%r   c                 ó²   — | j                              |j        ¦  «        }t          |¦  «        dk    rt	          d|j        z  ¦  «        ‚t	          d¦  «        ‚)z6
    http://www.w3.org/TR/sparql11-update/#create
    r   zGraph %s already exists.zCreate not implemented!)r   r   r%   ÚlenÚ	Exceptionr   ©r   r(   r   s      r   Ú
evalCreater.   /   sO   € ð 	Œ×Ò ¤
Ñ+Ô+€AÝ
ˆ1�v„v�‚z€zÝÐ2°Q´\ÑAÑBÔBÐBÝ
Ð-Ñ
.Ô
.Ð.r   c                 ó`   — t          | |j        ¦  «        D ]}|                     d¦  «         ŒdS )z5
    http://www.w3.org/TR/sparql11-update/#clear
    ©NNNN)r    r%   Úremover-   s      r   Ú	evalClearr2   9   s?   € õ
 �s˜AœJÑ'Ô'ð %ð %ˆØ	�ŠÐ#Ñ$Ô$Ð$Ð$ð%ð %r   c                 óº   — | j         j        j        r9t          | |j        ¦  «        D ]!}| j         j                             |¦  «         Œ"dS t          | |¦  «         dS )z4
    http://www.w3.org/TR/sparql11-update/#drop
    N)r   ÚstoreÚgraph_awarer    r%   Úremove_graphr2   r-   s      r   ÚevalDropr7   B   sm   € ð „{ÔÔ$ð Ý˜3 ¤
Ñ+Ô+ð 	.ð 	.ˆAØŒKÔ×*Ò*¨1Ñ-Ô-Ð-Ð-ð	.ð 	.õ 	�#�qÑÔÐÐÐr   c                 ó�   — | j         }||j        z  }|j        D ],}| j                             |¦  «        }||j        |         z  }Œ-dS )z:
    http://www.w3.org/TR/sparql11-update/#insertData
    N©r   ÚtriplesÚquadsr   r   ©r   r(   r   Úcgs       r   ÚevalInsertDatar>   M   óZ   € ð
 	Œ	€AØˆŒ�N€Að ŒWð ð ˆØŒ[×$Ò$ QÑ'Ô'ˆØ
ˆaŒg�aŒjÑˆˆðð r   c                 ó�   — | j         }||j        z  }|j        D ],}| j                             |¦  «        }||j        |         z  }Œ-dS )z:
    http://www.w3.org/TR/sparql11-update/#deleteData
    Nr9   r<   s       r   ÚevalDeleteDatarA   \   r?   r   c                 ó   — t          | |j        ¦  «        }|j        D ]g}| j                             |¦  «        }|                      |¦  «        }t          |t          t          ||j        |         ¦  «        ¦  «        ¦  «        }Œh|D ]v}| j        }|t          |j        |¦  «        z  }|j        D ]M}| j                             | 
                    |¦  «        ¦  «        }|t          |j        |         |¦  «        z  }ŒNŒwdS )z;
    http://www.w3.org/TR/sparql11-update/#deleteWhere
    N)r   r:   r;   r   r   Ú	pushGraphr   r   r   r   Úget)r   r(   Úresr   r=   r   s         r   ÚevalDeleteWhererF   k   sü   € õ
 �#�q”yÑ
!Ô
!€CØŒWð 7ð 7ˆØŒ[×$Ò$ QÑ'Ô'ˆØ�MŠM˜"ÑÔˆÝ�C��g a¨¬°¬Ñ4Ô4Ñ5Ô5Ñ6Ô6ˆˆàð /ð /ˆØŒIˆØ	�]˜1œ9 aÑ(Ô(Ñ(ˆà”ð 	/ð 	/ˆAØ”×(Ò(¨¯ª¨q©¬Ñ2Ô2ˆBØ•- ¤¨¤
¨AÑ.Ô.Ñ.ˆBˆBð	/ð	/ð /r   c                 ó†  — | }|j         r|d}|j         D ]r}|j        rD|s%t          ¦   «         }|                      |¦  «        } d}|                      |j        d¬¦  «         ŒM|j        r|j        }|                      |d¬¦  «         Œs|j         s;|j        r4| j                             |j        ¦  «        }|                      |¦  «        } t          | |j
        ¦  «        }|j         r?|r|} |j        r4| j                             |j        ¦  «        }|                      |¦  «        } |D �]}| j        }|j        r�|t          |j        j        |¦  «        z  }|j        j                             ¦   «         D ]E\  }}	| j                             |                     |¦  «        ¦  «        }
|
t          |	|¦  «        z  }
ŒF|j        r�|t          |j        j        |¦  «        z  }|j        j                             ¦   «         D ]E\  }}	| j                             |                     |¦  «        ¦  «        }
|
t          |	|¦  «        z  }
ŒF�Œd S )NFTr$   )Úusingr"   r   rC   r&   ÚnamedÚ
withClauser   r   r	   Úwherer   Údeleter   r:   r;   ÚitemsrD   Úinsert)r   r(   ÚoriginalctxÚotherDefaultÚdÚdgr   rE   r   Úqr=   s              r   Ú
evalModifyrT      sK  € à€Kð 	„wð +ØˆØ”ð 	+ð 	+ˆAØŒyð +à#ð (å™œ�BØŸ-š-¨Ñ+Ô+�CØ#'�Là—’˜œ¨D�Ñ1Ô1Ð1Ð1à”ð +Ø”G�Ø—’˜ E�Ñ*Ô*Ð*øð Œ7ð �q”|ð ØŒK×#Ò# A¤LÑ1Ô1ˆØ�mŠm˜AÑÔˆå
�3˜œÑ
 Ô
 €Cà„wð #Øð 	ØˆCØŒ<ð 	#Ø”×'Ò'¨¬Ñ5Ô5ˆAØ—-’- Ñ"Ô"ˆCàð *ñ *ˆØŒYˆØŒ8ð 	*Ø•- ¤Ô 0°!Ñ4Ô4Ñ4ˆBàœœ×,Ò,Ñ.Ô.ð *ð *‘��1Ø”[×,Ò,¨Q¯UªU°1©X¬XÑ6Ô6�Ø•m A qÑ)Ô)Ñ)��àŒ8ð 	*Ø•- ¤Ô 0°!Ñ4Ô4Ñ4ˆBàœœ×,Ò,Ñ.Ô.ð *ð *‘��1Ø”[×,Ò,¨Q¯UªU°1©X¬XÑ6Ô6�Ø•m A qÑ)Ô)Ñ)��ùð*ð *r   c                 óˆ   — |j         \  }}t          | |¦  «        }t          | |¦  «        }|j        |j        k    rdS ||z  }dS )zY

    add all triples from src to dst

    http://www.w3.org/TR/sparql11-update/#add
    N)r   r   r   ©r   r(   ÚsrcÚdstÚsrcgÚdstgs         r   ÚevalAddr[   ¼   sN   € ð Œw�H€Cˆå˜3 Ñ$Ô$€DÝ˜3 Ñ$Ô$€Dà„˜$œ/Ò)Ð)ØˆàˆD�L€D€D€Dr   c                 ó@  — |j         \  }}t          | |¦  «        }t          | |¦  «        }|j        |j        k    rdS |                     d¦  «         ||z  }| j        j        j        r!| j        j                             |¦  «         dS |                     d¦  «         dS )zš

    remove all triples from dst
    add all triples from src to dst
    remove all triples from src

    http://www.w3.org/TR/sparql11-update/#move
    Nr0   )r   r   r   r1   r   r4   r5   r6   rV   s         r   ÚevalMover]   Î   s¥   € ð Œw�H€Cˆå˜3 Ñ$Ô$€DÝ˜3 Ñ$Ô$€Dà„˜$œ/Ò)Ð)Øˆà‡K‚KÐ"Ñ#Ô#Ð#àˆD�L€Dà
„{ÔÔ$ð (ØŒÔ×&Ò& tÑ,Ô,Ð,Ð,Ð,à�ŠÐ&Ñ'Ô'Ð'Ð'Ð'r   c                 ó²   — |j         \  }}t          | |¦  «        }t          | |¦  «        }|j        |j        k    rdS |                     d¦  «         ||z  }dS )zz

    remove all triples from dst
    add all triples from src to dst

    http://www.w3.org/TR/sparql11-update/#copy
    Nr0   )r   r   r   r1   rV   s         r   ÚevalCopyr_   ê   sa   € ð Œw�H€Cˆå˜3 Ñ$Ô$€DÝ˜3 Ñ$Ô$€Dà„˜$œ/Ò)Ð)Øˆà‡K‚KÐ"Ñ#Ô#Ð#àˆD�L€D€D€Dr   c                 óV  — |D �]¤}t          d„ |                     ¦   «         D ¦   «         ¦  «        }t          | |¬¦  «        }|j        |_        	 |j        dk    rt          ||¦  «         �n+|j        dk    rt          ||¦  «         �n|j        dk    rt          ||¦  «         nò|j        dk    rt          ||¦  «         nÖ|j        dk    rt          ||¦  «         nº|j        dk    rt          ||¦  «         nž|j        d	k    rt          ||¦  «         n‚|j        d
k    rt          ||¦  «         nf|j        dk    rt          ||¦  «         nJ|j        dk    rt          ||¦  «         n.|j        dk    rt          ||¦  «         nt!          d|›�¦  «        ‚�Œ–#  |j        s‚ Y �Œ£xY wdS )ad  

    http://www.w3.org/TR/sparql11-update/#updateLanguage

    'A request is a sequence of operations [...] Implementations MUST
    ensure that operations of a single request are executed in a
    fashion that guarantees the same effects as executing them in
    lexical order.

    Operations all result either in success or failure.

    If multiple operations are present in a single request, then a
    result of failure from any operation MUST abort the sequence of
    operations, causing the subsequent operations to be ignored.'

    This will return None on success and raise Exceptions on error

    c              3   ó>   K  — | ]\  }}t          |¦  «        |fV — Œd S )N)r   )r   ÚkÚvs      r   ú	<genexpr>zevalUpdate.<locals>.<genexpr>  s1   è è € ÐNÐN±°°A�X a™[œ[¨!Ð,ÐNÐNÐNÐNÐNÐNr   )ÚinitBindingsÚLoadÚClearÚDropÚCreateÚAddÚMoveÚCopyÚ
InsertDataÚ
DeleteDataÚDeleteWhereÚModifyzUnknown update operation: N)ÚdictrM   r   ÚprologueÚnamer)   r2   r7   r.   r[   r]   r_   r>   rA   rF   rT   r,   Úsilent)r   Úupdatere   r(   r   s        r   Ú
evalUpdaterv      sö  € ð( ð "ñ "ˆåÐNÐN¸×9KÒ9KÑ9MÔ9MÐNÑNÔNÑNÔNˆå˜5¨|Ð<Ñ<Ô<ˆØ”zˆŒð	ØŒv˜ÒÐÝ˜˜aÑ Ô Ð Ñ Ø”˜7Ò"Ð"Ý˜#˜qÑ!Ô!Ð!Ñ!Ø”˜6Ò!Ð!Ý˜˜aÑ Ô Ð Ð Ø”˜8Ò#Ð#Ý˜3 Ñ"Ô"Ð"Ð"Ø”˜5’�Ý˜˜Q‘”��Ø”˜6Ò!Ð!Ý˜˜aÑ Ô Ð Ð Ø”˜6Ò!Ð!Ý˜˜aÑ Ô Ð Ð Ø”˜<Ò'Ð'Ý˜s AÑ&Ô&Ð&Ð&Ø”˜<Ò'Ð'Ý˜s AÑ&Ô&Ð&Ð&Ø”˜=Ò(Ð(Ý  QÑ'Ô'Ð'Ð'Ø”˜8Ò#Ð#Ý˜3 Ñ"Ô"Ð"Ð"å�iÀ!À!Ð EÑFÔFÐFùøð	Ø”8ð Øðñ øøøðC"ð "s   ÁEFÆ
F&N)Ú__doc__Úrdflibr   r   Úrdflib.plugins.sparql.sparqlr   Úrdflib.plugins.sparql.evalutilsr   r   Úrdflib.plugins.sparql.evaluater   r	   r   r    r)   r.   r2   r7   r>   rA   rF   rT   r[   r]   r_   rv   r   r   r   ú<module>r|      sR  ððð ð #Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ð*ð *ð *ð,ð ,ð ,ð &ð &ð &ð/ð /ð /ð%ð %ð %ðð ð ðð ð ðð ð ð/ð /ð /ð(:*ð :*ð :*ðzð ð ð$(ð (ð (ð8ð ð ð, ,.ð 6ð 6ð 6ð 6ð 6ð 6r   