Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. Evolution of a stored proc

Evolution of a stored proc

Scheduled Pinned Locked Moved The Weird and The Wonderful
debugging
12 Posts 11 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    virang_21
    wrote on last edited by
    #1

    I have few of those in one of the project I am responsible to maintain... and sometimes something goes wrong with the system and I have oh no .. not again moment....I am not saying stored proc are bad but at times it takes you on a wild ride when figuring out what went wrong and itis absolute nightmare to debug...

    -- =============================================
    -- Author: XXXX
    -- Create date: <06/07/2009>
    -- Description: -- =============================================
    ALTER PROCEDURE [dbo].[uspUpdateMfgOrdNo]
    AS

    BEGIN
    DECLARE @Machine_Id varchar(8)
    DECLARE @Flt_Locn VARCHAR(8)
    DECLARE @Prod_Date datetime
    DECLARE @Shift_Id VARCHAR(1)
    DECLARE @Item_No varchar(15)
    DECLARE @Prod_Qty numeric(9,0)
    DECLARE @Tot_Prod_Qty NUMERIC(9,0)
    DECLARE @Mh_Mfno varchar(8)
    DECLARE @Seq_Id NUMERIC(18,0)
    DECLARE @WorkCenter_Id VARCHAR(8)
    DECLARE @Facility_Id VARCHAR(8)
    DECLARE @Matched_MfNo VARCHAR(8)
    DECLARE @Available_Qty NUMERIC(9, 0)
    DECLARE @CurrentQty NUMERIC(9, 0)
    DECLARE @FilledQty NUMERIC(9, 0)
    --DECLARE @UpperLimit_Qty NUMERIC(9, 0)
    DECLARE @Cono NUMERIC(9, 0)
    DECLARE @Scrap_Qty NUMERIC(9, 0)
    DECLARE @RowCount INT
    DECLARE @blFlagMultiMO CHAR(1)
    DECLARE @MachHistTemp TABLE(Id INT,Machine_Id VARCHAR(8),Flt_Locn VARCHAR(8),Prod_Date DATETIME,
    Shift_Id VARCHAR(1),Item_No VARCHAR(15),Prod_Qty NUMERIC(9,0),Mh_Mfno VARCHAR(8),
    Seq_Id NUMERIC(18,0))
    DECLARE @ROWCNT INT
    DECLARE @CNT INT

    SET @blFlagMultiMO = 'F'

    BEGIN TRAN

    Branch_One:--DECLARATION OF THE BRANCH LABEL

    TRUNCATE TABLE MachHistTemp

    B M A Y F 7 Replies Last reply
    0
    • V virang_21

      I have few of those in one of the project I am responsible to maintain... and sometimes something goes wrong with the system and I have oh no .. not again moment....I am not saying stored proc are bad but at times it takes you on a wild ride when figuring out what went wrong and itis absolute nightmare to debug...

      -- =============================================
      -- Author: XXXX
      -- Create date: <06/07/2009>
      -- Description: -- =============================================
      ALTER PROCEDURE [dbo].[uspUpdateMfgOrdNo]
      AS

      BEGIN
      DECLARE @Machine_Id varchar(8)
      DECLARE @Flt_Locn VARCHAR(8)
      DECLARE @Prod_Date datetime
      DECLARE @Shift_Id VARCHAR(1)
      DECLARE @Item_No varchar(15)
      DECLARE @Prod_Qty numeric(9,0)
      DECLARE @Tot_Prod_Qty NUMERIC(9,0)
      DECLARE @Mh_Mfno varchar(8)
      DECLARE @Seq_Id NUMERIC(18,0)
      DECLARE @WorkCenter_Id VARCHAR(8)
      DECLARE @Facility_Id VARCHAR(8)
      DECLARE @Matched_MfNo VARCHAR(8)
      DECLARE @Available_Qty NUMERIC(9, 0)
      DECLARE @CurrentQty NUMERIC(9, 0)
      DECLARE @FilledQty NUMERIC(9, 0)
      --DECLARE @UpperLimit_Qty NUMERIC(9, 0)
      DECLARE @Cono NUMERIC(9, 0)
      DECLARE @Scrap_Qty NUMERIC(9, 0)
      DECLARE @RowCount INT
      DECLARE @blFlagMultiMO CHAR(1)
      DECLARE @MachHistTemp TABLE(Id INT,Machine_Id VARCHAR(8),Flt_Locn VARCHAR(8),Prod_Date DATETIME,
      Shift_Id VARCHAR(1),Item_No VARCHAR(15),Prod_Qty NUMERIC(9,0),Mh_Mfno VARCHAR(8),
      Seq_Id NUMERIC(18,0))
      DECLARE @ROWCNT INT
      DECLARE @CNT INT

      SET @blFlagMultiMO = 'F'

      BEGIN TRAN

      Branch_One:--DECLARATION OF THE BRANCH LABEL

      TRUNCATE TABLE MachHistTemp

      B Offline
      B Offline
      BobJanova
      wrote on last edited by
      #2

      :omg: :doh:

      1 Reply Last reply
      0
      • V virang_21

        I have few of those in one of the project I am responsible to maintain... and sometimes something goes wrong with the system and I have oh no .. not again moment....I am not saying stored proc are bad but at times it takes you on a wild ride when figuring out what went wrong and itis absolute nightmare to debug...

        -- =============================================
        -- Author: XXXX
        -- Create date: <06/07/2009>
        -- Description: -- =============================================
        ALTER PROCEDURE [dbo].[uspUpdateMfgOrdNo]
        AS

        BEGIN
        DECLARE @Machine_Id varchar(8)
        DECLARE @Flt_Locn VARCHAR(8)
        DECLARE @Prod_Date datetime
        DECLARE @Shift_Id VARCHAR(1)
        DECLARE @Item_No varchar(15)
        DECLARE @Prod_Qty numeric(9,0)
        DECLARE @Tot_Prod_Qty NUMERIC(9,0)
        DECLARE @Mh_Mfno varchar(8)
        DECLARE @Seq_Id NUMERIC(18,0)
        DECLARE @WorkCenter_Id VARCHAR(8)
        DECLARE @Facility_Id VARCHAR(8)
        DECLARE @Matched_MfNo VARCHAR(8)
        DECLARE @Available_Qty NUMERIC(9, 0)
        DECLARE @CurrentQty NUMERIC(9, 0)
        DECLARE @FilledQty NUMERIC(9, 0)
        --DECLARE @UpperLimit_Qty NUMERIC(9, 0)
        DECLARE @Cono NUMERIC(9, 0)
        DECLARE @Scrap_Qty NUMERIC(9, 0)
        DECLARE @RowCount INT
        DECLARE @blFlagMultiMO CHAR(1)
        DECLARE @MachHistTemp TABLE(Id INT,Machine_Id VARCHAR(8),Flt_Locn VARCHAR(8),Prod_Date DATETIME,
        Shift_Id VARCHAR(1),Item_No VARCHAR(15),Prod_Qty NUMERIC(9,0),Mh_Mfno VARCHAR(8),
        Seq_Id NUMERIC(18,0))
        DECLARE @ROWCNT INT
        DECLARE @CNT INT

        SET @blFlagMultiMO = 'F'

        BEGIN TRAN

        Branch_One:--DECLARATION OF THE BRANCH LABEL

        TRUNCATE TABLE MachHistTemp

        M Offline
        M Offline
        Mike Winiberg
        wrote on last edited by
        #3

        Hmm, I will never complain about Visual Basic again... :laugh:

        1 Reply Last reply
        0
        • V virang_21

          I have few of those in one of the project I am responsible to maintain... and sometimes something goes wrong with the system and I have oh no .. not again moment....I am not saying stored proc are bad but at times it takes you on a wild ride when figuring out what went wrong and itis absolute nightmare to debug...

          -- =============================================
          -- Author: XXXX
          -- Create date: <06/07/2009>
          -- Description: -- =============================================
          ALTER PROCEDURE [dbo].[uspUpdateMfgOrdNo]
          AS

          BEGIN
          DECLARE @Machine_Id varchar(8)
          DECLARE @Flt_Locn VARCHAR(8)
          DECLARE @Prod_Date datetime
          DECLARE @Shift_Id VARCHAR(1)
          DECLARE @Item_No varchar(15)
          DECLARE @Prod_Qty numeric(9,0)
          DECLARE @Tot_Prod_Qty NUMERIC(9,0)
          DECLARE @Mh_Mfno varchar(8)
          DECLARE @Seq_Id NUMERIC(18,0)
          DECLARE @WorkCenter_Id VARCHAR(8)
          DECLARE @Facility_Id VARCHAR(8)
          DECLARE @Matched_MfNo VARCHAR(8)
          DECLARE @Available_Qty NUMERIC(9, 0)
          DECLARE @CurrentQty NUMERIC(9, 0)
          DECLARE @FilledQty NUMERIC(9, 0)
          --DECLARE @UpperLimit_Qty NUMERIC(9, 0)
          DECLARE @Cono NUMERIC(9, 0)
          DECLARE @Scrap_Qty NUMERIC(9, 0)
          DECLARE @RowCount INT
          DECLARE @blFlagMultiMO CHAR(1)
          DECLARE @MachHistTemp TABLE(Id INT,Machine_Id VARCHAR(8),Flt_Locn VARCHAR(8),Prod_Date DATETIME,
          Shift_Id VARCHAR(1),Item_No VARCHAR(15),Prod_Qty NUMERIC(9,0),Mh_Mfno VARCHAR(8),
          Seq_Id NUMERIC(18,0))
          DECLARE @ROWCNT INT
          DECLARE @CNT INT

          SET @blFlagMultiMO = 'F'

          BEGIN TRAN

          Branch_One:--DECLARATION OF THE BRANCH LABEL

          TRUNCATE TABLE MachHistTemp

          A Offline
          A Offline
          AspDotNetDev
          wrote on last edited by
          #4

          Good lord, I'm having flashbacks from my last job. We had nearly 500,000 lines of SQL in stored procedures. And I really don't see the need for the "usp" prefix. Is it really so common to confuse a user stored procedure with a system stored procedure? At least it seems the developers that made this attempt to maintain some sort of style. At my current job, most stored procedures look like they were generated from a designer and no attempt was made to format the code. I feel your pain.

          Thou mewling ill-breeding pignut!

          G 1 Reply Last reply
          0
          • A AspDotNetDev

            Good lord, I'm having flashbacks from my last job. We had nearly 500,000 lines of SQL in stored procedures. And I really don't see the need for the "usp" prefix. Is it really so common to confuse a user stored procedure with a system stored procedure? At least it seems the developers that made this attempt to maintain some sort of style. At my current job, most stored procedures look like they were generated from a designer and no attempt was made to format the code. I feel your pain.

            Thou mewling ill-breeding pignut!

            G Offline
            G Offline
            greldak
            wrote on last edited by
            #5

            Hmm - lots of comments giving the reason for a change as "as suggested by manager". Doesn't inspire confidence that the person making those changes understood why they were done.

            S 1 Reply Last reply
            0
            • G greldak

              Hmm - lots of comments giving the reason for a change as "as suggested by manager". Doesn't inspire confidence that the person making those changes understood why they were done.

              S Offline
              S Offline
              Stefan_Lang
              wrote on last edited by
              #6

              Yes, I particularly like the addition:

              -- Start Added IF condition on 4/Nov/2009 as suggested by Manager.
              IF (@Mh_Mfno = -2)
              BEGIN
              SET @Scrap_Qty = @Prod_Qty
              END
              -- End

              which to me sounds like

              "if I press the red button, dump all produce on the garbage heap"

              :D P.S.: I wonder if one of the 'M's in Mh_Mfno stands for 'Manager' ;)

              1 Reply Last reply
              0
              • V virang_21

                I have few of those in one of the project I am responsible to maintain... and sometimes something goes wrong with the system and I have oh no .. not again moment....I am not saying stored proc are bad but at times it takes you on a wild ride when figuring out what went wrong and itis absolute nightmare to debug...

                -- =============================================
                -- Author: XXXX
                -- Create date: <06/07/2009>
                -- Description: -- =============================================
                ALTER PROCEDURE [dbo].[uspUpdateMfgOrdNo]
                AS

                BEGIN
                DECLARE @Machine_Id varchar(8)
                DECLARE @Flt_Locn VARCHAR(8)
                DECLARE @Prod_Date datetime
                DECLARE @Shift_Id VARCHAR(1)
                DECLARE @Item_No varchar(15)
                DECLARE @Prod_Qty numeric(9,0)
                DECLARE @Tot_Prod_Qty NUMERIC(9,0)
                DECLARE @Mh_Mfno varchar(8)
                DECLARE @Seq_Id NUMERIC(18,0)
                DECLARE @WorkCenter_Id VARCHAR(8)
                DECLARE @Facility_Id VARCHAR(8)
                DECLARE @Matched_MfNo VARCHAR(8)
                DECLARE @Available_Qty NUMERIC(9, 0)
                DECLARE @CurrentQty NUMERIC(9, 0)
                DECLARE @FilledQty NUMERIC(9, 0)
                --DECLARE @UpperLimit_Qty NUMERIC(9, 0)
                DECLARE @Cono NUMERIC(9, 0)
                DECLARE @Scrap_Qty NUMERIC(9, 0)
                DECLARE @RowCount INT
                DECLARE @blFlagMultiMO CHAR(1)
                DECLARE @MachHistTemp TABLE(Id INT,Machine_Id VARCHAR(8),Flt_Locn VARCHAR(8),Prod_Date DATETIME,
                Shift_Id VARCHAR(1),Item_No VARCHAR(15),Prod_Qty NUMERIC(9,0),Mh_Mfno VARCHAR(8),
                Seq_Id NUMERIC(18,0))
                DECLARE @ROWCNT INT
                DECLARE @CNT INT

                SET @blFlagMultiMO = 'F'

                BEGIN TRAN

                Branch_One:--DECLARATION OF THE BRANCH LABEL

                TRUNCATE TABLE MachHistTemp

                Y Offline
                Y Offline
                yiangos
                wrote on last edited by
                #7

                virang_21 wrote:

                BEGIN TRAN Branch_One:--DECLARATION OF THE BRANCH LABEL TRUNCATE TABLE MachHistTemp

                I stopped reading the code after this. A DDL statement within a transaction?

                Φευ! Εδόμεθα υπό ρηννοσχήμων λύκων! (Alas! We're devoured by lamb-guised wolves!)

                J 1 Reply Last reply
                0
                • Y yiangos

                  virang_21 wrote:

                  BEGIN TRAN Branch_One:--DECLARATION OF THE BRANCH LABEL TRUNCATE TABLE MachHistTemp

                  I stopped reading the code after this. A DDL statement within a transaction?

                  Φευ! Εδόμεθα υπό ρηννοσχήμων λύκων! (Alas! We're devoured by lamb-guised wolves!)

                  J Offline
                  J Offline
                  Jan Holst Jensen2
                  wrote on last edited by
                  #8

                  Actually, truncate _can_ be rolled back on SQL server, so it is not as bad as it would be if it were Oracle code.

                  Y 1 Reply Last reply
                  0
                  • V virang_21

                    I have few of those in one of the project I am responsible to maintain... and sometimes something goes wrong with the system and I have oh no .. not again moment....I am not saying stored proc are bad but at times it takes you on a wild ride when figuring out what went wrong and itis absolute nightmare to debug...

                    -- =============================================
                    -- Author: XXXX
                    -- Create date: <06/07/2009>
                    -- Description: -- =============================================
                    ALTER PROCEDURE [dbo].[uspUpdateMfgOrdNo]
                    AS

                    BEGIN
                    DECLARE @Machine_Id varchar(8)
                    DECLARE @Flt_Locn VARCHAR(8)
                    DECLARE @Prod_Date datetime
                    DECLARE @Shift_Id VARCHAR(1)
                    DECLARE @Item_No varchar(15)
                    DECLARE @Prod_Qty numeric(9,0)
                    DECLARE @Tot_Prod_Qty NUMERIC(9,0)
                    DECLARE @Mh_Mfno varchar(8)
                    DECLARE @Seq_Id NUMERIC(18,0)
                    DECLARE @WorkCenter_Id VARCHAR(8)
                    DECLARE @Facility_Id VARCHAR(8)
                    DECLARE @Matched_MfNo VARCHAR(8)
                    DECLARE @Available_Qty NUMERIC(9, 0)
                    DECLARE @CurrentQty NUMERIC(9, 0)
                    DECLARE @FilledQty NUMERIC(9, 0)
                    --DECLARE @UpperLimit_Qty NUMERIC(9, 0)
                    DECLARE @Cono NUMERIC(9, 0)
                    DECLARE @Scrap_Qty NUMERIC(9, 0)
                    DECLARE @RowCount INT
                    DECLARE @blFlagMultiMO CHAR(1)
                    DECLARE @MachHistTemp TABLE(Id INT,Machine_Id VARCHAR(8),Flt_Locn VARCHAR(8),Prod_Date DATETIME,
                    Shift_Id VARCHAR(1),Item_No VARCHAR(15),Prod_Qty NUMERIC(9,0),Mh_Mfno VARCHAR(8),
                    Seq_Id NUMERIC(18,0))
                    DECLARE @ROWCNT INT
                    DECLARE @CNT INT

                    SET @blFlagMultiMO = 'F'

                    BEGIN TRAN

                    Branch_One:--DECLARATION OF THE BRANCH LABEL

                    TRUNCATE TABLE MachHistTemp

                    F Offline
                    F Offline
                    Florin Jurcovici
                    wrote on last edited by
                    #9

                    You can refactor it. Also, I don't know for Oracle or other DBs, but there's a debugger with breakpoints, local vars, step into and all such stuff available for MySQL. OTOH, packing business logic into SQL (which I'm under the impression that it happens here) is always a bad idea - unless you really do pack your entire logic in SQL, and have stored procedures which are in fact the equivalent of services, and no or almost no logic in your client app. And yes, I do agree it's horrible the way it is now. Whoever designed the database clearly has no notion of sane naming conventions.

                    1 Reply Last reply
                    0
                    • V virang_21

                      I have few of those in one of the project I am responsible to maintain... and sometimes something goes wrong with the system and I have oh no .. not again moment....I am not saying stored proc are bad but at times it takes you on a wild ride when figuring out what went wrong and itis absolute nightmare to debug...

                      -- =============================================
                      -- Author: XXXX
                      -- Create date: <06/07/2009>
                      -- Description: -- =============================================
                      ALTER PROCEDURE [dbo].[uspUpdateMfgOrdNo]
                      AS

                      BEGIN
                      DECLARE @Machine_Id varchar(8)
                      DECLARE @Flt_Locn VARCHAR(8)
                      DECLARE @Prod_Date datetime
                      DECLARE @Shift_Id VARCHAR(1)
                      DECLARE @Item_No varchar(15)
                      DECLARE @Prod_Qty numeric(9,0)
                      DECLARE @Tot_Prod_Qty NUMERIC(9,0)
                      DECLARE @Mh_Mfno varchar(8)
                      DECLARE @Seq_Id NUMERIC(18,0)
                      DECLARE @WorkCenter_Id VARCHAR(8)
                      DECLARE @Facility_Id VARCHAR(8)
                      DECLARE @Matched_MfNo VARCHAR(8)
                      DECLARE @Available_Qty NUMERIC(9, 0)
                      DECLARE @CurrentQty NUMERIC(9, 0)
                      DECLARE @FilledQty NUMERIC(9, 0)
                      --DECLARE @UpperLimit_Qty NUMERIC(9, 0)
                      DECLARE @Cono NUMERIC(9, 0)
                      DECLARE @Scrap_Qty NUMERIC(9, 0)
                      DECLARE @RowCount INT
                      DECLARE @blFlagMultiMO CHAR(1)
                      DECLARE @MachHistTemp TABLE(Id INT,Machine_Id VARCHAR(8),Flt_Locn VARCHAR(8),Prod_Date DATETIME,
                      Shift_Id VARCHAR(1),Item_No VARCHAR(15),Prod_Qty NUMERIC(9,0),Mh_Mfno VARCHAR(8),
                      Seq_Id NUMERIC(18,0))
                      DECLARE @ROWCNT INT
                      DECLARE @CNT INT

                      SET @blFlagMultiMO = 'F'

                      BEGIN TRAN

                      Branch_One:--DECLARATION OF THE BRANCH LABEL

                      TRUNCATE TABLE MachHistTemp

                      H Offline
                      H Offline
                      Harley L Pebley
                      wrote on last edited by
                      #10

                      virang_21 wrote:

                      I am not saying stored proc are bad

                      I'm no DB expert, but stored procedures always seem to violate the "do one thing and do it well" principle. Seems to me, DBs should, I don't know, store data. Acting on that data seems to go beyond their purview. About the only case I can think of where an SP might be appropriate is to synthesize read-only data from other stored data.

                      1 Reply Last reply
                      0
                      • J Jan Holst Jensen2

                        Actually, truncate _can_ be rolled back on SQL server, so it is not as bad as it would be if it were Oracle code.

                        Y Offline
                        Y Offline
                        yiangos
                        wrote on last edited by
                        #11

                        Ah, yes, you're quite right on that one. :-O

                        Φευ! Εδόμεθα υπό ρηννοσχήμων λύκων! (Alas! We're devoured by lamb-guised wolves!)

                        1 Reply Last reply
                        0
                        • V virang_21

                          I have few of those in one of the project I am responsible to maintain... and sometimes something goes wrong with the system and I have oh no .. not again moment....I am not saying stored proc are bad but at times it takes you on a wild ride when figuring out what went wrong and itis absolute nightmare to debug...

                          -- =============================================
                          -- Author: XXXX
                          -- Create date: <06/07/2009>
                          -- Description: -- =============================================
                          ALTER PROCEDURE [dbo].[uspUpdateMfgOrdNo]
                          AS

                          BEGIN
                          DECLARE @Machine_Id varchar(8)
                          DECLARE @Flt_Locn VARCHAR(8)
                          DECLARE @Prod_Date datetime
                          DECLARE @Shift_Id VARCHAR(1)
                          DECLARE @Item_No varchar(15)
                          DECLARE @Prod_Qty numeric(9,0)
                          DECLARE @Tot_Prod_Qty NUMERIC(9,0)
                          DECLARE @Mh_Mfno varchar(8)
                          DECLARE @Seq_Id NUMERIC(18,0)
                          DECLARE @WorkCenter_Id VARCHAR(8)
                          DECLARE @Facility_Id VARCHAR(8)
                          DECLARE @Matched_MfNo VARCHAR(8)
                          DECLARE @Available_Qty NUMERIC(9, 0)
                          DECLARE @CurrentQty NUMERIC(9, 0)
                          DECLARE @FilledQty NUMERIC(9, 0)
                          --DECLARE @UpperLimit_Qty NUMERIC(9, 0)
                          DECLARE @Cono NUMERIC(9, 0)
                          DECLARE @Scrap_Qty NUMERIC(9, 0)
                          DECLARE @RowCount INT
                          DECLARE @blFlagMultiMO CHAR(1)
                          DECLARE @MachHistTemp TABLE(Id INT,Machine_Id VARCHAR(8),Flt_Locn VARCHAR(8),Prod_Date DATETIME,
                          Shift_Id VARCHAR(1),Item_No VARCHAR(15),Prod_Qty NUMERIC(9,0),Mh_Mfno VARCHAR(8),
                          Seq_Id NUMERIC(18,0))
                          DECLARE @ROWCNT INT
                          DECLARE @CNT INT

                          SET @blFlagMultiMO = 'F'

                          BEGIN TRAN

                          Branch_One:--DECLARATION OF THE BRANCH LABEL

                          TRUNCATE TABLE MachHistTemp

                          K Offline
                          K Offline
                          krumia
                          wrote on last edited by
                          #12

                          The size of the proc is scary enough, but here's the scariest thing in my opinion. Added IF condition on 4/Nov/2009 as suggested by Manager. Changed the Where Clause on 18/November/2009 as asked by Manager Really? What do system analysts do in this company? :doh:

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • Categories
                          • Recent
                          • Tags
                          • Popular
                          • World
                          • Users
                          • Groups