mirror of
https://github.com/documize/community.git
synced 2025-07-19 13:19:43 +02:00
Make database install/upgrade provider aware
Ground work for installing and upgrading database schema based upon DB provider (MySQL, PostgresSQL, SQL Server, etc.) Cleaned up legacy cruft, refactored, commented and made simpler for to support additional database providers.
This commit is contained in:
parent
cf1e1ff943
commit
2336dab69f
38 changed files with 1401 additions and 1208 deletions
80
core/database/scripts.go
Normal file
80
core/database/scripts.go
Normal file
|
@ -0,0 +1,80 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
package database
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/documize/community/core/env"
|
||||
"sort"
|
||||
|
||||
"github.com/documize/community/server/web"
|
||||
)
|
||||
|
||||
// Scripts holds all .SQL files for all supported database providers.
|
||||
type Scripts struct {
|
||||
MySQLScripts []Script
|
||||
PostgresSQLScripts []Script
|
||||
SQLServerScripts []Script
|
||||
}
|
||||
|
||||
// Script holds SQL script and it's associated version number.
|
||||
type Script struct {
|
||||
Version int
|
||||
Script []byte
|
||||
}
|
||||
|
||||
// LoadScripts returns .SQL scripts for supported database providers.
|
||||
func LoadScripts() (s Scripts, err error) {
|
||||
assetDir := "bindata/scripts"
|
||||
|
||||
// MySQL
|
||||
s.MySQLScripts, err = loadFiles(fmt.Sprintf("%s/mysql", assetDir))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// SpecificScripts returns SQL scripts for current databasse provider.
|
||||
func SpecificScripts(runtime *env.Runtime, all Scripts) (s []Script) {
|
||||
switch runtime.Storage.Type {
|
||||
case env.StoreTypeMySQL, env.StoreTypeMariaDB, env.StoreTypePercona:
|
||||
return all.MySQLScripts
|
||||
case env.StoreTypePostgreSQL:
|
||||
return all.PostgresSQLScripts
|
||||
case env.StoreTypeMSSQL:
|
||||
return all.SQLServerScripts
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// loadFiles returns all SQL scripts in specified folder as [][]byte.
|
||||
func loadFiles(path string) (b []Script, err error) {
|
||||
buf := []byte{}
|
||||
scripts, err := web.AssetDir(path)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
sort.Strings(scripts)
|
||||
for _, file := range scripts {
|
||||
buf, err = web.Asset(fmt.Sprintf("%s/%s", path, file))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
b = append(b, Script{Version: extractVersionNumber(file), Script: buf})
|
||||
}
|
||||
|
||||
return b, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue