phpcr / phpcr-shell

PHPCR Shell
MIT License
68 stars 19 forks source link

update queries - Allow set the value of one translated property. #178

Open rfanjul opened 8 years ago

rfanjul commented 8 years ago

Having the next Document and values.

screen shot 2016-06-04 at 14 02 03

I am trying to create/update a new property "extid". Tested two queries which the first one , with success result is: UPDATE nt:unstructured as a SET a.extid='1' WHERE phpcr:class="Joiz\CmsBundle\Document\ShowInstance";

However i am not be able to set the value of the property phpcr_locale:en-extid in the following second query:

UPDATE nt:unstructured as a SET a.extid=a.[phpcr_locale:en-extid] WHERE phpcr:class="Joiz\CmsBundle\Document\ShowInstance"; `

The error I got is:

[PHPCR\ValueFormatException] Invalid value for property "extid": Object values must implement PHPCR\NodeInterface, PHPCR\PropertyInterface or be \DateTime, supplied argument is of class: PHPCR\Shell\Query\ColumnOperand

dbu commented 8 years ago

@dantleech we also tried with UPDATE nt:unstructured SET extid=[phpcr_locale:en-extid] WHERE phpcr:class="Joiz\CmsBundle\Document\ShowInstance" as the example on http://phpcr.readthedocs.io/en/latest/phpcr-shell/querying.html#updating looks like the name of the document is not used in the update. but still the same error.

dantleech commented 8 years ago

You can't use dynamic properties in an update at the moment.

But I think you can use the expr() funtion as follows to achieve what you want I think:

UPDATE nt:unstructured SET extid=expr("row.node.property('phpcr_locale:en-extid')") WHERE phpcr:class="Joiz\CmsBundle\Document\ShowInstance"
dbu commented 8 years ago

Thanks for looking at it. @rfanjul does the expr work for you?

What do you mean with dynamic properties @dantleech ? That setting a property to the value of another property is not implemented? ah, i think i misread the join example... should we add a note about this in the doc? its something people are used to from SQL, so making it explicit this is not yet supported and point to the expr would help.

dantleech commented 8 years ago

it is something we could support. but indeed we could add a note in the docs now and explain that expr() can be used as a workaround.