Magellan Linux

Diff of /alx-src/branches/alx-web-070/scripts/sql-schema/mcore-sql-schema.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 8489 by niro, Fri Feb 5 12:30:35 2016 UTC revision 8503 by niro, Fri Feb 5 14:34:11 2016 UTC
# Line 90  sql_create_table() Line 90  sql_create_table()
90    
91   for ((i=1; i<count; i++))   for ((i=1; i<count; i++))
92   do   do
93   line="${TABLE_DEFINITION[${i}]}"   line=( ${TABLE_DEFINITION[${i}]} )
94   column="${line%% *}"   column="${line[0]}"
95   opts="${line/${column} /}"   opts="${line[*]:1}"
96    
97   case ${opts} in   case ${opts} in
98   *"PRIMARY KEY"*) opts="${opts//PRIMARY KEY}"; primary="${column}" ;;   *"PRIMARY KEY"*) opts="${opts//PRIMARY KEY}"; primary="${column}" ;;
# Line 123  sql_create_table() Line 123  sql_create_table()
123   fi   fi
124  }  }
125    
126    # TABLE_DEFINITION=(
127    # "table_name"
128    # "column1_name after_column column1_argvs"
129    # "column2_name after_column column2_argvs"
130    # "columnN_name after_column columnN_argvs"
131    # )
132    sql_add_column()
133    {
134     local table
135     local count
136     local i
137     local line
138     local opts
139     local column
140     local autoincrement
141     local primary
142    
143     table="${TABLE_DEFINITION[0]}"
144     count="${#TABLE_DEFINITION[*]}"
145    
146     for ((i=1; i<count; i++))
147     do
148     line=( ${TABLE_DEFINITION[${i}]} )
149     column="${line[0]}"
150     after="${line[1]}"
151     opts="${line[*]:2}"
152    
153     case ${opts} in
154     *"PRIMARY KEY"*) opts="${opts//PRIMARY KEY}"; primary="${column}" ;;
155     *"primary key"*) opts="${opts//primary key}"; primary="${column}" ;;
156     esac
157    
158     case ${opts} in
159     *AUTO_INCREMENT*) opts="${opts//AUTO_INCREMENT}"; autoincrement="${column} ${opts}" ;;
160     *auto_increment*) opts="${opts//auto_increment}"; autoincrement="${column} ${opts}" ;;
161     esac
162    
163     mysqldo "ALTER TABLE ${MCORE_SQL_DB}.${table} ADD ${column} ${opts} AFTER ${after_column};" || die "add column '${table}'"
164     done
165    
166     if [[ -n ${primary} ]]
167     then
168     mysqldo "ALTER TABLE ${MCORE_SQL_DB}.${table} ADD PRIMARY KEY (${primary});" || die "adding primary key to table '${table}'"
169     fi
170     if [[ -n ${autoincrement} ]]
171     then
172     mysqldo "ALTER TABLE ${MCORE_SQL_DB}.${table} MODIFY ${autoincrement} AUTO_INCREMENT;" || die "adding auto_increment to table '${table}'"
173     fi
174    }
175    
176    # TABLE_DEFINITION=(
177    # "table_name"
178    # "column1_name column1_argvs"
179    # "column2_name column2_argvs"
180    # "columnN_name columnN_argvs"
181    # )
182    sql_modify_column()
183    {
184     local table
185     local count
186     local i
187     local line
188     local opts
189     local column
190     local autoincrement
191     local primary
192     local current_primary
193    
194     table="${TABLE_DEFINITION[0]}"
195     count="${#TABLE_DEFINITION[*]}"
196    
197     for ((i=1; i<count; i++))
198     do
199     line=( ${TABLE_DEFINITION[${i}]} )
200     column="${line[0]}"
201     opts="${line[*]:1}"
202    
203     case ${opts} in
204     *"PRIMARY KEY"*) opts="${opts//PRIMARY KEY}"; primary="${column}" ;;
205     *"primary key"*) opts="${opts//primary key}"; primary="${column}" ;;
206     esac
207    
208     case ${opts} in
209     *AUTO_INCREMENT*) opts="${opts//AUTO_INCREMENT}"; autoincrement="${column} ${opts}" ;;
210     *auto_increment*) opts="${opts//auto_increment}"; autoincrement="${column} ${opts}" ;;
211     esac
212    
213     mysqldo "ALTER TABLE ${MCORE_SQL_DB}.${table} MODIFY ${column} ${opts};" || die "modify table '${table}'"
214     done
215    
216     if [[ -n ${primary} ]]
217     then
218     # only run this if the primary key is not already the same column
219     i=( $(mysqldo 'SHOW COLUMNS FROM '${MCORE_SQL_DB}.${table}' WHERE `Key`="PRI"') )
220     current_primary="${i[0]}"
221     if [[ ${current_primary} != ${primary} ]]
222     then
223     mysqldo "ALTER TABLE ${MCORE_SQL_DB}.${table} ADD PRIMARY KEY (${primary});" || die "adding primary key to table '${table}'"
224     fi
225     fi
226     if [[ -n ${autoincrement} ]]
227     then
228     mysqldo "ALTER TABLE ${MCORE_SQL_DB}.${table} MODIFY ${autoincrement} AUTO_INCREMENT;" || die "adding auto_increment to table '${table}'"
229     fi
230    }
231    
232  # VALUE_DEFINITION=(  # VALUE_DEFINITION=(
233  # "table_name, value_column_name, bool_column_name, id_column_name"  # "table_name, value_column_name, bool_column_name, id_column_name"
234  # "value1, bool1"  # "value1, bool1"
# Line 176  sql_set_value() Line 282  sql_set_value()
282   done   done
283  }  }
284    
 update_to_database_schema_version_2()  
 {  
  return 0  
 }  
   
 update_to_database_schema_version_3()  
 {  
  return 0  
 }  
   
