diff --git a/pkg/wasm/instantiator.go b/pkg/wasm/instantiator.go new file mode 100644 index 00000000..f136fa94 --- /dev/null +++ b/pkg/wasm/instantiator.go @@ -0,0 +1,45 @@ +// VulcanizeDB +// Copyright © 2019 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package wasm + +import "github.com/vulcanize/vulcanizedb/pkg/postgres" + +type Instantiator struct { + db *postgres.DB + instances [][2]string // list of WASM file paths and namespaces +} + +func NewWASMInstantiator(db *postgres.DB, instances [][2]string) *Instantiator { + return &Instantiator{ + db: db, + instances: instances, + } +} + +func (i *Instantiator) Instantiate() error { + tx, err := i.db.Beginx() + if err != nil { + return err + } + for _, pn := range i.instances { + _, err := i.db.Exec(`SELECT wasm_new_instance('$1', '$2')`, pn[0], pn[1]) + if err != nil { + return err + } + } + return tx.Commit() +}