1. SQL / Говнокод #16105

    −165

    1. 1
    http://pastebin.com/YSWwKmGb

    Кроме как линком не влезает. Но оно того стоит...

    Запостил: kostoprav, 03 Июня 2014

    Комментарии (35) RSS

    • Подзапрос, подзапрос, подзапрос = смерть.
      Ответить
      • > смерть
        От рук DBA?
        Ответить
        • От уныния, или сильно в туалет захочется до того, как дочитаешь, и разрыв мочевого пузыря, кишки кровь...
          Ответить
    • на ура
      Ответить
    • Напомнило: http://www.wolframalpha.com/input/?i=Moby+Dick+longest+sentence
      Ответить
    • Че он делает и почему нельзя одной строчкой это сделать?
      Ответить
      • Даже не пытался разобраться. В таске было что-то уровня достать инфу из нескольких таблиц по некоторым условиям.
        Ответить
    • может, конструктор какой?
      мышкопрограммирование на sql
      Ответить
    • Этот программист эффективен по дефекейту.
      Ответить
      • Но только если он высрал этот код за 8 * 400/1000 = 3.2 часа.
        Ответить
        • > 8 * 400/1000 = 3.2 часа.
          откуда 3.2 ? Деление ж целочисленное
          Ответить
          • Это код на жабоскрипте ну или третьем питоне.
            Ответить
            • питон только с третьей версии понял, что что-то не так?
              Ответить
      • спасибо, посмеялся

        если серьезно
        этот запрос переписанный должен уложиться в строк 100
        сколько программист с з/п 100к рублей со знанием и пониманием схемы должен его делать?
        весь день?
        или, может, всё таки около часа?
        Ответить
        • > этот запрос переписанный должен уложиться в строк 100
          Ну вот, новые условия появляются. А скорость переписывания как соотносится со скоростью написания?
          Ответить
          • причем тут скорость переписывания
            запрос должен быть изначально правильно сделан
            тут даже никакого рокетсайнса нет - тупейшие джойны и фильтры, сел и написал
            нет ни оконных, ни аналитических функций по партициям, ни иерархических запросов с эскалацией свойств детей наверх по иерархии - тут же даже думать не надо, можно даже на пинг-понг с говнокодом в процессе отвлечься и всё равно сделать нормально с первого раза
            достаточно понимать хоть немного в схеме и в поставленных целях запроса
            Ответить
            • > с эскалацией свойств детей наверх по иерархии
              вот кстати в Испании король из-за этого и отрекся от престола
              Ответить
        • дык, это же обычный выхлоп от Linq. программист мог написать запрос максимум в 10 строк за 5 минут, а на выходе EntityFramework генерит такие запросы
          Ответить
      • >эффективен по дефекейту.
        прямо как устойчивость по Ляпунову
        Ответить
    • Сгенерировано
      Ответить
      • Но закоммичено при этом. Ладно, там 1 раз сгенерировать и прогнать. Так тут кому-то потом придется разбираться. Как минимум не помешал бы коммент, описывающий генерацию. Такой коммент замечен не был.
        Ответить
        • На моей памяти пару раз генераторы просирали, ещё раз был случай "да лан, этож такой запрос, ща нагенерим и никогда править не надо", а потом таки оказалось надо.
          Ответить
    • http://govnokod.ru/3032
      Эх, говорилось еще лет 5 назад, когда они только голову подымали - что всякие ОРМы, генерирующие запросы - зло.
      Нет же, говорили адепты - оно сможет подстраиваться под конкретную базу, и оптимизировать запрос под конкретный диалект, аки jit.
      Ответить
      • Что по-настоящему тупо в ОРМ, так это то, что Сиквел задумывался как язык более высокого уровня, чем языки, которыми пользуется ОРМ. Т.е. Сиквел более абстрактный чем Ява или Питон. И когда его вдруг начинают использовать в качестве низкоуровнего, а абстракции строят на стороне приложения из языка с низким уровнем абстракции - получается шиворот на выворот.
        Ответить
        • это же язык запросов, а не программирования
          Ответить
          • >это же язык запросов
            - мам, купи мороженое
            Ответить
          • А теперь более сложный вопрос: почему язык програмирования не может быть языком запросов?
            Ответить
            • > почему язык програмирования не может быть языком запросов?
              LINQ
              Ответить
              • Вообще-то, это не правильно его так называть. Линк - это пакет в Сишарп. Язык называется Комега. Ну они знали для кого работают.
                Ответить
        • > так это то, что Сиквел задумывался как язык более высокого уровня, чем языки, которыми пользуется ОРМ
          Ну кстати да. Он же изначально был типа декларативный, а потом некоторые светлые головы туда любимую императивщину стали тулить.
          Ответить
    • EntityFramework вполне себе годные запросы делают. может для чтения они и трудноваты, и мудрены, за то отрабатывают как надо, и работают довольно быстро.
      понятное дело, что я их использую только для выбора данные из справочника, или выбор по ключу... короче, проблем с этим нет.
      если же логика сложная - используй хранимые процедуры. EF позволяет методы маппить на процедуры.
      Ответить
      • мейджик значения типа 6059 или 999000000 - тоже дело рук EF?
        а distinct в подзапросах?
        а мейджик подстановки вместо null то 0, то 1, то наоборот - из нуля в null?
        Ответить
        • да, а чего нет? некомплируемый запрос. эти майджики были получены в приложении в какие-то переменные, потом подставлены в linq запрос, после чего EF нагенерировал для него нужный запрос.
          так же как и distinct, в linq такое есть.
          например
          exec sp_executesql N'SELECT 
              [Project2].[C1] AS [C1], 
              [Project2].[TRADENMR] AS [TRADENMR], 
              [Project2].[C2] AS [C2]
              FROM ( SELECT 
                  [Distinct1].[TRADENMR] AS [TRADENMR], 
                  [Distinct1].[C1] AS [C1], 
                  [Distinct1].[C2] AS [C2]
                  FROM ( SELECT DISTINCT 
                      [Extent2].[TRADENMR] AS [TRADENMR], 
                      1 AS [C1], 
                      CASE WHEN ([Extent1].[TRADENMNX] IS NULL) THEN N'''' ELSE  CAST( [Extent1].[TRADENMNX] AS nvarchar(max)) END AS [C2]
                      FROM  [Dict].[SKU] AS [Extent1]
                      LEFT OUTER JOIN [Dict].[TrandName] AS [Extent2] ON [Extent1].[TRADENMNX] = [Extent2].[TRADENMNX]
                      WHERE ([Extent1].[ClientId] = @p__linq__0) OR (([Extent1].[ClientId] IS NULL) AND (@p__linq__0 IS NULL))
                  )  AS [Distinct1]
              )  AS [Project2]
              ORDER BY [Project2].[TRADENMR] ASC',N'@p__linq__0 int',@p__linq__0=7

          получился из
          from t in context.SKUs
                                       where t.ClientId == this.ClientId.Value
                                       orderby t.TrandName.BRANDR
                                       select new SelectListItem() { Text = t.TrandName.TRADENMR, Value = t.TrandName.TRADENMNX.ToString() }).Distinct().OrderBy(t => t.Text).AsEnumerable()
          Ответить

    Добавить комментарий