dendrite/appservice/storage/cosmosdb/txn_id_counter_table.go
alexfca af4219f38e
Implement Cosmos DB for the AppService (#7)
* - Implement Cosmos for the devices_table
- Use the ConnectionString in the YAML to include the Tenant
- Revert all other non implemented tables back to use SQLLite3

* - Change the Config to use "test.criticicalarc.com" Container
- Add generic function GetDocumentOrNil to standardize GetDocument
- Add func to return CrossPartition queries for Aggregates
- Add func GetNextSequence() as generic seq generator for AutoIncrement
- Add cosmosdbutil.ErrNoRows to return (emulate) sql.ErrNoRows
- Add a "fake" ExclusiveWriterFake
- Add standard "getXX", "setXX" and "queryXX" to all TABLE class files
- Add specific Table SEQ for the Events table
- Add specific Table SEQ for the Rooms table
- Add specific Table SEQ for the StateSnapshot table

* - Use CosmosDB for the KeyServer
- Replace the ConnString in the YAML to Cosmos
- Update the 4 tables to use Cosmos

* - Add SEQ for Event and Counters
- Replace SQLLite with Cosmos in Config and Code

* - Fix typo
2021-05-21 10:12:39 +10:00

60 lines
1.7 KiB
Go

// Copyright 2018 New Vector Ltd
// Copyright 2019-2020 The Matrix.org Foundation C.I.C.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cosmosdb
import (
"context"
"database/sql"
"github.com/matrix-org/dendrite/internal/sqlutil"
)
// const txnIDSchema = `
// -- Keeps a count of the current transaction ID
// CREATE TABLE IF NOT EXISTS appservice_counters (
// name TEXT PRIMARY KEY NOT NULL,
// last_id INTEGER DEFAULT 1
// );
// INSERT OR IGNORE INTO appservice_counters (name, last_id) VALUES('txn_id', 1);
// `
// const selectTxnIDSQL = `
// SELECT last_id FROM appservice_counters WHERE name='txn_id';
// UPDATE appservice_counters SET last_id=last_id+1 WHERE name='txn_id';
// `
type txnStatements struct {
db *Database
writer sqlutil.Writer
selectTxnIDStmt *sql.Stmt
tableName string
}
func (s *txnStatements) prepare(db *Database, writer sqlutil.Writer) (err error) {
s.db = db
s.writer = writer
//Only used for the seq generation
s.tableName = "counters"
return
}
// selectTxnID selects the latest ascending transaction ID
func (s *txnStatements) selectTxnID(
ctx context.Context,
) (txnID int, err error) {
return GetNextCounterTXNID(s, ctx)
}