I think Kev is right: the upgrade froze all query plans. In your DEV environment the class definition might have moved on, probably added a new field - which should cause the plan to become unfrozen but there was (is?) a bug in Caché with that. The fix is

DPV5125 - SQL: Correct frozen plan error condition of SELECT * validation

We had a patch for that for v2017.1 and it is supposed to be included in 2017.2.2, although I'm not too sure as we recently upgraded to that version and had the same problem afterwards.

I've just started evaluating Atelier two days ago, using the 'latest beta update channel', which gives me version 1.1.391.

I stumbled over this issue today. The 'non-collapsability' is just an annoying side effect. The real problem is that the members are not recognised at all and any calls to these members can not be followed and it looks like the code makes calls to methods that don't exist.

Is this seriously not fixed four months after being logged as a defect? That's a total show stopper for using Atelier. I'll have to go back to Studio.

Many thanks Stephen, that worked for me (took me a little while to get it right).

For information, I followed Andreas' advice also, contacting WRC about the possibility of an archive file. The answer was

"our development team has discussed the possibility of providing an archive with the plugin, but
given the complications of including all the dependencies and the lack of clear upgrade path have
made this a very low priority"

They suggested the same approach, adding the certificate to the java certificate store, as the solution instead.

Is there any chance of making the Atelier plugin available as a zip file that I can download and then install manually into Eclipse?

The firewall at our workplace isn't happy about some certificate issue and blocks the online install (sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.)

Yes, you can do what you want with a list property, you don't need an array property for it, even though that would make your life easier.

First of all, for optimisation purposes, add an index on your list items:

Index Bar On MyBars(ELEMENTS);
 

Then use this correlated subquery:

SELECT Name
FROM Bar
WHERE EXISTS
(SELECT ID FROM Foo WHERE FOR SOME %ELEMENT(Foo.MyBars) (%VALUE = Bar.ID))

This is a very interesting discussion. I do get the point that while our code looks like looping through a set of fields, behind the scenes the entire physical data block containing each item is pulled into memory. And if our items are inside parent objects in a p / c relationship, then the children are located in the same block and this is quite inefficient if and when we are just interested in the parents. Definitely something I hadn't properyly considered before.

But as Peter points out, mostly we are interested in looking at / processing both together, that's why they are modelled as P / C in the first place. And the marketing spiel of Intersystems for the last few decades was that the "clustering effect" achieved by hiearchical global tree structures was what made Globals so efficient, as data that is commonly used together is stored physically together.

So my personal take-away from this is not that p / c relationships are obsolete but that I need to consider more carefully the use cases for data access, in particular how likely it is that the top level information only will be required, before committing to it.