|
09.11.2012, 09:56 | #1 |
Участник
|
Сорри, что встреваю в разговор. Поддержу RVS, что Narayana "странно" задает вопросы. Просто имейте это в виду, когда "гуру" не смогут вам ответить, и проще будет сказать "Не знаю"
Цитата:
Сообщение от Narayana
Ну, дак на SQL-сервер уже уходит запрос на sql-transact, как я понимаю?
Значит, все-таки кирпичик, связывающий Х++ с SQL-сервером? То есть строки таблиц с SQL-сервера таскаются с помощью оператора select в Х++, а потом уже в соответствии со структурой запроса в Х++ формируются в конечный результат? 2. оператор Select - один из кирпичиков. Формально - верное утверждение. 3. Вывод касается только оператора SELECT? Nогда первая часть утверждения верная, вторая часть - непонятная. =) Что такое структура запроса в X++? Если вы имеете в виду целиком оператор select с табличными переменными, выбираемыми полями и условиями - то да. Если вы тут пытаетесь опять к SELECT привязать Query - то нет.
__________________
Ivanhoe as is.. |
|
09.11.2012, 11:58 | #2 |
Участник
|
Цитата:
Ну, хорошо, этот момент уже обстреляли со всех сторон, но повторюсь. Оператор select я воспринимаю как аргумент функции (в математическом смысле) Query. При этом select имеет внутреннюю реализацию, описанную S.Kuskov-ым. |
|
09.11.2012, 12:10 | #3 |
Участник
|
Дак, что на выходе?
Я имею в виду временные таблицы...
Mazzy пишет: "2.1. Query - объект, который позволяет строить СТРОКУ ЗАПРОСА вида "select ... from ... where ... join ...". Эта строка запроса так или иначе уходит на SQL-сервер." Понимаю, что выглядит как занудство, но... Временная таблица живет в памяти или отдельно создаваемом для нее файле. Если строка запроса "так или иначе уходит на SQL-сервер", то что получается, - временную таблицу запрос не обрабатывает и оператор select не действует? |
|
09.11.2012, 13:02 | #4 |
Участник
|
Narayana, в принципе, вам уже ответили.
но попробую и я вставить. Цитата:
Прежде всего, хочу извиниться за упрощение. Полностью утверждение выглядит так: = строка запроса уходит в некий преобразователь запросов Аксапты. = этот преобразователь диспетчеризирует запрос к === собственной базе данных (временные таблицы, псевдотаблицы UtilElements) === к кэшу (если у таблицы установлено свойство CacheLokup и запрос простой) === внешней базе данных (MS SQL, Oracle, ранее были my SQL и еще десяток других) Внимание: преобразователь может вполне разбить один запрос на несколько подзапросов, вставить/убрать хинты, вставить убрать поля. В большинстве случаев в конечном итоге срока запроса уходит таки на SQL. Теперь еще внимание: начиная с AX2012 поддерживается только MS SQL, временные таблицы хранятся в MS SQL, псевдотаблицы с бизнеслогикой - также в MS SQL. Поэтому начиная с AX2012 увтерждение "запрос на sql-transact" является верным. Но вот до ax2012 это слишком жесткое утверждение. Вполне возможно, что запрос будет на PL/SQL. Вполне возможно, что запрос будет к собственной базе данных. Да. Но добраться до этого кирпичика можно как оператором языка, так и объектом Query. Цитата:
оператор select в X++ - это синтаксический сахар. Внутри происходят процессы, похожие на Query/QueryRun. Обратите внимание на оператор next, который непосредственно связан с оператором select. Вот такой код вполне валиден. Хотя и считается сильно устаревшим X++: CustTable custTable; select custTable; while( custTable ) { info(custTable.name); next CustTable; } Начиная с ax2012 временные таблицы "живут" в MS SQL и обрабатываются обычным образом SQL-сервером. Нет, View - это материализованный запрос. Он живет на SQL-сервере с момента появления в ax4.0. До этого был только Query. Цитата:
Но с какого-то момента вам нужно четко определить по какой версии вы задаете вопросы. ax3.0, ax4.0, ax2009, ax2012 очень сильно отличаются в части внутренних механизмов работы с базой. в ax2012 все живет в MS SQL. И все просто. в более ранних версиях все гораздо запутаннее. Цитата:
Цитата:
до версии ax2012 есть еще внутренний преобразователь SQL-запросов. Он может разбить запрос на несколько вложенных подзапросов, если встречает временную таблицу. И отдеспетчиризировать каждый подзапрос своей подсистеме исполнения SQL-запроса. (см. начало этого сообщения) |
|
09.11.2012, 13:10 | #5 |
Axapta
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
09.11.2012, 13:08 | #6 |
Участник
|
Цитата:
ни в коем случае не "как аргумент". только как "результат функции". Query не умеет принимать и разбирать строку SQL-запроса. И никогда не умел. Query умеет только строить строку SQL-запроса на основании других аргументов. |
|
Теги |
query, архитектура, как правильно |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|