Github user ravipesala commented on a diff in the pull request: https://github.com/apache/carbondata/pull/1472#discussion_r149587728 --- Diff: integration/spark2/src/main/scala/org/apache/spark/util/AlterTableUtil.scala --- @@ -317,4 +321,84 @@ object AlterTableUtil { } } + /** + * This method add/modify the table comments. + * + * @param tableIdentifier + * @param properties + * @param propKeys + * @param set + * @param sparkSession + * @param sessionState + */ + def modifyTableComment(tableIdentifier: TableIdentifier, properties: Map[String, String], + propKeys: Seq[String], set: Boolean) + (sparkSession: SparkSession, sessionState: CarbonSessionState): Unit = { + val tableName = tableIdentifier.table + val dbName = tableIdentifier.database.getOrElse(sparkSession.catalog.currentDatabase) + LOGGER.audit(s"Alter table comment request has been received for $dbName.$tableName") + val locksToBeAcquired = List(LockUsage.METADATA_LOCK, LockUsage.COMPACTION_LOCK) + var locks = List.empty[ICarbonLock] + var timeStamp = 0L + var newCols = Seq[org.apache.carbondata.core.metadata.schema.table.column.ColumnSchema]() + var carbonTable: CarbonTable = null + try { + locks = AlterTableUtil + .validateTableAndAcquireLock(dbName, tableName, locksToBeAcquired)(sparkSession) + val metastore = CarbonEnv.getInstance(sparkSession).carbonMetastore + carbonTable = metastore + .lookupRelation(Some(dbName), tableName)(sparkSession).asInstanceOf[CarbonRelation] + .tableMeta.carbonTable + // get the latest carbon table + // read the latest schema file + val carbonTablePath = CarbonStorePath.getCarbonTablePath(carbonTable.getStorePath, + carbonTable.getCarbonTableIdentifier) + val thriftTableInfo: TableInfo = metastore.getThriftTableInfo(carbonTablePath)(sparkSession) + val schemaConverter = new ThriftWrapperSchemaConverterImpl() + val wrapperTableInfo = schemaConverter + .fromExternalToWrapperTableInfo(thriftTableInfo, + dbName, + tableName, + carbonTable.getStorePath) + val schemaEvolutionEntry = new org.apache.carbondata.core.metadata.schema.SchemaEvolutionEntry + schemaEvolutionEntry.setTimeStamp(timeStamp) + val thriftTable = schemaConverter + .fromWrapperToExternalTableInfo(wrapperTableInfo, dbName, tableName) + val tblPropertiesMap: mutable.Map[String, String] = + thriftTable.fact_table.getTableProperties.asScala + if (set) { + // This overrides old properties and update the comment parameter of thriftTable + // with the newly added/modified comment since thriftTable also holds comment as its + // direct property. + + properties.foreach { + x => + if (x._1.equalsIgnoreCase(CarbonCommonConstants.TABLE_COMMENT)) { + tblPropertiesMap.put(x._1, x._2) + } + } + } else { + // This removes the comment parameter from thriftTable + // since thriftTable also holds comment as its property. + propKeys.foreach { + x => --- End diff -- move this to above line like properties.foreach { x =>
---