code: public List<Column> getColumns() throws SQLException {
  		synchronized(getColumnsLock) {
  			if(getColumnsCache==null) {
  				SortedMap<String,Column> columnMap = getColumnMap();
  				List<Column> newColumns = new ArrayList<>(columnMap.size());
  				for(int i=0; i<columnMap.size(); i++) newColumns.add(null);
  				for(Column column : columnMap.values()) {
  					int ordinalPosition = column.getOrdinalPosition();
  					if(newColumns.set(ordinalPosition-1, column)!=null) throw new SQLException("Duplicate ordinal position: "+ordinalPosition);
  				}
  				for(int i=0; i<newColumns.size(); i++) {
  					if(newColumns.get(i)==null) throw new SQLException("Missing ordinal position: "+(i+1));
  				}
  				getColumnsCache = AoCollections.optimalUnmodifiableList(newColumns);
  			}
  			return getColumnsCache;
  		}
  	}
docs: Gets all columns for this schema in their ordinal position order.
  Column with ordinal position one is at index zero.
  
  @see  #getColumnMap()