Skip to content

v4.4.2 pragma support only key and cipher_page_size ? #22

Description

@zhaobingss

I hpoe support multy pragam just like add code bellow:

pragmaMap := map[string]string{}
pragmaKey := ""
pragmaCipherPageSize := -1

pos := strings.IndexRune(dsn, '?')
if pos >= 1 {
        params, err := url.ParseQuery(dsn[pos+1:])
        if err != nil {
	        return nil, err
        }
        
        // support multi pragma
        for key, strArr := range params {
	        if strings.Contains(key, "_pragma_") {
		        pragmaMap[key[8:]] = strArr[0]
	        }
        }
        .....
}

// _pragma_key
if pragmaKey != "" {
        query := fmt.Sprintf("PRAGMA key = \"%s\";", pragmaKey)
        if err := exec(query); err != nil {
	        C.sqlite3_close_v2(db)
	        return nil, err
        }
}

// _pragma_cipher_page_size
if pragmaCipherPageSize != -1 {
        query := fmt.Sprintf("PRAGMA cipher_page_size = %d;",
	        pragmaCipherPageSize)
        if err := exec(query); err != nil {
	        C.sqlite3_close_v2(db)
	        return nil, err
        }
}

// support multi pragma
for key, val := range pragmaMap {
		if val != "" && key != "key" && key != "cipher_page_size" {
			query := fmt.Sprintf("PRAGMA %s = %s;", key, val)
			if err := exec(query); err != nil {
				C.sqlite3_close_v2(db)
				return nil, err
			}
		}
	}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions