private void buildPrimaryKeys(PropertyMeta pm, CQLTableBuilder builder) {
   if (pm.isEmbeddedId()) {
     List<String> componentNames = pm.getComponentNames();
     List<Class<?>> componentClasses = pm.getComponentClasses();
     for (int i = 0; i < componentNames.size(); i++) {
       String componentName = componentNames.get(i);
       builder.addColumn(componentName, componentClasses.get(i));
       builder.addPrimaryKey(componentName);
     }
   } else {
     String columnName = pm.getPropertyName();
     builder.addColumn(columnName, pm.getValueClass());
     builder.addPrimaryKey(columnName);
   }
 }
  private void createTableForClusteredCounter(EntityMeta meta) {
    PropertyMeta pm = meta.getFirstMeta();

    log.debug(
        "Creating table for counter property {} for entity {}",
        pm.getPropertyName(),
        meta.getClassName());

    CQLTableBuilder builder = CQLTableBuilder.createCounterTable(meta.getTableName());
    PropertyMeta idMeta = meta.getIdMeta();
    buildPrimaryKeys(idMeta, builder);
    builder.addColumn(pm.getPropertyName(), pm.getValueClass());

    builder.addComment(
        "Create table for counter property '"
            + pm.getPropertyName()
            + "' of entity '"
            + meta.getClassName()
            + "'");

    session.execute(builder.generateDDLScript());
  }
  @Override
  protected void validateOrCreateTableForCounter(boolean forceColumnFamilyCreation) {
    if (tableMetas.containsKey(CQL_COUNTER_TABLE)) {
      validator.validateAchillesCounter();
    } else {
      if (forceColumnFamilyCreation) {
        CQLTableBuilder builder = CQLTableBuilder.createTable(CQL_COUNTER_TABLE);
        builder.addColumn(CQL_COUNTER_FQCN, String.class);
        builder.addColumn(CQL_COUNTER_PRIMARY_KEY, String.class);
        builder.addColumn(CQL_COUNTER_PROPERTY_NAME, String.class);
        builder.addColumn(CQL_COUNTER_VALUE, Counter.class);
        builder.addPrimaryKeys(
            Arrays.asList(CQL_COUNTER_FQCN, CQL_COUNTER_PRIMARY_KEY, CQL_COUNTER_PROPERTY_NAME));

        builder.addComment("Create default Achilles counter table '" + CQL_COUNTER_TABLE + "'");

        session.execute(builder.generateDDLScript());
      } else {
        throw new AchillesInvalidTableException(
            "The required generic table '" + CQL_COUNTER_TABLE + "' does not exist");
      }
    }
  }
 private void createTable(EntityMeta entityMeta, String tableName) {
   CQLTableBuilder builder = CQLTableBuilder.createTable(tableName);
   for (PropertyMeta pm : entityMeta.getAllMetasExceptIdMeta()) {
     String propertyName = pm.getPropertyName();
     Class<?> keyClass = pm.getKeyClass();
     Class<?> valueClass = pm.getValueClass();
     switch (pm.type()) {
       case SIMPLE:
       case LAZY_SIMPLE:
         builder.addColumn(propertyName, valueClass);
         break;
       case LIST:
       case LAZY_LIST:
         builder.addList(propertyName, valueClass);
         break;
       case SET:
       case LAZY_SET:
         builder.addSet(propertyName, valueClass);
         break;
       case MAP:
       case LAZY_MAP:
         builder.addMap(propertyName, keyClass, pm.getValueClass());
         break;
       case JOIN_SIMPLE:
         builder.addColumn(propertyName, pm.joinIdMeta().getValueClass());
         break;
       case JOIN_LIST:
         builder.addList(propertyName, pm.joinIdMeta().getValueClass());
         break;
       case JOIN_SET:
         builder.addSet(propertyName, pm.joinIdMeta().getValueClass());
         break;
       case JOIN_MAP:
         builder.addMap(propertyName, keyClass, pm.joinIdMeta().getValueClass());
         break;
       default:
         break;
     }
   }
   buildPrimaryKeys(entityMeta.getIdMeta(), builder);
   builder.addComment("Create table for entity '" + entityMeta.getClassName() + "'");
   session.execute(builder.generateDDLScript());
 }