Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 .. 25 26 27 28 29 [30] 31 32 33 34 .. 78 вперед Ctrl→ |
Leax Member Откуда: Киев Сообщений: 438 |
З.Ы.: Хотя меня бы вполне устроило просто указание: объект, имя объекта, сервер, БД, дата/время скриптования |
8 янв 14, 14:18 [15386183] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
консенсус ![]() |
||||
8 янв 14, 15:02 [15386303] Ответить | Цитировать Сообщить модератору |
AndreiRantsevich Member Откуда: Минск Сообщений: 773 |
Всех с прошедшими праздниками ! Предложения хорошие, уже и сами об этом думали. Согласен со всем. Сделаем в ближайшее время. У нас новый релиз уже готов в смысле набора функций, вот только праздники помешали его довести но конца. Но скоро будет. |
||||
9 янв 14, 13:56 [15390027] Ответить | Цитировать Сообщить модератору |
Penner Member Откуда: Сообщений: 340 |
можно ли сделать более настраиваемым форматирование? |
15 янв 14, 23:10 [15421981] Ответить | Цитировать Сообщить модератору |
dalex1973 Member Откуда: Польша Сообщений: 287 |
Penner, Форматирование стороннее и от авторов аддина не зависит. |
15 янв 14, 23:18 [15422008] Ответить | Цитировать Сообщить модератору |
Penner Member Откуда: Сообщений: 340 |
:( |
||
16 янв 14, 09:44 [15422945] Ответить | Цитировать Сообщить модератору |
AndreiRantsevich Member Откуда: Минск Сообщений: 773 |
dalex1973,Penner,
У нас есть хорошие новости: мы уже пишем свой форматтер и уже очень далеко продвинулись. Сейчас как раз занимаемся разработкой опций для форматирования и спорим тут о том что нужно, а что нет. Поэтому, у кого есть какие то запросы или идеи пишите пожалуйста сюда. Только желательно с примерами и понятно. И есть первый вопрос: как вы отформатируете следующий код ? BEGIN/*multilne comment*/ /*comment1*/ /*comment2*/ IF 1 = 1 PRINT 1 /*comment3*/ /*comment4*/ IF 1 = 1 PRINT 2 /*comment5*/ /*comment6*/ END Если есть какие-то хорошие документы по форматированию, может какие-то стандартные тестовые тексты для прогона, то всё присылайте на support@ почту. Буду благодарен за любые ссылки и советы. |
||
16 янв 14, 15:49 [15425404] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
я бы налепил везде begin end, возможно настариваемо в опциях. IF 1 = 1 BEGIN PRINT 1 END |
||||
16 янв 14, 16:06 [15425502] Ответить | Цитировать Сообщить модератору |
Penner Member Откуда: Сообщений: 340 |
может дать возможность самому настроить? |
16 янв 14, 16:10 [15425524] Ответить | Цитировать Сообщить модератору |
Penner Member Откуда: Сообщений: 340 |
BEGIN /*comment1*/ /*comment2*/ IF 1 = 1 PRINT 1 /*comment3*/ /*comment4*/ IF 1 = 1 PRINT 2 /*comment5*/ /*comment6*/ END |
16 янв 14, 16:12 [15425534] Ответить | Цитировать Сообщить модератору |
AndreiRantsevich Member Откуда: Минск Сообщений: 773 |
Об этом и речь: нарабатываем какие опции вообще нужны. Можно предлогать сами настройки, либо говорить "я бы ожидал такой результат...". |
||
16 янв 14, 16:19 [15425574] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9693 |
AndreiRantsevich, 15321715 будет хоть как-то прокомментировано? |
16 янв 14, 16:29 [15425628] Ответить | Цитировать Сообщить модератору |
McFozzy Member Откуда: Litva Сообщений: 138 |
ура! какие новости... а это никак не влияет на выход очередного релиза? прилагаю свои вариант форматирования... К сообщению приложен файл (SampleSQLCode.sql - 571bytes) cкачать ![]() |
||
16 янв 14, 16:49 [15425751] Ответить | Цитировать Сообщить модератору |
AndreiRantsevich Member Откуда: Минск Сообщений: 773 |
спасибо что обратили внимание. Я если честно проскачил это сообщение. |
||
16 янв 14, 17:11 [15425883] Ответить | Цитировать Сообщить модератору |
AndreiRantsevich Member Откуда: Минск Сообщений: 773 |
На релиз не повлияет - разработка идёт в branch-е. Релиз задержался из немного из за меня. После праздников пришло несколько срочных проектов и я утонул в них. Сейчас намечаем на конец января. |
||||
16 янв 14, 17:16 [15425908] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
McFozzy привёл SQLComplete тулзу для подражания. Но ни она ни другие как не решили задачу, я всё ещё не могу настроить форматирование под наш стиль (банальнейше - ведущие запятые вровень блоку) так и не выполняет написанное - настраивание одного и того же мысла один раз. А там 100500 раз указываешь одно и тоже. Надеюсь что не просто пишут yeld another sql formatter, а первые которые взялись за ум. Поэтому вопрос - какова стратегия подхода к этому снаряду ? Чтобы знать как действовать, помогать и на чём сконцентрироваться. PS: Предсказываю что найдутся 1-2 активнейших из 10000 читающих, которые будут утверждать, что универсальная тулза обязана не поддерживать стиль оппонента, за глаза, ссылаясь на личности и проводя стандартные неадекватные аргументы. |
||
16 янв 14, 17:37 [15425988] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
надо меньше пить(ц) ![]() |
||||
16 янв 14, 17:55 [15426082] Ответить | Цитировать Сообщить модератору |
AndreiRantsevich Member Откуда: Минск Сообщений: 773 |
McFozzy,
Интересный формат. Есть ли у вас описание правил форматирования, в любом виде ? Это руками отформатировано или каким-то скртптом ? Немного неясна логика размещения запятых, что на новых строках. |
||||
16 янв 14, 18:03 [15426113] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
как у SSMS, это удобно, если надо, например, закрыть комментарием поле и т.д.. |
||||
16 янв 14, 18:11 [15426137] Ответить | Цитировать Сообщить модератору |
AndreiRantsevich Member Откуда: Минск Сообщений: 773 |
Мы попытаемся создать максимально гибкий форматер с 1001 опцией и к нему несколько шаблонов. Если у вас есть описание вашего стандарта форматирования и вы можете им поделиться, то буду богодарен. (присылайте на support@) Конечно нужны примеры. Фактически мы стараемся из разных примеров наработать набор опций. Затем сделаем альфа-версию для оценки и прокатки и снова будем всех слушать. Главное что мы решили выделить время на эту функциональность. |
||||
16 янв 14, 18:14 [15426150] Ответить | Цитировать Сообщить модератору |
McFozzy Member Откуда: Litva Сообщений: 138 |
руками... ни какой форматер не может (на сколько я пробовал) вставлять запятые перед описанием поля. правил как бы нет... откройте файл с Notepad++ и посмотрите где есть Tab символы. |
||||
16 янв 14, 18:33 [15426241] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Но как обычно дьявол в деталях. Иза-за 100500 одинаковых настроек, но кое где забыли, и кое где блоки смещаются, а иногда тупо глючит. -- Comment IF (@VariableI = 'Value') AND (@VariableII = 'Value2') BEGIN -- Select comment SELECT TOP(10) tb .Field1 , tb2.Field2 , CASE WHEN tb.Field3 = 'Value3' THEN 'Y' ELSE 'N' END AS Field3 -- Inline comment , CASE WHEN tb.Field3 = 'Value3' THEN 'Y' ELSE 'N' END AS Field3b , CASE WHEN tb.Field4 = 0 AND tb.Field3 = 'Value1' THEN 'A' WHEN tb.Field3 = 'Value2' THEN 'B' ELSE 'C' END AS Field3с FROM dbo.TableI tb JOIN dbo.Table2 tb2 ON tb2.IdentityField = tb .IdentityField LEFT JOIN dbo.Table3 tb3 ON tb3.IdentityField = tb2.IdentityField WHERE tb.Field4 IN ('AAA','BBB') -- Inline comment AND tb.Field5 != 0 GROUP BY tb.Field1 , tb2.Field2 , tb .Field3 ORDER BY 1 END
![]() Я же тогда писал что смысл самая важная часть форматирования и правила всегда должны быть. По мне правил не много. К примеру - блочное форматирование. В коде выше есть несколько мест блоков: Условия в IF, WHILE, ON, таблицы во FROM, и связки JOIN, ON, перечисления полей в SELECT, GROUP BY и ORDER. Связки форматированы по обеим осям (по операторам тоже). А также перечисления параметров: входных в процедурах и функциях, их вызовах, DECLARE ... Не даром JOIN и логические операторы серого цвета - они могут идти вровень стоп-слов (SELECT FROM WHERE WHEN IF) и не "закрывать" своей серостью яркие синие слова-разделители (стоп-слова). Ведущие запятые тоже ради блоков. Они не мешаются где-то в конце, и коментить легче (последние колонки коментятся чаще), а с другой стороны видно где пропустил или где конец выражения. Блочное выравнивание помогает копировать и вставлять код в другие места, и на других языках. Как набор колонок в выражения и в связки так и наоборот. Формат вида: SELECT X.Col1 , X.Col2 , Col3 = 1 + 2 , Col4 = X.Col1 + X.Col2Для блочного форматирования лучше подходит. И к тому же более единообразен по отношению к UPDATE. Я бы и для INSERT сделал бы такой же. Но к сожалению MS грозится запретить такой синтаксис. Как кстати и отсутствие AS. Для SELECT оно конечно хорошо - меньше проблем, но для таблиц только мешается. И вообще я за принцип сначала ДЛЯ ЧЕГО, а потом ИЗ ЧЕГО. Это касается описания полей, связок в WHERE и ON (иногда это называют инверсное - по мне так наоборот), вызова процедур (параметр = значение) и т.д. Несколько вариантов форматирования намекает на то что их одновременно несколько и форматер: - подстраивается в зависимости от содержимого - не переделывает один формат в другой при переформатировании К примеру короткие, точнее простые выражения могут быть и в одну строку, а длинные должны разобраться по блокам. Принудительное добавление BEGIN END мне не подходит - отсутствие его в IF ELSE IF подсказывает и помогает контролировать что там только один оператор. BEGIN вообще не маркер, он всегда идёт за реальным маркером (IF ELSE WHILE шапка объекта) Более того - я вообще вырезаю излишние слова, как INTO после INSERT и INNER перед JOIN, т.е. слова по умолчанию, как и значения по умолчанию во всяких INDEX, WITH, FOREIGN KEY т.п. С другой стороны: - оптимизация форматирования с возможной сменой смысла кода - тоже возможно. К примеру несколько подряд идущих SET объединить в SELECT, авторасстановка алиасов. Но я бы не стал это делать как обязательное, а как дополнительный стиль форматирования. - отключение анализа некоторых частей кода (трогать только какие-то лишь блики или элементы) Т.е. я за несколько пред-настроенных вариантов форматирования для разных целей: - выровнять говнокод с sql.ru - стиль дяди пети, выпилить его выкрутасы - стиль для дяди пети, навыкрутасить - оптимизация частей кода А - оптимизация частей кода Б - мягко подрихтовать неровности - стиль шапок А - стиль под шаблон кода Б - стиль для анализа сверх-запутанных запросов, разряжённый - стиль для анализа сверх-запутанных запросов, компактный Стили в иерархи - переопределяют элементы стиля предка. Ибо часто код в самих выражениях не имеет простого или единого формата - ибо для читабельности иногда лучше выровнять по другому или подчеркнуть важные детали, поэтому должен быть стиль не трогающий выражения (или pragma блокираторы форматирования). Комментарии желательно только inline, ибо блочный /**/ для оперативной работы - быстро закрыть код. Выравнивание тоже желательно. Размер табулятора = 8, т.к. средний размер часто используемых стоп-слов в пределах от 4х до 8ми. |
||||
17 янв 14, 03:57 [15427837] Ответить | Цитировать Сообщить модератору |
dalex1973 Member Откуда: Польша Сообщений: 287 |
Mnior, Тут я с Вами согласен. Универсальный форматтер, который едет по целому коду с одним алгоритмом снижает его эффективность. Приходится потом руками выравнивать. Копаться в милллионе настроек тяжело.
Если и внедрять, то - как опциональный параметр.
Да, в некоторых форматтерах можно указывать максимальную длину строки.
Тоже верно, должна быть возможность определить места в коде которые форматтер обойдёт. Это определение:
BEGIN-END вообще не вариант (например, inlined TVF или представления) |
||||||||
21 янв 14, 11:23 [15445368] Ответить | Цитировать Сообщить модератору |
Leax Member Откуда: Киев Сообщений: 438 |
А можно как-то в темплейтах заскриптовать имена полей таблицы вместе с их типом? Я хотел сделать темплейт для парсинга xml в таблицу, а там нужно указывать тип полей для приёма результата Мне надо, чтобы в результате скриптования таблицы (что-то вроде команды Create) получалось: select x.value('@lagerId', 'int'), x.value('@quantity', 'numeric(18,3)') from data.nodes('ROOT/data/row') as T(x) Понятно, что 'ROOT/data/row' я сам руками править буду для каждого конкретного случая |
22 янв 14, 16:27 [15452962] Ответить | Цитировать Сообщить модератору |
Leax Member Откуда: Киев Сообщений: 438 |
И ещё, можно ли проделать то же самое, но с гридом/выделением в гриде ? Чтобы взяло имена выделенных колонок, их тип и сгенерило скрипт из предыдущего сообщения |
22 янв 14, 16:29 [15452978] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 .. 25 26 27 28 29 [30] 31 32 33 34 .. 78 вперед Ctrl→ |
Все форумы / Microsoft SQL Server | ![]() |