func()

in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/translator/translator_alter.go [28:82]


func (t *Translator) TranslateAlterTableToBigtable(query string) (*AlterTableStatementMap, error) {
	lexer := cql.NewCqlLexer(antlr.NewInputStream(query))
	stream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel)
	p := cql.NewCqlParser(stream)

	alterTable := p.AlterTable()

	if alterTable == nil {
		return nil, errors.New("error while parsing alter statement")
	}

	table := alterTable.Table().GetText()
	if alterTable.Keyspace() == nil {
		return nil, errors.New("missing keyspace. keyspace is required")
	}
	keyspace := alterTable.Keyspace().GetText()

	var dropColumns []string
	if alterTable.AlterTableOperation().AlterTableDropColumns() != nil {
		for _, dropColumn := range alterTable.AlterTableOperation().AlterTableDropColumns().AlterTableDropColumnList().AllColumn() {
			dropColumns = append(dropColumns, dropColumn.GetText())
		}
	}
	var addColumns []message.ColumnMetadata
	if alterTable.AlterTableOperation().AlterTableAdd() != nil {
		for i, addColumn := range alterTable.AlterTableOperation().AlterTableAdd().AlterTableColumnDefinition().AllColumn() {
			dt, err := utilities.GetCassandraColumnType(alterTable.AlterTableOperation().AlterTableAdd().AlterTableColumnDefinition().DataType(i).GetText())
			if err != nil {
				return nil, err
			}

			addColumns = append(addColumns, message.ColumnMetadata{
				Table:    table,
				Keyspace: keyspace,
				Type:     dt,
				Name:     addColumn.GetText(),
				Index:    int32(i),
			})
		}
	}

	if alterTable.AlterTableOperation().AlterTableRename() != nil && len(alterTable.AlterTableOperation().AlterTableRename().AllColumn()) != 0 {
		return nil, errors.New("rename operation in alter table command not supported")
	}

	var stmt = AlterTableStatementMap{
		Table:       table,
		Keyspace:    keyspace,
		QueryType:   "alter",
		DropColumns: dropColumns,
		AddColumns:  addColumns,
	}

	return &stmt, nil
}