public static List <SQLForeignKeyRelation> LoadForeignKeysForColumn(int tableID, int columnID, string connectionString, ref List <SQLTable> databaseTables)
        {
            List <SQLForeignKeyRelation> foreignKeys = new List <SQLForeignKeyRelation>();

            string selectStatement = "Select constraint_object_id, constraint_column_id, parent_object_id, parent_column_id, referenced_object_id, referenced_column_id from sys.foreign_key_columns where referenced_object_id = " + tableID + " and referenced_column_id = " + columnID;

            SqlDataReader dataReader = SQLDataServer.ExecuteSQLStringReturnDataReader(selectStatement, connectionString);

            while (dataReader.Read())
            {
                SQLForeignKeyRelation foreignKey = new SQLForeignKeyRelation();

                foreignKey.DatabaseTables = databaseTables;

                foreignKey.parentObjectID     = Convert.ToInt32(dataReader["parent_object_id"]);
                foreignKey.parentColumnID     = Convert.ToInt32(dataReader["parent_column_id"]);
                foreignKey.referencedObjectID = Convert.ToInt32(dataReader["referenced_object_id"]);
                foreignKey.referencedColumnID = Convert.ToInt32(dataReader["referenced_column_id"]);

                foreignKeys.Add(foreignKey);
            }

            dataReader.Close();

            return(foreignKeys);
        }
        internal override void GenerateFilePerForeignKey(SQLForeignKeyRelation foreignKeyRelation, string className)
        {
            string primaryTableName = foreignKeyRelation.ParentTableColum.TableName;

            classText.AppendLine($"package com.example.{Library.LowerFirstCharacter(_nameSpace)}.dao");
            classText.AppendLine(Environment.NewLine);

            classText.AppendLine($"import androidx.room.Dao");
            classText.AppendLine($"import androidx.room.Query");
            classText.AppendLine($"import androidx.room.Transaction");
            classText.AppendLine($"import com.example.receipt.entities.{className}");
            classText.AppendLine($"import kotlinx.coroutines.flow.Flow");
            classText.AppendLine(Environment.NewLine);

            classText.AppendLine($"@Dao");
            classText.AppendLine($"interface {className}DAO {{");
            classText.AppendLine($"\t@Transaction");
            classText.AppendLine($"\t@Query(\"SELECT * FROM {foreignKeyRelation.ReferencedTableColumn.TableName}\")");
            classText.AppendLine($"\tfun get{foreignKeyRelation.ReferencedTableColumn.TableName}sWith{foreignKeyRelation.ParentTableColum.TableName}s(): Flow<List<{primaryTableName}s>>");
            classText.AppendLine($"}}");
        }
Пример #3
0
        public static List <SQLTableColumn> LoadColumnsForTable(string tableName, string connectionString, SQLTable parentTable, ref List <SQLTable> databaseTables)
        {
            List <SQLTableColumn> columns = new List <SQLTableColumn>();

            string selectStatement;

            selectStatement = "select COLUMN_NAME, TABLE_NAME, ORDINAL_POSITION, IS_NULLABLE, CHARACTER_MAXIMUM_LENGTH, DATA_TYPE, NUMERIC_PRECISION, NUMERIC_SCALE, DATETIME_PRECISION from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + tableName + "'";

            SqlDataReader dataReader = SQLDataServer.ExecuteSQLStringReturnDataReader(selectStatement, connectionString);

            while (dataReader.Read())
            {
                SQLTableColumn column = new SQLTableColumn();

                column.Name              = Convert.ToString(dataReader["COLUMN_NAME"]);
                column.TableName         = Convert.ToString(dataReader["TABLE_NAME"]);
                column.OrdinalPosition   = Convert.ToInt32(dataReader["ORDINAL_POSITION"]);
                column.Nullable          = DBBooleanValues.ReturnBooleanFromYesOrNo(dataReader["IS_NULLABLE"]);
                column.DataType          = Convert.ToString(dataReader["DATA_TYPE"]);
                column.MaximumLength     = DBNullReturnValues.Return0(dataReader["CHARACTER_MAXIMUM_LENGTH"]);
                column.NumericPrecision  = DBNullReturnValues.Return0(dataReader["NUMERIC_PRECISION"]);
                column.NumericScale      = DBNullReturnValues.Return0(dataReader["NUMERIC_SCALE"]);
                column.DateTimePrecision = DBNullReturnValues.Return0(dataReader["DATETIME_PRECISION"]);

                column.ParentTable = parentTable;

                if (column.OrdinalPosition == 1)
                {
                    column.PrimaryKey = true;
                }

                column.ForeignKeys = SQLForeignKeyRelation.LoadForeignKeysForColumn(column.ParentTable.id, column.OrdinalPosition, connectionString, ref databaseTables);

                columns.Add(column);
            }

            dataReader.Close();

            return(columns);
        }
 internal abstract void GenerateFilePerForeignKey(SQLForeignKeyRelation foreignKeyRelation, string className);
Пример #5
0
 internal override void GenerateFilePerForeignKey(SQLForeignKeyRelation foreignKeyRelation, string className)
 {
     GenerateFile(className, Library.LowerFirstCharacter(className), false);
 }