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

    −122

    1. 1
    2. 2
    ALTER TABLE [dbo].[IssueGroup]  WITH CHECK ADD  CONSTRAINT [FK_IssueGroup_Group] FOREIGN KEY([ProjectId], [GroupId])
    REFERENCES [dbo].[Group] ([GroupId],[ProjectId])

    Часа 2 искал проблему в чужом коде - оказалось, что просто поля ProjectId и GroupId были записаны в разных порядках сначала FOREIGN KEY([ProjectId], [GroupId]), а потом REFERENCES [dbo].[Group] ([GroupId],[ProjectId]).

    vadimliman, 16 Ноября 2010

    Комментарии (2)
  2. Pascal / Говнокод #4652

    +100

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    {Pascal}
    function f( a: boolean ) : boolean;
    begin
    if a then return := f(a) else return := false;
    end;

    При а - истина программа вылетит с переполненным стеком.

    Govnocoder#0xFF, 16 Ноября 2010

    Комментарии (32)
  3. PHP / Говнокод #4651

    +173

    1. 1
    2. 2
    3. 3
    $S=preg_replace('/(\')|(\")|(\,)|(\()|(\))|(\.)|(\‹)|(\:)|(\;)|(\$)|(\#)|(\/)|(\{)|(\})|(\*)|(\ )|(\|)|(\>)|(\<)|(\=)|(\-)|(\[)|(\])|(\!)|(\+)|(\☺)|(\☻)'
                                 .'|(\♥)|(\♦)...................../', '', $S);
    $S=trim($S);

    Регулярные выражения! Супер!

    Yakud, 16 Ноября 2010

    Комментарии (35)
  4. Java / Говнокод #4650

    +143

    1. 1
    2. 2
    3. 3
    if (url == null) {
        throw new RuntimeException("Error reading resource " + url.getFile());
    }

    abatishchev, 16 Ноября 2010

    Комментарии (5)
  5. SQL / Говнокод #4649

    −117

    1. 1
    SELECT * FROM CompanyData d WHERE d.Name = @companyName AND d.EntityID NOT IN (SELECT COUNT(*) FROM...)

    Оригинал потерялся, но особый способ отсевания компаний запомнился. Хорошо, что COUNT(*) возвращал всегда ноль :)

    AlexKhomich, 16 Ноября 2010

    Комментарии (0)
  6. PHP / Говнокод #4648

    +177

    1. 1
    2. 2
    if(strlen($text)) return $text;
    return "";

    ferry-very-good, 16 Ноября 2010

    Комментарии (5)
  7. C# / Говнокод #4647

    +126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    private void SetBorderColor()
    {
                if (AuthInfo.BorderColor)
                {
                    LinearGradientBrush lcBrush = new LinearGradientBrush();
                    lcBrush.StartPoint = new Point(0.5, 0);
                    lcBrush.EndPoint = new Point(0.5, 1);
                    lcBrush.GradientStops.Add(new GradientStop() { Color = Color.FromArgb(100, 249, 249, 249) });
                    lcBrush.GradientStops.Add(new GradientStop() {Color = Color.FromArgb(100,75,139,180), Offset = 0.331});
                    lcBrush.GradientStops.Add(new GradientStop() { Color = Color.FromArgb(100, 75, 139, 180), Offset = 0.853 });
                    lcBrush.GradientStops.Add(new GradientStop() { Color = Color.FromArgb(100, 249, 249, 249), Offset = 1 });
                    this.rectBackGround.Fill = lcBrush;
                }
                else
                {
                    LinearGradientBrush lcBrush = new LinearGradientBrush();
                    lcBrush.StartPoint = new Point(0.5, 0);
                    lcBrush.EndPoint = new Point(0.5, 1);
                    lcBrush.GradientStops.Add(new GradientStop() { Color = Color.FromArgb(100, 249, 249, 249) });
                    lcBrush.GradientStops.Add(new GradientStop() { Color = Color.FromArgb(100, 206, 109, 109), Offset = 0.331 });
                    lcBrush.GradientStops.Add(new GradientStop() { Color = Color.FromArgb(100, 206, 109, 109), Offset = 0.853 });
                    lcBrush.GradientStops.Add(new GradientStop() { Color = Color.FromArgb(100, 249, 249, 249), Offset = 1 });
                    this.rectBackGround.Fill = lcBrush;
                }
    }

    ОПТИМИЗИРОВАНО!!!
    я плакаль)

    HellMaster_HaiL, 16 Ноября 2010

    Комментарии (5)
  8. Pascal / Говнокод #4646

    +106

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    procedure FirstStep (var Text: string);
    // Удаление комментариев <!--...-->, переводов строк, раскрытие тегов <br>, удаление парных пробелов:
    var
      P:     Integer;
      State: Integer;
      Idx:   Integer;
      Cnt:   Integer;
      NL:    Boolean;
    begin
      State := 0;
      P     := 1;
      NL    := True;
      while P <= Length (Text) do
      begin
        if Text[P] in [#9,#10,#13] then Text[P] := ' ';
        case State of
          0: case Text[P] of
               '<': State := 1;
               ' ': begin
                      Idx := P;
                      State := 9;
                    end; { }
               else NL := False;
             end; {case}
          1: case Text[P] of
               '!': State := 2;
               'b': State := 7;
               else
               begin
                 Dec (P);
                 State := 10;
               end; {else}
             end; {case}
          2: if Text[P] <> '-' then
             begin
               Dec (P);
               State := 10;
             end else State := 3;
          3: if Text[P] = '-' then
             begin
               Idx   := P - 3;
               State := 4;
             end else
             begin
               Dec (P);
               State := 10;
             end; {if}
          4: if Text[P] = '-' then State := 5;
          5: if Text[P] = '-' then State := 6 else State := 4;
          6: if Text[P] = '>' then
             begin
               Delete (Text, Idx, P - Idx + 1);
               P := Idx - 1;
               while (P >= 1) and (Text[P] = ' ') do Dec (P);
               State := 0;
             end else State := 4;
          7: if Text[P] = 'r' then State := 8 else State := 0;
          8: begin
               if Text[P] = '>' then
               begin
                 Text[P-3] := #13;
                 Text[P-2] := #10;
                 Delete (Text, P - 1, 2);
                 Dec (P, 2);
                 NL := True;
               end; {if}
               State := 0;
             end; {8}
          9: if Text[P] <> ' ' then
             begin
               Cnt := P - Idx;
               if NL then
               begin
                 Delete (Text, Idx, Cnt);
                 Dec (Idx);
               end else if Cnt > 1 then Delete (Text, Idx, Cnt - 1);
               P := Idx;
               State := 0;
             end; {if}
          10: if Text[P] = '>' then State := 0;
        end; {case}
        Inc (P);
      end; {while}
    end; {proc FirstStep}

    Кусок парсера HTML.

    Arigato, 16 Ноября 2010

    Комментарии (38)
  9. Куча / Говнокод #4645

    +135

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    <p id="entrance">
                Нашли или ...
    </p>
    
    <p id="entrance" style="background: #fff; padding: 8px; -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px; -webkit-box-shadow: 0 0 5px #aaa">
    	Дорогие пользователи
    </p>

    Решил я написать скрипт для GreaseMonkey, который убирает сообщение "Дорогие пользователи, "
    И вот что обнаружил: в коде есть два одинаковых айдишника id="entrance".

    Используется стиль p#entrance.

    Если надо использовать стили в нескольких элементах, используй классы.

    А разные айдишники оставь для джаваскрипта,
    а то не выбрать определенный элемент с помощью document.getElementById.

    В крайнем случае используй атрибут name. Для него есть метод document.getElementsByName

    Oleg_quadro, 16 Ноября 2010

    Комментарии (42)
  10. Pascal / Говнокод #4644

    +112

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    sSQLTitle := 'SELECT  CASE WHEN (VTSS.WRKORDNO IS NOT NULL)'
        +' THEN VTSS.WRKORDNO ELSE VTW.WRKORDNO END AS '''+RSNumDok+''','
        +' CASE WHEN (VTSS.GRECNO IS NOT NULL) THEN VTSS.GRECNO ELSE VTW.GRECNO END AS '''+RSSchet+''','
        +' CASE WHEN (VTSS.STYPE IS NOT NULL) THEN VTSS.STYPE ELSE VTW.STYPE END AS '''+RSDocType+''','
        +' CASE WHEN (VTSS.ServD IS NOT NULL) THEN VTSS.ServD ELSE VTW.ServD END AS '''+RSOpen+''','
        +' CASE WHEN (VTSS.BILLD IS NOT NULL) THEN VTSS.BILLD ELSE VTW.BILLD  END AS '''+RSClose+''','
        +' CASE WHEN (VTSS.FULLNAME IS NOT NULL) THEN VTSS.FULLNAME ELSE VTW.FULLNAME  END AS '''+RSClient+''','
        +' CASE WHEN (VTSS.PAYNAME IS NOT NULL) THEN VTSS.PAYNAME ELSE VTW.PAYNAME  END AS '''+RSPlatelwik+''','
        +' CASE WHEN (VTSS.VIN IS NOT NULL) THEN VTSS.VIN ELSE VTW.VIN  END AS '''+RSVIN+''','
        +' CASE WHEN (VTSS.GNUMER IS NOT NULL) THEN VTSS.GNUMER ELSE VTW.GNUMER  END AS '''+RSGosNomer+''','
        +' CASE WHEN (VTSS.HSMANID IS NOT NULL) THEN VTSS.HSMANID ELSE VTW.HSMANID  END AS '''+RSOtvetstv+''','
        +' CASE WHEN (VTSS.LBACK IS NOT NULL) THEN VTSS.LBACK ELSE VTW.LBACK  END AS '''+RSReturn+''','
        +' VTSS.FULLSUMMA AS '''+RSSumItems+''','
        +' VTW.SUMMA AS '''+RSSumWork+'''';
    with DataMdl.adsADODataSet do
      begin
        Active := false;
        if rbAllDate.Checked then
        {$REGION 'Поиск по всем датам'}
          case rgZakazType.ItemIndex of
            0: //поиск по открытым заказ-заявкам
            CommandText:=sSQLTitle
              +' FROM'
              +' (SELECT  VTS.WRKORDNO,'
           (...)
              +' SUM(SUMMA) AS FULLSUMMA'
              +' FROM'
              +' (SELECT GS.WRKORDNO,'
              +' GB.GRECNO,'
              + sSQLCase
              +' CONVERT(varchar(10), GS.ServD, 104) AS ServD,'
              +' CONVERT(varchar(10), GB.BILLD,104) AS BILLD,'
              +' CASE'
              +'	WHEN C.FNAME IS NULL THEN C.LNAME'
              +'	WHEN C.LNAME IS NULL THEN C.FNAME'
              +' ELSE C.FNAME+'' ''+C.LNAME'
              +'	END AS FULLNAME,'
    //          +' C.LNAME + '' '' + C.FNAME AS FULLNAME,'
              +' CS.PNAME AS PAYNAME,'
              +' V.SERIALNO AS VIN,'
              +' V.LicNo AS GNUMER,'
              +' GB.HSMANID,'
              +' CASE WHEN (GS.CREDIT IS NULL)OR (GS.CREDIT <> 1) THEN NULL ELSE '''+RSReturn+''' END AS LBACK,'
              +' GW.NAME,'
              +' SUM(GW.ORDNUM) AS '''+RSQuantity+''','
              +' SUM(GW.ORDNUM)*GW.UNITPR AS SUMMA'
              +' FROM GSAL'+sPostfix+' GS LEFT OUTER JOIN'
              +' GROW'+sPostfix+' GW ON (GS.GSALID = GW.GSALID)  LEFT OUTER JOIN'
              +' GBIL'+sPostfix+' GB ON (GS.GSALID = GB.GSALID) LEFT OUTER JOIN'
              +' VEHI V ON (GS.VEHIID = V.VEHIID) LEFT OUTER JOIN'
              +' CUST C ON (GS.CUSTNO = C.CUSTNO) RIGHT OUTER JOIN'
              +' (SELECT     CustNo, Lname + '' '' + FNAME AS PNAME'
              +' FROM CUST WITH (NOLOCK))'
              +' CS ON (GB.CUSTNO = CS.CUSTNO)'
              +' WHERE (GS.STATUS = ''A'') AND (GW.RTYPE IN (1,2))'  +sSQLWhere
              +' GROUP BY  GW.ITEM, GW.NAME, GW.UNITPR,'
              +' GS.WRKORDNO, GB.Grecno, GS.ServD, GB.BILLD, C.LNAME, C.FNAME,'
              +' CS.PNAME, V.SERIALNO, V.LicNo, GB.HSMANID, GS.CREDIT, GW.RECMTIME, GS.STYPE)'
              +' VTS'
              +' CASE WHEN (GS.CREDIT IS NULL)OR (GS.CREDIT <> 1) THEN NULL ELSE '''+RSReturn+''' END AS LBACK,'
              +' GW.NAME,'
              +' SUM(GW.ORDNUM) AS '''+RSQuantity+''','
              +' SUM(GW.ORDNUM)*GW.UNITPR AS SUMMA'
              +' FROM GSAL'+sPostfix+' GS LEFT OUTER JOIN'
              +' GROW'+sPostfix+' GW ON (GS.GSALID = GW.GSALID)  LEFT OUTER JOIN'
              +' GBIL'+sPostfix+' GB ON (GS.GSALID = GB.GSALID) LEFT OUTER JOIN'
              +' VEHI V ON (GS.VEHIID = V.VEHIID) LEFT OUTER JOIN'
              +' CUST C ON (GS.CUSTNO = C.CUSTNO) RIGHT OUTER JOIN'
              +' (SELECT     CustNo, Lname + '' '' + FNAME AS PNAME'
           
         ...

    ... и так далее. НАПИСАНО ВРУЧНУЮ! Всего 420 строк, 4 подзапроса, связанных через full outer join. 16 тысяч записей 4-x ядерный mssql server обрабатывал таким образом минуты две. Я уж промолчу, как он по строкам в Delphi разбит...
    Два дня врубался, как оно работает, переписал за два часа. 58 строк, включая каждое поле из select с новой строки :)

    artemlight, 16 Ноября 2010

    Комментарии (4)