func parseColumnsAndValuesFromInsert()

in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/translator/translator_insert.go [47:104]


func parseColumnsAndValuesFromInsert(input cql.IInsertColumnSpecContext, tableName string, schemaMapping *schemaMapping.SchemaMappingConfig, keyspace string) (*ColumnsResponse, error) {

	if input == nil {
		return nil, errors.New("parseColumnsAndValuesFromInsert: No Input paramaters found for columns")
	}

	columnListObj := input.ColumnList()
	if columnListObj == nil {
		return nil, errors.New("parseColumnsAndValuesFromInsert: error while parsing columns")
	}
	columns := columnListObj.AllColumn()
	if columns == nil {
		return nil, errors.New("parseColumnsAndValuesFromInsert: error while parsing columns")
	}

	if len(columns) <= 0 {
		return nil, errors.New("parseColumnsAndValuesFromInsert: No Columns found in the Insert Query")
	}
	var columnArr []Column
	var paramKeys []string
	var primaryColumns []string

	for _, val := range columns {
		columnName := val.GetText()
		if columnName == "" {
			return nil, errors.New("parseColumnsAndValuesFromInsert: No Columns found in the Insert Query")
		}
		columnName = strings.ReplaceAll(columnName, literalPlaceholder, "")
		columnType, err := schemaMapping.GetColumnType(keyspace, tableName, columnName)
		if err != nil {
			return nil, fmt.Errorf("undefined column name %s in table %s.%s", columnName, keyspace, tableName)

		}
		isPrimaryKey := false
		if columnType.IsPrimaryKey {
			isPrimaryKey = true
		}
		column := Column{
			Name:         columnName,
			ColumnFamily: schemaMapping.SystemColumnFamily,
			CQLType:      columnType.CQLType,
			IsPrimaryKey: isPrimaryKey,
		}
		if columnType.IsPrimaryKey {
			primaryColumns = append(primaryColumns, columnName)
		}
		columnArr = append(columnArr, column)
		paramKeys = append(paramKeys, columnName)

	}

	response := &ColumnsResponse{
		Columns:       columnArr,
		ParamKeys:     paramKeys,
		PrimayColumns: primaryColumns,
	}
	return response, nil
}