@@ -98,6 +98,7 @@ type ViewMetadata struct {
9898type MaterializedViewMetadata struct {
9999 Keyspace string
100100 Name string
101+ AdditionalWritePolicy string
101102 BaseTableId UUID
102103 BaseTable * TableMetadata
103104 BloomFilterFpChance float64
@@ -115,6 +116,7 @@ type MaterializedViewMetadata struct {
115116 MaxIndexInterval int
116117 MemtableFlushPeriodInMs int
117118 MinIndexInterval int
119+ ReadRepair string
118120 ReadRepairChance float64
119121 SpeculativeRetry string
120122
@@ -975,69 +977,201 @@ func getViewsMetadata(session *Session, keyspaceName string) ([]ViewMetadata, er
975977 return views , nil
976978}
977979
980+ func bytesMapToStringsMap (byteData map [string ][]byte ) map [string ]string {
981+ extensions := make (map [string ]string , len (byteData ))
982+ for key , rowByte := range byteData {
983+ extensions [key ] = string (rowByte )
984+ }
985+
986+ return extensions
987+ }
988+
989+ func materializedViewMetadataFromMap (currentObject map [string ]interface {}, materializedView * MaterializedViewMetadata ) error {
990+ const errorMessage = "gocql.materializedViewMetadataFromMap failed to read column %s"
991+ var ok bool
992+ for key , value := range currentObject {
993+ switch key {
994+ case "keyspace_name" :
995+ materializedView .Keyspace , ok = value .(string )
996+ if ! ok {
997+ return fmt .Errorf (errorMessage , key )
998+ }
999+
1000+ case "view_name" :
1001+ materializedView .Name , ok = value .(string )
1002+ if ! ok {
1003+ return fmt .Errorf (errorMessage , key )
1004+ }
1005+
1006+ case "additional_write_policy" :
1007+ materializedView .AdditionalWritePolicy , ok = value .(string )
1008+ if ! ok {
1009+ return fmt .Errorf (errorMessage , key )
1010+ }
1011+
1012+ case "base_table_id" :
1013+ materializedView .BaseTableId , ok = value .(UUID )
1014+ if ! ok {
1015+ return fmt .Errorf (errorMessage , key )
1016+ }
1017+
1018+ case "base_table_name" :
1019+ materializedView .baseTableName , ok = value .(string )
1020+ if ! ok {
1021+ return fmt .Errorf (errorMessage , key )
1022+ }
1023+
1024+ case "bloom_filter_fp_chance" :
1025+ materializedView .BloomFilterFpChance , ok = value .(float64 )
1026+ if ! ok {
1027+ return fmt .Errorf (errorMessage , key )
1028+ }
1029+
1030+ case "caching" :
1031+ materializedView .Caching , ok = value .(map [string ]string )
1032+ if ! ok {
1033+ return fmt .Errorf (errorMessage , key )
1034+ }
1035+
1036+ case "comment" :
1037+ materializedView .Comment , ok = value .(string )
1038+ if ! ok {
1039+ return fmt .Errorf (errorMessage , key )
1040+ }
1041+
1042+ case "compaction" :
1043+ materializedView .Compaction , ok = value .(map [string ]string )
1044+ if ! ok {
1045+ return fmt .Errorf (errorMessage , key )
1046+ }
1047+
1048+ case "compression" :
1049+ materializedView .Compression , ok = value .(map [string ]string )
1050+ if ! ok {
1051+ return fmt .Errorf (errorMessage , key )
1052+ }
1053+
1054+ case "crc_check_chance" :
1055+ materializedView .CrcCheckChance , ok = value .(float64 )
1056+ if ! ok {
1057+ return fmt .Errorf (errorMessage , key )
1058+ }
1059+
1060+ case "dclocal_read_repair_chance" :
1061+ materializedView .DcLocalReadRepairChance , ok = value .(float64 )
1062+ if ! ok {
1063+ return fmt .Errorf (errorMessage , key )
1064+ }
1065+
1066+ case "default_time_to_live" :
1067+ materializedView .DefaultTimeToLive , ok = value .(int )
1068+ if ! ok {
1069+ return fmt .Errorf (errorMessage , key )
1070+ }
1071+
1072+ case "extensions" :
1073+ byteData , ok := value .(map [string ][]byte )
1074+ if ! ok {
1075+ return fmt .Errorf (errorMessage , key )
1076+ }
1077+
1078+ materializedView .Extensions = bytesMapToStringsMap (byteData )
1079+
1080+ case "gc_grace_seconds" :
1081+ materializedView .GcGraceSeconds , ok = value .(int )
1082+ if ! ok {
1083+ return fmt .Errorf (errorMessage , key )
1084+ }
1085+
1086+ case "id" :
1087+ materializedView .Id , ok = value .(UUID )
1088+ if ! ok {
1089+ return fmt .Errorf (errorMessage , key )
1090+ }
1091+
1092+ case "include_all_columns" :
1093+ materializedView .IncludeAllColumns , ok = value .(bool )
1094+ if ! ok {
1095+ return fmt .Errorf (errorMessage , key )
1096+ }
1097+
1098+ case "max_index_interval" :
1099+ materializedView .MaxIndexInterval , ok = value .(int )
1100+ if ! ok {
1101+ return fmt .Errorf (errorMessage , key )
1102+ }
1103+
1104+ case "memtable_flush_period_in_ms" :
1105+ materializedView .MemtableFlushPeriodInMs , ok = value .(int )
1106+ if ! ok {
1107+ return fmt .Errorf (errorMessage , key )
1108+ }
1109+
1110+ case "min_index_interval" :
1111+ materializedView .MinIndexInterval , ok = value .(int )
1112+ if ! ok {
1113+ return fmt .Errorf (errorMessage , key )
1114+ }
1115+
1116+ case "read_repair" :
1117+ materializedView .ReadRepair , ok = value .(string )
1118+ if ! ok {
1119+ return fmt .Errorf (errorMessage , key )
1120+ }
1121+
1122+ case "read_repair_chance" :
1123+ materializedView .ReadRepairChance , ok = value .(float64 )
1124+ if ! ok {
1125+ return fmt .Errorf (errorMessage , key )
1126+ }
1127+
1128+ case "speculative_retry" :
1129+ materializedView .SpeculativeRetry , ok = value .(string )
1130+ if ! ok {
1131+ return fmt .Errorf (errorMessage , key )
1132+ }
1133+
1134+ }
1135+ }
1136+ return nil
1137+ }
1138+
1139+ func parseSystemSchemaViews (iter * Iter ) ([]MaterializedViewMetadata , error ) {
1140+ var materializedViews []MaterializedViewMetadata
1141+ s , err := iter .SliceMap ()
1142+ if err != nil {
1143+ return nil , err
1144+ }
1145+
1146+ for _ , row := range s {
1147+ var materializedView MaterializedViewMetadata
1148+ err = materializedViewMetadataFromMap (row , & materializedView )
1149+ if err != nil {
1150+ return nil , err
1151+ }
1152+
1153+ materializedViews = append (materializedViews , materializedView )
1154+ }
1155+
1156+ return materializedViews , nil
1157+ }
1158+
9781159func getMaterializedViewsMetadata (session * Session , keyspaceName string ) ([]MaterializedViewMetadata , error ) {
9791160 if ! session .useSystemSchema {
9801161 return nil , nil
9811162 }
9821163 var tableName = "system_schema.views"
9831164 stmt := fmt .Sprintf (`
984- SELECT
985- view_name,
986- base_table_id,
987- base_table_name,
988- bloom_filter_fp_chance,
989- caching,
990- comment,
991- compaction,
992- compression,
993- crc_check_chance,
994- dclocal_read_repair_chance,
995- default_time_to_live,
996- extensions,
997- gc_grace_seconds,
998- id,
999- include_all_columns,
1000- max_index_interval,
1001- memtable_flush_period_in_ms,
1002- min_index_interval,
1003- read_repair_chance,
1004- speculative_retry
1165+ SELECT *
10051166 FROM %s
10061167 WHERE keyspace_name = ?` , tableName )
10071168
10081169 var materializedViews []MaterializedViewMetadata
10091170
1010- rows := session .control .query (stmt , keyspaceName ).Scanner ()
1011- for rows .Next () {
1012- materializedView := MaterializedViewMetadata {Keyspace : keyspaceName }
1013- err := rows .Scan (& materializedView .Name ,
1014- & materializedView .BaseTableId ,
1015- & materializedView .baseTableName ,
1016- & materializedView .BloomFilterFpChance ,
1017- & materializedView .Caching ,
1018- & materializedView .Comment ,
1019- & materializedView .Compaction ,
1020- & materializedView .Compression ,
1021- & materializedView .CrcCheckChance ,
1022- & materializedView .DcLocalReadRepairChance ,
1023- & materializedView .DefaultTimeToLive ,
1024- & materializedView .Extensions ,
1025- & materializedView .GcGraceSeconds ,
1026- & materializedView .Id ,
1027- & materializedView .IncludeAllColumns ,
1028- & materializedView .MaxIndexInterval ,
1029- & materializedView .MemtableFlushPeriodInMs ,
1030- & materializedView .MinIndexInterval ,
1031- & materializedView .ReadRepairChance ,
1032- & materializedView .SpeculativeRetry ,
1033- )
1034- if err != nil {
1035- return nil , err
1036- }
1037- materializedViews = append (materializedViews , materializedView )
1038- }
1171+ iter := session .control .query (stmt , keyspaceName )
10391172
1040- if err := rows .Err (); err != nil {
1173+ materializedViews , err := parseSystemSchemaViews (iter )
1174+ if err != nil {
10411175 return nil , err
10421176 }
10431177
0 commit comments