mirror of
https://github.com/documize/community.git
synced 2025-07-21 06:09:42 +02:00
Support MySQL 8.x series
Two issues resolved relating to MySQL 8: 1. DB version checking skips MINOR/PATCH checks if MAJOR release changed. 2. Keyword 'admin' quoted to ensure MySQL compat. Closes #152
This commit is contained in:
parent
0f87d5b07e
commit
2066f72258
7 changed files with 700 additions and 673 deletions
23
compile.sh
Executable file
23
compile.sh
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
echo "Generating in-memory static assets..."
|
||||||
|
# go get -u github.com/jteeuwen/go-bindata/...
|
||||||
|
# go get -u github.com/elazarl/go-bindata-assetfs/...
|
||||||
|
cd embed
|
||||||
|
go generate
|
||||||
|
|
||||||
|
echo "Compiling app..."
|
||||||
|
cd ..
|
||||||
|
for arch in amd64 ; do
|
||||||
|
for os in darwin linux windows ; do
|
||||||
|
if [ "$os" == "windows" ] ; then
|
||||||
|
echo "Compiling documize-community-$os-$arch.exe"
|
||||||
|
env GOOS=$os GOARCH=$arch go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -o bin/documize-community-$os-$arch.exe ./edition/community.go
|
||||||
|
else
|
||||||
|
echo "Compiling documize-community-$os-$arch"
|
||||||
|
env GOOS=$os GOARCH=$arch go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -o bin/documize-community-$os-$arch ./edition/community.go
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Finished."
|
|
@ -77,6 +77,10 @@ func Check(runtime *env.Runtime) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, v := range verInts {
|
for k, v := range verInts {
|
||||||
|
// If major release is higher then skip minor/patch checks (e.g. 8.x.x > 5.x.x)
|
||||||
|
if k == 0 && len(verNums) > 0 && verNums[0] > verInts[0] {
|
||||||
|
break
|
||||||
|
}
|
||||||
if verNums[k] < v {
|
if verNums[k] < v {
|
||||||
want := fmt.Sprintf("%d.%d.%d", verInts[0], verInts[1], verInts[2])
|
want := fmt.Sprintf("%d.%d.%d", verInts[0], verInts[1], verInts[2])
|
||||||
runtime.Log.Error("MySQL version element "+strconv.Itoa(k+1)+" of '"+version+"' not high enough, need at least version "+want, errors.New("bad MySQL version"))
|
runtime.Log.Error("MySQL version element "+strconv.Itoa(k+1)+" of '"+version+"' not high enough, need at least version "+want, errors.New("bad MySQL version"))
|
||||||
|
|
|
@ -153,7 +153,7 @@ func setupAccount(rt *env.Runtime, completion onboardRequest, serial string) (er
|
||||||
|
|
||||||
// Link user to organization.
|
// Link user to organization.
|
||||||
accountID := uniqueid.Generate()
|
accountID := uniqueid.Generate()
|
||||||
sql = fmt.Sprintf("insert into account (refid, userid, orgid, admin, editor) values (\"%s\", \"%s\", \"%s\",1, 1)", accountID, userID, orgID)
|
sql = fmt.Sprintf("insert into account (refid, userid, orgid, `admin`, editor) values (\"%s\", \"%s\", \"%s\",1, 1)", accountID, userID, orgID)
|
||||||
_, err = runSQL(rt, sql)
|
_, err = runSQL(rt, sql)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -13,6 +13,6 @@ ALTER TABLE useractivity ADD COLUMN `metadata` VARCHAR(1000) NOT NULL DEFAULT ''
|
||||||
|
|
||||||
-- new role for viewing content analytics
|
-- new role for viewing content analytics
|
||||||
ALTER TABLE account ADD COLUMN `analytics` BOOL NOT NULL DEFAULT 0 AFTER `users`;
|
ALTER TABLE account ADD COLUMN `analytics` BOOL NOT NULL DEFAULT 0 AFTER `users`;
|
||||||
UPDATE account SET analytics=1 WHERE admin=1;
|
UPDATE account SET analytics=1 WHERE `admin`=1;
|
||||||
|
|
||||||
-- deprecations
|
-- deprecations
|
||||||
|
|
|
@ -33,7 +33,7 @@ func (s Scope) Add(ctx domain.RequestContext, account account.Account) (err erro
|
||||||
account.Created = time.Now().UTC()
|
account.Created = time.Now().UTC()
|
||||||
account.Revised = time.Now().UTC()
|
account.Revised = time.Now().UTC()
|
||||||
|
|
||||||
_, err = ctx.Transaction.Exec("INSERT INTO account (refid, orgid, userid, admin, editor, users, analytics, active, created, revised) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
_, err = ctx.Transaction.Exec("INSERT INTO account (refid, orgid, userid, `admin`, editor, users, analytics, active, created, revised) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||||
account.RefID, account.OrgID, account.UserID, account.Admin, account.Editor, account.Users, account.Analytics, account.Active, account.Created, account.Revised)
|
account.RefID, account.OrgID, account.UserID, account.Admin, account.Editor, account.Users, account.Analytics, account.Active, account.Created, account.Revised)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -46,7 +46,7 @@ func (s Scope) Add(ctx domain.RequestContext, account account.Account) (err erro
|
||||||
// GetUserAccount returns the database account record corresponding to the given userID, using the client's current organizaion.
|
// GetUserAccount returns the database account record corresponding to the given userID, using the client's current organizaion.
|
||||||
func (s Scope) GetUserAccount(ctx domain.RequestContext, userID string) (account account.Account, err error) {
|
func (s Scope) GetUserAccount(ctx domain.RequestContext, userID string) (account account.Account, err error) {
|
||||||
err = s.Runtime.Db.Get(&account, `
|
err = s.Runtime.Db.Get(&account, `
|
||||||
SELECT a.id, a.refid, a.orgid, a.userid, a.editor, a.admin, a.users, a.analytics, a.active, a.created, a.revised,
|
SELECT a.id, a.refid, a.orgid, a.userid, a.editor, `+"a.`admin`"+`, a.users, a.analytics, a.active, a.created, a.revised,
|
||||||
b.company, b.title, b.message, b.domain
|
b.company, b.title, b.message, b.domain
|
||||||
FROM account a, organization b
|
FROM account a, organization b
|
||||||
WHERE b.refid=a.orgid AND a.orgid=? AND a.userid=?`, ctx.OrgID, userID)
|
WHERE b.refid=a.orgid AND a.orgid=? AND a.userid=?`, ctx.OrgID, userID)
|
||||||
|
@ -61,7 +61,7 @@ func (s Scope) GetUserAccount(ctx domain.RequestContext, userID string) (account
|
||||||
// GetUserAccounts returns a slice of database account records, for all organizations that the userID is a member of, in organization title order.
|
// GetUserAccounts returns a slice of database account records, for all organizations that the userID is a member of, in organization title order.
|
||||||
func (s Scope) GetUserAccounts(ctx domain.RequestContext, userID string) (t []account.Account, err error) {
|
func (s Scope) GetUserAccounts(ctx domain.RequestContext, userID string) (t []account.Account, err error) {
|
||||||
err = s.Runtime.Db.Select(&t, `
|
err = s.Runtime.Db.Select(&t, `
|
||||||
SELECT a.id, a.refid, a.orgid, a.userid, a.editor, a.admin, a.users, a.analytics, a.active, a.created, a.revised,
|
SELECT a.id, a.refid, a.orgid, a.userid, a.editor, `+"a.`admin`"+`, a.users, a.analytics, a.active, a.created, a.revised,
|
||||||
b.company, b.title, b.message, b.domain
|
b.company, b.title, b.message, b.domain
|
||||||
FROM account a, organization b
|
FROM account a, organization b
|
||||||
WHERE a.userid=? AND a.orgid=b.refid AND a.active=1 ORDER BY b.title`, userID)
|
WHERE a.userid=? AND a.orgid=b.refid AND a.active=1 ORDER BY b.title`, userID)
|
||||||
|
@ -76,7 +76,7 @@ func (s Scope) GetUserAccounts(ctx domain.RequestContext, userID string) (t []ac
|
||||||
// GetAccountsByOrg returns a slice of database account records, for all users in the client's organization.
|
// GetAccountsByOrg returns a slice of database account records, for all users in the client's organization.
|
||||||
func (s Scope) GetAccountsByOrg(ctx domain.RequestContext) (t []account.Account, err error) {
|
func (s Scope) GetAccountsByOrg(ctx domain.RequestContext) (t []account.Account, err error) {
|
||||||
err = s.Runtime.Db.Select(&t,
|
err = s.Runtime.Db.Select(&t,
|
||||||
`SELECT a.id, a.refid, a.orgid, a.userid, a.editor, a.admin, a.users, a.analytics, a.active, a.created, a.revised,
|
`SELECT a.id, a.refid, a.orgid, a.userid, a.editor, `+"a.`admin`"+`, a.users, a.analytics, a.active, a.created, a.revised,
|
||||||
b.company, b.title, b.message, b.domain
|
b.company, b.title, b.message, b.domain
|
||||||
FROM account a, organization b
|
FROM account a, organization b
|
||||||
WHERE a.orgid=b.refid AND a.orgid=? AND a.active=1`, ctx.OrgID)
|
WHERE a.orgid=b.refid AND a.orgid=? AND a.active=1`, ctx.OrgID)
|
||||||
|
@ -109,7 +109,7 @@ func (s Scope) CountOrgAccounts(ctx domain.RequestContext) (c int) {
|
||||||
func (s Scope) UpdateAccount(ctx domain.RequestContext, account account.Account) (err error) {
|
func (s Scope) UpdateAccount(ctx domain.RequestContext, account account.Account) (err error) {
|
||||||
account.Revised = time.Now().UTC()
|
account.Revised = time.Now().UTC()
|
||||||
|
|
||||||
_, err = ctx.Transaction.NamedExec("UPDATE account SET userid=:userid, admin=:admin, editor=:editor, users=:users, analytics=:analytics, active=:active, revised=:revised WHERE orgid=:orgid AND refid=:refid", &account)
|
_, err = ctx.Transaction.NamedExec("UPDATE account SET userid=:userid, `admin`=:admin, editor=:editor, users=:users, analytics=:analytics, active=:active, revised=:revised WHERE orgid=:orgid AND refid=:refid", &account)
|
||||||
|
|
||||||
if err != sql.ErrNoRows && err != nil {
|
if err != sql.ErrNoRows && err != nil {
|
||||||
err = errors.Wrap(err, fmt.Sprintf("execute update for account %s", account.RefID))
|
err = errors.Wrap(err, fmt.Sprintf("execute update for account %s", account.RefID))
|
||||||
|
|
|
@ -114,7 +114,7 @@ func (s Scope) GetActiveUsersForOrganization(ctx domain.RequestContext) (u []use
|
||||||
|
|
||||||
err = s.Runtime.Db.Select(&u,
|
err = s.Runtime.Db.Select(&u,
|
||||||
`SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.lastversion, u.created, u.revised,
|
`SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.lastversion, u.created, u.revised,
|
||||||
u.global, a.active, a.editor, a.admin, a.users as viewusers, a.analytics
|
u.global, a.active, a.editor, `+"a.`admin`"+`, a.users as viewusers, a.analytics
|
||||||
FROM user u, account a
|
FROM user u, account a
|
||||||
WHERE u.refid=a.userid AND a.orgid=? AND a.active=1
|
WHERE u.refid=a.userid AND a.orgid=? AND a.active=1
|
||||||
ORDER BY u.firstname,u.lastname`,
|
ORDER BY u.firstname,u.lastname`,
|
||||||
|
@ -143,7 +143,7 @@ func (s Scope) GetUsersForOrganization(ctx domain.RequestContext, filter string)
|
||||||
|
|
||||||
err = s.Runtime.Db.Select(&u,
|
err = s.Runtime.Db.Select(&u,
|
||||||
`SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.lastversion, u.created, u.revised,
|
`SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.lastversion, u.created, u.revised,
|
||||||
u.global, a.active, a.editor, a.admin, a.users as viewusers, a.analytics
|
u.global, a.active, a.editor `+"a.`admin`"+`, a.users as viewusers, a.analytics
|
||||||
FROM user u, account a
|
FROM user u, account a
|
||||||
WHERE u.refid=a.userid AND a.orgid=? `+likeQuery+
|
WHERE u.refid=a.userid AND a.orgid=? `+likeQuery+
|
||||||
`ORDER BY u.firstname, u.lastname LIMIT 100`, ctx.OrgID)
|
`ORDER BY u.firstname, u.lastname LIMIT 100`, ctx.OrgID)
|
||||||
|
@ -165,7 +165,7 @@ func (s Scope) GetSpaceUsers(ctx domain.RequestContext, spaceID string) (u []use
|
||||||
|
|
||||||
err = s.Runtime.Db.Select(&u, `
|
err = s.Runtime.Db.Select(&u, `
|
||||||
SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.created, u.lastversion, u.revised, u.global,
|
SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.created, u.lastversion, u.revised, u.global,
|
||||||
a.active, a.users AS viewusers, a.editor, a.admin, a.analytics
|
a.active, a.users AS viewusers, a.editor, `+"a.`admin`"+`, a.analytics
|
||||||
FROM user u, account a
|
FROM user u, account a
|
||||||
WHERE a.orgid=? AND u.refid = a.userid AND a.active=1 AND u.refid IN (
|
WHERE a.orgid=? AND u.refid = a.userid AND a.active=1 AND u.refid IN (
|
||||||
SELECT whoid from permission WHERE orgid=? AND who='user' AND scope='object' AND location='space' AND refid=? UNION ALL
|
SELECT whoid from permission WHERE orgid=? AND who='user' AND scope='object' AND location='space' AND refid=? UNION ALL
|
||||||
|
@ -194,7 +194,7 @@ func (s Scope) GetUsersForSpaces(ctx domain.RequestContext, spaces []string) (u
|
||||||
|
|
||||||
query, args, err := sqlx.In(`
|
query, args, err := sqlx.In(`
|
||||||
SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.lastversion, u.created, u.revised, u.global,
|
SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.lastversion, u.created, u.revised, u.global,
|
||||||
a.active, a.users AS viewusers, a.editor, a.admin, a.analytics
|
a.active, a.users AS viewusers, a.editor, `+"a.`admin`"+`, a.analytics
|
||||||
FROM user u, account a
|
FROM user u, account a
|
||||||
WHERE a.orgid=? AND u.refid = a.userid AND a.active=1 AND u.refid IN (
|
WHERE a.orgid=? AND u.refid = a.userid AND a.active=1 AND u.refid IN (
|
||||||
SELECT whoid from permission WHERE orgid=? AND who='user' AND scope='object' AND location='space' AND refid IN(?) UNION ALL
|
SELECT whoid from permission WHERE orgid=? AND who='user' AND scope='object' AND location='space' AND refid IN(?) UNION ALL
|
||||||
|
@ -295,7 +295,7 @@ func (s Scope) MatchUsers(ctx domain.RequestContext, text string, maxMatches int
|
||||||
|
|
||||||
err = s.Runtime.Db.Select(&u,
|
err = s.Runtime.Db.Select(&u,
|
||||||
`SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.lastversion, u.created, u.revised,
|
`SELECT u.id, u.refid, u.firstname, u.lastname, u.email, u.initials, u.password, u.salt, u.reset, u.lastversion, u.created, u.revised,
|
||||||
u.global, a.active, a.editor, a.admin, a.users as viewusers, a.analytics
|
u.global, a.active, a.editor, `+"a.`admin`"+`, a.users as viewusers, a.analytics
|
||||||
FROM user u, account a
|
FROM user u, account a
|
||||||
WHERE a.orgid=? AND u.refid=a.userid AND a.active=1 `+likeQuery+
|
WHERE a.orgid=? AND u.refid=a.userid AND a.active=1 `+likeQuery+
|
||||||
`ORDER BY u.firstname,u.lastname LIMIT `+strconv.Itoa(maxMatches),
|
`ORDER BY u.firstname,u.lastname LIMIT `+strconv.Itoa(maxMatches),
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue