diff --git a/src/main/java/org/sqlite/jdbc3/JDBC3DatabaseMetaData.java b/src/main/java/org/sqlite/jdbc3/JDBC3DatabaseMetaData.java index 6277ba8aa..1a2229c79 100644 --- a/src/main/java/org/sqlite/jdbc3/JDBC3DatabaseMetaData.java +++ b/src/main/java/org/sqlite/jdbc3/JDBC3DatabaseMetaData.java @@ -1078,7 +1078,10 @@ public ResultSet getColumns(String c, String s, String tblNamePattern, String co colType = colType.substring(0, iStartOfDimension).trim(); } - int colGenerated = "2".equals(colHidden) ? 1 : 0; + int colGenerated = 0; + if ("2".equals(colHidden) || "3".equals(colHidden)) { + colGenerated = 1; + } sql.append("select ") .append(i + 1) diff --git a/src/test/java/org/sqlite/DBMetaDataTest.java b/src/test/java/org/sqlite/DBMetaDataTest.java index 03c7a2b95..31af58137 100644 --- a/src/test/java/org/sqlite/DBMetaDataTest.java +++ b/src/test/java/org/sqlite/DBMetaDataTest.java @@ -18,6 +18,7 @@ import java.util.Properties; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.DisabledInNativeImage; @@ -490,6 +491,29 @@ public void getColumnsIncludingGenerated() throws SQLException { assertThat(rs.next()).isFalse(); } + @Test + @DisplayName( + "Issue #1132 - Generated columns with stored in SQLite are not marked as generated") + public void getColumnsIncludingGeneratedStored() throws SQLException { + stat.executeUpdate( + "create table foo(" + + "\n" + + " id integer primary key," + + "\n" + + " bar int not null generated always as (id + 1) stored" + + "\n" + + ");"); + + ResultSet rs = meta.getColumns(null, null, "foo", "%"); + assertThat(rs.next()).isTrue(); + assertThat(rs.getString(4)).as("first column is named 'id'").isEqualTo("id"); + assertThat(rs.getString(24)).as("first column is generated").isEqualTo("NO"); + assertThat(rs.next()).isTrue(); + assertThat(rs.getString(4)).as("second column is named 'bar'").isEqualTo("bar"); + assertThat(rs.getString(24)).as("second column is generated").isEqualTo("YES"); + assertThat(rs.next()).isFalse(); + } + @Test public void getColumnsWithEscape() throws SQLException { stat.executeUpdate("create table wildcard(col1 integer, co_1 integer, 'co%1' integer)");