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($"}}"); }
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);
internal override void GenerateFilePerForeignKey(SQLForeignKeyRelation foreignKeyRelation, string className) { GenerateFile(className, Library.LowerFirstCharacter(className), false); }