AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.11.2012, 09:56   #1  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Сорри, что встреваю в разговор. Поддержу RVS, что Narayana "странно" задает вопросы. Просто имейте это в виду, когда "гуру" не смогут вам ответить, и проще будет сказать "Не знаю"

Цитата:
Сообщение от Narayana Посмотреть сообщение
Ну, дак на SQL-сервер уже уходит запрос на sql-transact, как я понимаю?
Значит, все-таки кирпичик, связывающий Х++ с SQL-сервером?
То есть строки таблиц с SQL-сервера таскаются с помощью оператора select в Х++, а потом уже в соответствии со структурой запроса в Х++ формируются в конечный результат?
1. утверждение - верное.
2. оператор Select - один из кирпичиков. Формально - верное утверждение.
3. Вывод касается только оператора SELECT? Nогда первая часть утверждения верная, вторая часть - непонятная. =) Что такое структура запроса в X++? Если вы имеете в виду целиком оператор select с табличными переменными, выбираемыми полями и условиями - то да. Если вы тут пытаетесь опять к SELECT привязать Query - то нет.
__________________
Ivanhoe as is..
Старый 09.11.2012, 11:58   #2  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Если вы имеете в виду целиком оператор select с табличными переменными, выбираемыми полями и условиями - то да.
Да, именно это имею в виду.



Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Если вы тут пытаетесь опять к SELECT привязать Query - то нет.
Ну, хорошо, этот момент уже обстреляли со всех сторон, но повторюсь.
Оператор select я воспринимаю как аргумент функции (в математическом смысле) Query. При этом select имеет внутреннюю реализацию, описанную S.Kuskov-ым.
Старый 09.11.2012, 12:10   #3  
Narayana is offline
Narayana
Участник
 
241 / 100 (4) +++++
Регистрация: 05.01.2009
Адрес: Москва
Дак, что на выходе?
Я имею в виду временные таблицы...

Mazzy пишет:
"2.1. Query - объект, который позволяет строить СТРОКУ ЗАПРОСА вида "select ... from ... where ... join ...". Эта строка запроса так или иначе уходит на SQL-сервер."

Понимаю, что выглядит как занудство, но...
Временная таблица живет в памяти или отдельно создаваемом для нее файле.
Если строка запроса "так или иначе уходит на SQL-сервер", то что получается, - временную таблицу запрос не обрабатывает и оператор select не действует?
Старый 09.11.2012, 13:02   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Narayana, в принципе, вам уже ответили.
но попробую и я вставить.

Цитата:
Сообщение от Narayana Посмотреть сообщение
Ну, дак на SQL-сервер уже уходит запрос на sql-transact, как я понимаю?
отличный вопрос.
Прежде всего, хочу извиниться за упрощение.
Полностью утверждение выглядит так:
= строка запроса уходит в некий преобразователь запросов Аксапты.
= этот преобразователь диспетчеризирует запрос к
=== собственной базе данных (временные таблицы, псевдотаблицы UtilElements)
=== к кэшу (если у таблицы установлено свойство CacheLokup и запрос простой)
=== внешней базе данных (MS SQL, Oracle, ранее были my SQL и еще десяток других)

Внимание: преобразователь может вполне разбить один запрос на несколько подзапросов, вставить/убрать хинты, вставить убрать поля.

В большинстве случаев в конечном итоге срока запроса уходит таки на SQL.

Теперь еще внимание: начиная с AX2012 поддерживается только MS SQL, временные таблицы хранятся в MS SQL, псевдотаблицы с бизнеслогикой - также в MS SQL.

Поэтому начиная с AX2012 увтерждение "запрос на sql-transact" является верным.
Но вот до ax2012 это слишком жесткое утверждение. Вполне возможно, что запрос будет на PL/SQL. Вполне возможно, что запрос будет к собственной базе данных.

Цитата:
Сообщение от Narayana Посмотреть сообщение
Значит, все-таки кирпичик, связывающий Х++ с SQL-сервером?
Да. Но добраться до этого кирпичика можно как оператором языка, так и объектом Query.

