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. The Lounge
  3. This code will self-destruct in...

This code will self-destruct in...

Scheduled Pinned Locked Moved The Lounge
databasequestion
43 Posts 27 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.
  • C Chris Maunder

    I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

    cheers Chris Maunder

    C Offline
    C Offline
    CodeWraith
    wrote on last edited by
    #16

    Chris Maunder wrote:

    Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today?

    Kindof. I always try to write very modular reusable components. For example I have a module that manages language resources in the database. I don't want to deal with that every time I start a new project. On the code side I have modules for the presentation tier, application logic, services, data access and entities. I only need to include these libraries and everything is ready - except the database. I do not have code to handle migrations, but when I run my project that now includes this module, it takes the database context and sets up the required tables if they are not there yet. But speaking of migrations: How about Entity Framework code first?

    I have lived with several Zen masters - all of them were cats.

    1 Reply Last reply
    0
    • C Chris Maunder

      I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

      cheers Chris Maunder

      G Offline
      G Offline
      GKP1992
      wrote on last edited by
      #17

      Skynet :-D . Jokes apart, I do not think there exists a framework/suit intelligent enough to "fix" itself like that. But AI is progressing fast, soon you may get what you want. Or maybe they'll take over our jobs. Are you afraid? :laugh:

      I am not the one who knocks. I never knock. In fact, I hate knocking.

      1 Reply Last reply
      0
      • C Chris Maunder

        I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

        cheers Chris Maunder

        P Offline
        P Offline
        Phil J Pearson
        wrote on last edited by
        #18

        I'm addressing only the "self-destructing" code part. I use a plugin system with my code so that plugins can implement features undreamed of when the original code was deployed. You just drop the plugin dll into the appropriate folder. I can envisage a system that would simply unload the plugin when it's no longer needed and delete the dll. The original code (once it supports the plugin system) doesn't need to change at all.

        Phil


        The opinions expressed in this post are not necessarily those of the author, especially if you find them impolite, inaccurate or inflammatory.

        1 Reply Last reply
        0
        • C Chris Maunder

          An app rewriting itself is really the closest I could envision at the moment. An update is close, but it's a wholesale replacement, not a chameleon like morphing.

          cheers Chris Maunder

          H Offline
          H Offline
          Herbie Mountjoy
          wrote on last edited by
          #19

          This is getting onto the realms of TI-99s when code could overwrite itself. It was almost always a very bad idea.

          We're philosophical about power outages here. A.C. come, A.C. go.

          1 Reply Last reply
          0
          • C Chris Maunder

            You've just sent every DBA in the room screaming and clawing at their eyeballs ;) The situation is that the new code expects a column; the old version doesn't. Usually you can just update the database without the old code caring, then update the code and the new code picks up the new column. What if you can't run the migration until after you deploy the code because part of the migration will screw up, right royally, the old code? (The specific situation I have is a field being renamed then a new field being added with the previous name. Bad naming choices years ago...)

            cheers Chris Maunder

            A Offline
            A Offline
            Asday
            wrote on last edited by
            #20

            This is reasonably common over in the django world. You just do a double deployment. The first deployment migrates the data into a new column and transmogrifies it as needed. The second deployment brings the newer code and does the other half of the migration. Of course, the real solution is not to have whatever's going on be as coupled. Your application layer shouldn't care so much about your data layer.

            S 1 Reply Last reply
            0
            • C Chris Maunder

              I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

              cheers Chris Maunder

              M Offline
              M Offline
              Marc Clifton
              wrote on last edited by
              #21

              Chris Maunder wrote:

              Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date?

              It's called Windows Update. ;)

              Latest Article - Class-less Coding - Minimalist C# and Why F# and Function Programming Has Some Advantages Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802

              1 Reply Last reply
              0
              • A Asday

                This is reasonably common over in the django world. You just do a double deployment. The first deployment migrates the data into a new column and transmogrifies it as needed. The second deployment brings the newer code and does the other half of the migration. Of course, the real solution is not to have whatever's going on be as coupled. Your application layer shouldn't care so much about your data layer.

                S Offline
                S Offline
                Slacker007
                wrote on last edited by
                #22

                Asday wrote:

                the real solution is not to have whatever's going on be as coupled. Your application layer shouldn't care so much about your data layer.

                :thumbsup::thumbsup:

                1 Reply Last reply
                0
                • C Chris Maunder

                  I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

                  cheers Chris Maunder

                  D Offline
                  D Offline
                  Dan Neely
                  wrote on last edited by
                  #23

                  If the intent is just to make sure the temp code is removed from your code base after it's done its job you could just put something in the codebase to trigger a build error in debug after enough time's past that you think it should be done to remind you to remove it. I've found a kludge[^] that is supposed to work like a C++ static assert. Wrap it in an `#if DEBUG` and you should be good to go.

                  public void TempCodeExpiredAssert(DateTime expirationDate)
                  {
                  #if DEBUG
                  byte a = DateTime.Now > expirationDate ? 0 : -1;

                  #endif
                  

                  }

                  PS, code is totally untested to avoid the no programming questions in the lounge rule.

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :rolleyes:

                  :roll

                  C 1 Reply Last reply
                  0
                  • C Chris Maunder

                    I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

                    cheers Chris Maunder

                    L Offline
                    L Offline
                    loctrice
                    wrote on last edited by
                    #24

                    We setup a sort of versioning table that our migration scripts would run and add to at a previous work place. We had code to run the migrations in order, and only once. So we could easily run the deploy scripts against the database in any state along the way and be safe/confident.

                    Elephant elephant elephant, sunshine sunshine sunshine

                    C 1 Reply Last reply
                    0
                    • L loctrice

                      We setup a sort of versioning table that our migration scripts would run and add to at a previous work place. We had code to run the migrations in order, and only once. So we could easily run the deploy scripts against the database in any state along the way and be safe/confident.

                      Elephant elephant elephant, sunshine sunshine sunshine

                      C Offline
                      C Offline
                      Chris Maunder
                      wrote on last edited by
                      #25

                      We do exactly the same thing. That example was merely an example. I'm looking more towards code that actively changes itself.

                      cheers Chris Maunder

                      1 Reply Last reply
                      0
                      • C Chris Maunder

                        I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

                        cheers Chris Maunder

                        B Offline
                        B Offline
                        Bruce Patin
                        wrote on last edited by
                        #26

                        We have views and stored procedures between the data and the applications. If I need to migrate a column to a different name or size, I 1. add the new column, 2. add code to the create and update procedures to update the new column as well as the old, 3. manually copy the old data to the new data, 4. change the views to use the new column (if adding new functionality rather than migrating, use ISNULL() as needed), 5. make new versions of the procedures (I add a number to the name for that purpose) to use the new column, 6. change the application in development and testing to use the new procedures, 7. deploy the new version of the application. Later, after the data and application have been backed up or updated several times, I can delete the old versions of the procedures.

                        1 Reply Last reply
                        0
                        • C Chris Maunder

                          I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

                          cheers Chris Maunder

                          B Offline
                          B Offline
                          Bassam Abdul Baki
                          wrote on last edited by
                          #27

                          Add a "date >= ??? or" or "negation and" statement to your if statement so that it automatically gets or doesn't get called after a certain date. Another option for enabling is if you can send a cleaner code to remove the if/then statement by converting it to whitespace and leaving the braces as is. Then the code will get called thereafter. GoTo statement? :)

                          Web - BM - RSS - Math - LinkedIn

                          C 1 Reply Last reply
                          0
                          • B Bassam Abdul Baki

                            Add a "date >= ??? or" or "negation and" statement to your if statement so that it automatically gets or doesn't get called after a certain date. Another option for enabling is if you can send a cleaner code to remove the if/then statement by converting it to whitespace and leaving the braces as is. Then the code will get called thereafter. GoTo statement? :)

                            Web - BM - RSS - Math - LinkedIn

                            C Offline
                            C Offline
                            Chris Maunder
                            wrote on last edited by
                            #28

                            I'm thinking I'll just ditch if/then/while and for statements altogether and use goto.

                            cheers Chris Maunder

                            B 1 Reply Last reply
                            0
                            • C Chris Maunder

                              I'm thinking I'll just ditch if/then/while and for statements altogether and use goto.

                              cheers Chris Maunder

                              B Offline
                              B Offline
                              Bassam Abdul Baki
                              wrote on last edited by
                              #29

                              Back to (the) Basic(s).

                              Web - BM - RSS - Math - LinkedIn

                              1 Reply Last reply
                              0
                              • C Chris Maunder

                                Our issue is merely a catalyst for what I was thinking about. There's tons of ways to change our process, but it's more about the concept of code actively changing itself: you write a small hack, and a week later that hack has gone. The code actively cleans up itself. Maybe the IDE is involved. Maybe it's the compiler. Just thinking.

                                cheers Chris Maunder

                                K Offline
                                K Offline
                                Kirk 10389821
                                wrote on last edited by
                                #30

                                The first thing that comes to mind for me is conditional compilation, tied to the targeted version of the DB you are compiling for (the variable you must set/control, like compiler versions). Then combined with an IDE feature (Plugin) that goes X revs back to suggest/clean as you go. I cannot imagine it being done in one step. Using a DB versioning system, we would target a specific X.Y version. #ifdef DBVER_MM = 7.4 ... #endif A quick scan of DBVER_MM (Major.Minor) would find removable code. But a plugin could handle it for you to manage the version # of the DB, and suggest/clean the old revs of the code. The challenge is that you MUST know 2 things: 1) The target DB version: Which changes over time 2) which code will be "targeted" (both for compile time inclusion, and for effective cleaning) And you should know how long, you want to keep that code around in case it needs to be re-used or reviewed. The good news is that it should also be in revision control. Just some thoughts.

                                1 Reply Last reply
                                0
                                • C Chris Maunder

                                  Our issue is merely a catalyst for what I was thinking about. There's tons of ways to change our process, but it's more about the concept of code actively changing itself: you write a small hack, and a week later that hack has gone. The code actively cleans up itself. Maybe the IDE is involved. Maybe it's the compiler. Just thinking.

                                  cheers Chris Maunder

                                  K Offline
                                  K Offline
                                  Kirk 10389821
                                  wrote on last edited by
                                  #31

                                  The first thing that comes to mind for me is conditional compilation, tied to the targeted version of the DB you are compiling for (the variable you must set/control, like compiler versions). Then combined with an IDE feature (Plugin) that goes X revs back to suggest/clean as you go. I cannot imagine it being done in one step. Using a DB versioning system, we would target a specific X.Y version. \#ifdef DBVER_MM = 7.4 ... \#endif A quick scan of DBVER_MM (Major.Minor) would find removable code. But a plugin could handle it for you to manage the version # of the DB, and suggest/clean the old revs of the code. The challenge is that you MUST know 2 things: 1) The target DB version: Which changes over time 2) which code will be "targeted" (both for compile time inclusion, and for effective cleaning) And you should know how long, you want to keep that code around in case it needs to be re-used or reviewed. The good news is that it should also be in revision control. Just some thoughts.

                                  1 Reply Last reply
                                  0
                                  • C Chris Maunder

                                    I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

                                    cheers Chris Maunder

                                    F Offline
                                    F Offline
                                    FredWah
                                    wrote on last edited by
                                    #32

                                    You can do it in native code Tutorials | Catch22[^]

                                    1 Reply Last reply
                                    0
                                    • W W Balboos GHB

                                      So you can't just test for the existence of the newly named old column by its new name and handle accordingly (and where necessary)? In code and queries. Seems a safe and simple-minded solution. Handles itself, and some day you just strip out the conditional (while doing some other upgrade?).

                                      Ravings en masse^

                                      "The difference between genius and stupidity is that genius has its limits." - Albert Einstein

                                      "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010

                                      J Offline
                                      J Offline
                                      jschell
                                      wrote on last edited by
                                      #33

                                      W∴ Balboos wrote:

                                      So you can't just test for the existence of the newly named old column by its new name and handle accordingl

                                      Where do you put it? Keep in mind that additions are the easiest. There are deletions and updates. For the latter think about a column that has been split into two new columns. And consider agile where you might have 100 changes in month and several rollouts and now 3 months later complications start to arise due to overlaps.

                                      W 1 Reply Last reply
                                      0
                                      • C Chris Maunder

                                        I had a thought. (I know: run, screaming, and hide your kids...) I often have to write code to deal with data migrations. We add a column to a database and we need to briefly have the code run on staging and production, running against the same database. So I add code like "if column exists, load column value". After the deploy is completed we remove the "if column exists" and redeploy. Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date? Does this even make sense? Am I few coffees short of a barista today? It just seemed...intriguing.

                                        cheers Chris Maunder

                                        J Offline
                                        J Offline
                                        jschell
                                        wrote on last edited by
                                        #34

                                        Chris Maunder wrote:

                                        Has anyone ever heard of a system or language or framework that provides the means to have code self-destruct after a certain date?

                                        Haven't heard of it. I wouldn't use it. I version the database. Each instance has a version number table which includes at least the version number and a timestamp. The application knows what version(s) it will deal with and will refuse to run (exit) if the version is not allowed. Separate process updates the database, when completed it updates the version table. Each version consists of one or more updates that are blocked together. That means that every so often one can just delete the oldest blocks (say 6 months ago) so that they no longer run. Presumption is that there are no older databases at that point (if selling a product then the updated product would include the old install and thus the update.) Naturally it is under version control so it is always retrievable.

                                        1 Reply Last reply
                                        0
                                        • J jschell

                                          W∴ Balboos wrote:

                                          So you can't just test for the existence of the newly named old column by its new name and handle accordingl

                                          Where do you put it? Keep in mind that additions are the easiest. There are deletions and updates. For the latter think about a column that has been split into two new columns. And consider agile where you might have 100 changes in month and several rollouts and now 3 months later complications start to arise due to overlaps.

                                          W Offline
                                          W Offline
                                          W Balboos GHB
                                          wrote on last edited by
                                          #35

                                          1 - No difference. If the new column exists then all the operations operate on the new set of fields; if it doesn't exist, use the old set. 2 - I don't consider agile.   You example - which strongly implies a rush to just have something to show - anything - underscores my distaste.   I'm of the school of thought: try to do it right the first time.

                                          Ravings en masse^

                                          "The difference between genius and stupidity is that genius has its limits." - Albert Einstein

                                          "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010

                                          J 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