55 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* global WIKI */
 | 
						|
 | 
						|
exports.up = async knex => {
 | 
						|
  const dbCompat = {
 | 
						|
    charset: (WIKI.config.db.type === `mysql` || WIKI.config.db.type === `mariadb`),
 | 
						|
    selfCascadeDelete: WIKI.config.db.type !== 'mssql'
 | 
						|
  }
 | 
						|
 | 
						|
  return knex.schema
 | 
						|
    .dropTable('pageTree')
 | 
						|
    .createTable('pageTree', table => {
 | 
						|
      if (dbCompat.charset) { table.charset('utf8mb4') }
 | 
						|
      table.integer('id').unsigned().primary()
 | 
						|
      table.string('path').notNullable()
 | 
						|
      table.integer('depth').unsigned().notNullable()
 | 
						|
      table.string('title').notNullable()
 | 
						|
      table.boolean('isPrivate').notNullable().defaultTo(false)
 | 
						|
      table.boolean('isFolder').notNullable().defaultTo(false)
 | 
						|
      table.string('privateNS')
 | 
						|
    })
 | 
						|
    .table('pageTree', table => {
 | 
						|
      if (dbCompat.selfCascadeDelete) {
 | 
						|
        table.integer('parent').unsigned().references('id').inTable('pageTree').onDelete('CASCADE')
 | 
						|
      } else {
 | 
						|
        table.integer('parent').unsigned()
 | 
						|
      }
 | 
						|
      table.integer('pageId').unsigned().references('id').inTable('pages').onDelete('CASCADE')
 | 
						|
      table.string('localeCode', 5).references('code').inTable('locales')
 | 
						|
    })
 | 
						|
}
 | 
						|
 | 
						|
exports.down = knex => {
 | 
						|
  const dbCompat = {
 | 
						|
    charset: (WIKI.config.db.type === `mysql` || WIKI.config.db.type === `mariadb`),
 | 
						|
    selfCascadeDelete: WIKI.config.db.type !== 'mssql'
 | 
						|
  }
 | 
						|
  return knex.schema
 | 
						|
    .dropTable('pageTree')
 | 
						|
    .createTable('pageTree', table => {
 | 
						|
      if (dbCompat.charset) { table.charset('utf8mb4') }
 | 
						|
      table.integer('id').primary()
 | 
						|
      table.string('path').notNullable()
 | 
						|
      table.integer('depth').unsigned().notNullable()
 | 
						|
      table.string('title').notNullable()
 | 
						|
      table.boolean('isPrivate').notNullable().defaultTo(false)
 | 
						|
      table.boolean('isFolder').notNullable().defaultTo(false)
 | 
						|
      table.string('privateNS')
 | 
						|
    })
 | 
						|
    .table('pageTree', table => {
 | 
						|
      table.integer('parent').unsigned().references('id').inTable('pageTree')
 | 
						|
      table.integer('pageId').unsigned().references('id').inTable('pages')
 | 
						|
      table.string('localeCode', 5).references('code').inTable('locales')
 | 
						|
    })
 | 
						|
}
 |