Цитата:
Сообщение от Narayana Посмотреть сообщение
То есть строки таблиц с SQL-сервера таскаются с помощью оператора select в Х++, а потом уже в соответствии со структурой запроса в Х++ формируются в конечный результат?
Тут тоже упрощение.
оператор select в X++ - это синтаксический сахар.
Внутри происходят процессы, похожие на Query/QueryRun.

Обратите внимание на оператор next, который непосредственно связан с оператором select.
Вот такой код вполне валиден. Хотя и считается сильно устаревшим
X++:
CustTable custTable;

select custTable;
while( custTable )
{
   info(custTable.name);
   next CustTable;
}
Цитата:
Сообщение от Narayana Посмотреть сообщение
А как тогда все-таки с временными таблицами?
До ax2012 временные таблицы обрабатываются внутренним аксаптовским исполнителем SQL-запросов.
Начиная с ax2012 временные таблицы "живут" в MS SQL и обрабатываются обычным образом SQL-сервером.

Цитата:
Сообщение от Narayana Посмотреть сообщение
Ведь View, это ведь просто способ вывести результаты запроса.
Нет, View - это материализованный запрос. Он живет на SQL-сервере с момента появления в ax4.0. До этого был только Query.

Цитата:
Сообщение от Narayana Посмотреть сообщение
Ну, допустим, временная таблица пустая, ну и путь бы запрос давал пустой результат.
Вопросы просто отличные.
Но с какого-то момента вам нужно четко определить по какой версии вы задаете вопросы.
ax3.0, ax4.0, ax2009, ax2012 очень сильно отличаются в части внутренних механизмов работы с базой.

в ax2012 все живет в MS SQL. И все просто.
в более ранних версиях все гораздо запутаннее.

Цитата:
Сообщение от Narayana Посмотреть сообщение
Зачем не давать использовать временную таблицу стандартным образом во View???
потому что view живет на SQL-сервере, а временная таблица (до ax2012) живет только в рамках AOS.


Цитата:
Сообщение от Narayana Посмотреть сообщение
Понимаю, что выглядит как занудство, но...
Временная таблица живет в памяти или отдельно создаваемом для нее файле.
Если строка запроса "так или иначе уходит на SQL-сервер", то что получается, - временную таблицу запрос не обрабатывает и оператор select не действует?
до версии ax2012 - да.
до версии ax2012 есть еще внутренний преобразователь SQL-запросов. Он может разбить запрос на несколько вложенных подзапросов, если встречает временную таблицу. И отдеспетчиризировать каждый подзапрос своей подсистеме исполнения SQL-запроса. (см. начало этого сообщения)
Старый 09.11.2012, 13:10   #5  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
Теперь еще внимание: начиная с AX2012 поддерживается только MS SQL, временные таблицы хранятся в MS SQL
...
Начиная с ax2012 временные таблицы "живут" в MS SQL и обрабатываются обычным образом SQL-сервером.
Не-не, "старые" временные таблицы же тоже остались.
За это сообщение автора поблагодарили: mazzy (2).
Старый 09.11.2012, 13:08   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Narayana Посмотреть сообщение
Оператор select я воспринимаю как аргумент функции (в математическом смысле) Query.
Тоже позанудствую

ни в коем случае не "как аргумент".
только как "результат функции".

Query не умеет принимать и разбирать строку SQL-запроса. И никогда не умел.
Query умеет только строить строку SQL-запроса на основании других аргументов.
Теги
query, архитектура, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обновление поля с определённым типом во всех таблицах. Corel DAX: Программирование 1 20.12.2008 13:37
Достаточно ли изменить дату в таблицах inventTrans, inventTransPosting, VendPackingSlipJour? DmitryS DAX: Программирование 3 18.09.2008 14:37
Проверки заполненных значений в связанных таблицах. miklenew DAX: База знаний и проекты 11 25.12.2007 14:40
Как не использовать relations на таблицах demetra DAX: Программирование 13 14.07.2006 11:00
Осторожнее с CTRL+S на таблицах mit DAX: Администрирование 7 25.07.2005 19:09
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:58.