Регистрация  |  Вход

Запрос возвращающий всего 65 записей получает " Aggregate query has too many rows for direct assignment"

Вот такая квери:

List<MyObject__c> myList = [SELECT name, (SELECT name, Long_Text_Field__c FROM Child_object__c) FROM MyObject__c WHERE ID =:myID];

Внезапно получаем:
Aggregate query has too many rows for direct assignment, use FOR loop

при этом данный запрос должен вернуть всего одну родительскую запись с 65 дочерними. Не много, не правда ли?

начинаем копаться и выясняем, что ошибку провоцирует поле Long_Text_Field__типа Long Text Area(131072). Применительно к данному случаю у каждой записи в этом поле сидит значение размером примерно в 1к знаков. И все равно это не так и много. Так что не понятно, почему там "too many rows "...

пришлось кверить дочерние записи отдельно, что тоже норм, но ощущение некоторого непонимания и недовольства осталось, так как это поле (его тип только что поменяли с Текст(255) на Long Text Area) еще где-нибудь вот так вот "выбьет" уже оттестированный код, и поди пойми, почему так произошло...

Вот такая квери:
[code]
List<MyObject__c> myList = [SELECT name, (SELECT name, Long_Text_Field__c FROM Child_object__c) FROM MyObject__c WHERE ID =:myID];[/code]

Внезапно получаем:
[i]Aggregate query has too many rows for direct assignment, use FOR loop[/i]

при этом данный запрос должен вернуть всего одну родительскую запись с 65 дочерними. Не много, не правда ли?

начинаем копаться и выясняем, что ошибку провоцирует поле Long_Text_Field__типа Long Text Area(131072). Применительно к данному случаю у каждой записи в этом поле сидит значение размером примерно в 1к знаков. И все равно это не так и много. Так что не понятно, почему там "too many rows "...

пришлось кверить дочерние записи отдельно, что тоже норм, но ощущение некоторого непонимания и недовольства осталось, так как это поле (его тип только что поменяли с Текст(255) на Long Text Area) еще где-нибудь вот так вот "выбьет" уже оттестированный код, и поди пойми, почему так произошло...

https://help.salesforce.com/apex/HTViewSolution?id=000002531&language=en_US
http://opfocus.com/blog/aggregate-query-has-too-many-rows-for-direct-assignment-use-for-loop/

Суть не в том, сколько данных в поле, а в его размере и способе хранения такого количества данных, т.е. в объеме выделяемой памяти для 1 записи.

К примеру, n записей в СФ занимают 4gb, а они же выгруженные в формате csv - 400mb.

Естественно это всего лишь мои догадки, с ошибкой не сталкивался.

https://help.salesforce.com/apex/HTViewSolution?id=000002531&language=en_US
http://opfocus.com/blog/aggregate-query-has-too-many-rows-for-direct-assignment-use-for-loop/

Суть не в том, сколько данных в поле, а в его размере и способе хранения такого количества данных, т.е. в объеме выделяемой памяти для 1 записи.

К примеру, n записей в СФ занимают 4gb, а они же выгруженные в формате csv - 400mb.

Естественно это всего лишь мои догадки, с ошибкой не сталкивался.

Gres
Суть не в том, сколько данных в поле, а в его размере и способе хранения такого количества данных, т.е. в объеме выделяемой памяти для 1 записи.

нет сомнений, что так оно и есть.
непонятно, почему сообщение об ошибке не просто неинформативное, а даже запутывающее..

[quote="Gres"]Суть не в том, сколько данных в поле, а в его размере и способе хранения такого количества данных, т.е. в объеме выделяемой памяти для 1 записи.[/quote]

нет сомнений, что так оно и есть. 
непонятно, почему сообщение об ошибке не просто неинформативное, а даже запутывающее..