285  create_database()  create_database()
286  {  {
287   create_database_schema   create_database_schema
288    
289     # update database schema version
290     mysqldo "INSERT INTO ${MCORE_SQL_DB}.meta_schema(version) VALUES ('${MCORE_SQL_DB_SCHEMA_VERSION}') ON DUPLICATE KEY UPDATE version='${MCORE_SQL_DB_SCHEMA_VERSION}';" || die "updating schema version"
291  }  }
292    
293  update_database()  update_database()
294  {  {
295   local current_sql_db_version   local current_sql_db_schema_version
296   local i   local i
297    
298   current_sql_db_version=$(mysqldo "SELECT MAX(version) from meta;")   current_sql_db_schema_version=$(mysqldo "SELECT MAX(version) from meta_schema;")
299    
300   if [[ ${current_sql_db_version} = ${MCORE_SQL_DB_VERSION} ]]   if [[ ${current_sql_db_schema_version} = ${MCORE_SQL_DB_SCHEMA_VERSION} ]]
301   then   then
302   echo "Database is already up to date"   echo "Database schema is already up to date"
303   return 0   return 0
304   fi   fi
305    
306   # run every update_to_database_version_X script which exist up to version MCORE_SQL_DB_VERSION   # run every update_to_database_version_X script which exist up to version MCORE_SQL_DB_SCHEMA_VERSION
307   for i in $(seq $((${current_sql_db_version}+1)) ${MCORE_SQL_DB_VERSION})   for i in $(seq $((${current_sql_db_schema_version}+1)) ${MCORE_SQL_DB_SCHEMA_VERSION})
308   do   do
309   if [[ -n $(typeset -f update_to_database_version_${i}) ]]   if [[ -n $(typeset -f update_to_database_schema_version_${i}) ]]
310   then   then
311   echo "Running update_to_database_schema_version_${i}()"   echo "Running update_to_database_schema_version_${i}()"
312   update_to_database_schema_version_${i}   update_to_database_schema_version_${i} || die
313   fi   fi
314   done   done
315    
316     # update database schema version
317     mysqldo "INSERT INTO ${MCORE_SQL_DB}.meta_schema(version) VALUES ('${MCORE_SQL_DB_SCHEMA_VERSION}') ON DUPLICATE KEY UPDATE version='${MCORE_SQL_DB_SCHEMA_VERSION}';" || die "updating schema version"
318  }  }
319    
320  fill_database()  fill_database()
321  {  {
322     local current_sql_db_values_version
323     local i
324    
325     current_sql_db_values_version=$(mysqldo "SELECT MAX(version) from meta_values;")
326    
327     if [[ ${current_sql_db_values_version} = ${MCORE_SQL_DB_VALUES_VERSION} ]]
328     then
329     echo "Database values are already up to date"
330     return 0
331     fi
332    
333   create_database_values   create_database_values
334     # update database values version
335     mysqldo "INSERT INTO ${MCORE_SQL_DB}.meta_values(version) VALUES ('${MCORE_SQL_DB_VALUES_VERSION}') ON DUPLICATE KEY UPDATE version='${MCORE_SQL_DB_VALUES_VERSION}';" || die "updating values version"
336  }  }
337    
338  case $1 in  case $1 in

Legend:
Removed from v.8489  
changed lines
  Added in v.8503