1 /*-
2  * Copyright (c) 1996, 2020 Oracle and/or its affiliates.  All rights reserved.
3  *
4  * See the file LICENSE for license information.
5  *
6  * $Id$
7  */
8 
9 #include "db_config.h"
10 
11 #include "db_int.h"
12 #include "dbinc/db_upgrade.h"
13 #include "dbinc/db_page.h"
14 #include "dbinc/qam.h"
15 
16 /*
17  * __qam_31_qammeta --
18  *	Upgrade the database from version 1 to version 2.
19  *
20  * PUBLIC: int __qam_31_qammeta __P((DB *, char *, u_int8_t *));
21  */
22 int
__qam_31_qammeta(dbp,real_name,buf)23 __qam_31_qammeta(dbp, real_name, buf)
24 	DB *dbp;
25 	char *real_name;
26 	u_int8_t *buf;
27 {
28 	QMETA30 *oldmeta;
29 	QMETA31 *newmeta;
30 
31 	COMPQUIET(dbp, NULL);
32 	COMPQUIET(real_name, NULL);
33 
34 	newmeta = (QMETA31 *)buf;
35 	oldmeta = (QMETA30 *)buf;
36 
37 	/*
38 	 * Copy the fields to their new locations.
39 	 * They may overlap so start at the bottom and use memmove().
40 	 */
41 	newmeta->rec_page = oldmeta->rec_page;
42 	newmeta->re_pad = oldmeta->re_pad;
43 	newmeta->re_len = oldmeta->re_len;
44 	newmeta->cur_recno = oldmeta->cur_recno;
45 	newmeta->first_recno = oldmeta->first_recno;
46 	newmeta->start = oldmeta->start;
47 	memmove(newmeta->dbmeta.uid,
48 	    oldmeta->dbmeta.uid, sizeof(oldmeta->dbmeta.uid));
49 	newmeta->dbmeta.flags = oldmeta->dbmeta.flags;
50 	newmeta->dbmeta.record_count = 0;
51 	newmeta->dbmeta.key_count = 0;
52 	ZERO_LSN(newmeta->dbmeta.unused3);
53 
54 	/* Update the version. */
55 	newmeta->dbmeta.version = 2;
56 
57 	return (0);
58 }
59 
60 /*
61  * __qam_32_qammeta --
62  *	Upgrade the database from version 2 to version 3.
63  *
64  * PUBLIC: int __qam_32_qammeta __P((DB *, char *, u_int8_t *));
65  */
66 int
__qam_32_qammeta(dbp,real_name,buf)67 __qam_32_qammeta(dbp, real_name, buf)
68 	DB *dbp;
69 	char *real_name;
70 	u_int8_t *buf;
71 {
72 	QMETA31 *oldmeta;
73 	QMETA32 *newmeta;
74 
75 	COMPQUIET(dbp, NULL);
76 	COMPQUIET(real_name, NULL);
77 
78 	newmeta = (QMETA32 *)buf;
79 	oldmeta = (QMETA31 *)buf;
80 
81 	/*
82 	 * Copy the fields to their new locations.
83 	 * We are dropping the first field so move
84 	 * from the top.
85 	 */
86 	newmeta->first_recno = oldmeta->first_recno;
87 	newmeta->cur_recno = oldmeta->cur_recno;
88 	newmeta->re_len = oldmeta->re_len;
89 	newmeta->re_pad = oldmeta->re_pad;
90 	newmeta->rec_page = oldmeta->rec_page;
91 	newmeta->page_ext = 0;
92 	/* cur_recno now points to the first free slot. */
93 	newmeta->cur_recno++;
94 	if (newmeta->first_recno == 0)
95 		newmeta->first_recno = 1;
96 
97 	/* Update the version. */
98 	newmeta->dbmeta.version = 3;
99 
100 	return (0);
101 }
102