~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to database/schema/upgrade.py

  • Committer: William Grant
  • Date: 2012-01-03 07:30:21 UTC
  • mto: This revision was merged to the branch mainline in revision 14621.
  • Revision ID: william.grant@canonical.com-20120103073021-qvprj6kbnpg0h1qv
Update a few templates.

Show diffs side-by-side

added added

removed removed

Lines of Context:
110
110
        LaunchpadDatabaseRevision.start_time
111
111
            = transaction_timestamp() AT TIME ZONE 'UTC';
112
112
    """)
 
113
START_UPDATE_LOG_SQL = dedent("""\
 
114
    INSERT INTO LaunchpadDatabaseUpdateLog (
 
115
        start_time, end_time, branch_nick, revno, revid)
 
116
    VALUES (transaction_timestamp() AT TIME ZONE 'UTC', NULL, %s, %s, %s);
 
117
    """)
 
118
FINISH_UPDATE_LOG_SQL = dedent("""\
 
119
    UPDATE LaunchpadDatabaseUpdateLog
 
120
    SET end_time = statement_timestamp() AT TIME ZONE 'UTC'
 
121
    WHERE start_time = transaction_timestamp() AT TIME ZONE 'UTC';
 
122
    """)
113
123
 
114
124
 
115
125
def to_seconds(td):
162
172
 
163
173
def apply_patches_normal(con):
164
174
    """Update a non replicated database."""
 
175
    # On dev environments, until we create a fresh database baseline the
 
176
    # LaunchpadDatabaseUpdateLog tables does not exist at this point (it
 
177
    # will be created later via database patch). Don't try to update
 
178
    # LaunchpadDatabaseUpdateLog if it does not exist.
 
179
    cur = con.cursor()
 
180
    cur.execute("""
 
181
        SELECT EXISTS (
 
182
            SELECT TRUE FROM information_schema.tables
 
183
            WHERE
 
184
                table_schema='public'
 
185
                AND table_name='launchpaddatabaseupdatelog')
 
186
            """)
 
187
    updatelog_exists = cur.fetchone()[0]
 
188
 
 
189
    # Add a record to LaunchpadDatabaseUpdateLog that we are starting
 
190
    # an update.
 
191
    if updatelog_exists:
 
192
        cur.execute(START_UPDATE_LOG_SQL % sqlvalues(*get_bzr_details()))
 
193
 
165
194
    # trusted.sql contains all our stored procedures, which may
166
195
    # be required for patches to apply correctly so must be run first.
167
196
    apply_other(con, 'trusted.sql')
168
197
 
169
198
    # Prepare to repair patch timestamps if necessary.
170
 
    cur = con.cursor()
171
199
    cur.execute(FIX_PATCH_TIMES_PRE_SQL)
172
200
 
173
201
    # Apply the patches
182
210
    # Update comments.
183
211
    apply_comments(con)
184
212
 
 
213
    # Update the LaunchpadDatabaseUpdateLog record, stating the
 
214
    # completion time.
 
215
    if updatelog_exists:
 
216
        cur.execute(FINISH_UPDATE_LOG_SQL)
 
217
 
185
218
 
186
219
def apply_patches_replicated():
187
220
    """Update a Slony-I cluster."""
215
248
            # Flush or we might lose statements from buffering.
216
249
            combined_sql.flush()
217
250
 
 
251
    # Add a LaunchpadDatabaseUpdateLog record that we are starting patch
 
252
    # application.
 
253
    add_sql(START_UPDATE_LOG_SQL % sqlvalues(*get_bzr_details()))
 
254
 
218
255
    # Apply trusted.sql
219
256
    add_sql(open(os.path.join(SCHEMA_DIR, 'trusted.sql'), 'r').read())
220
257