среда, 9 июня 2010 г.

Усовершенствуйте код

Вот написал черновой cf-код для получения данных о таблицах и столбцах в любой DSN, но что-то он не слишком быстро работает.



public struct function dsnMeta(required string obj)
hint="Получаем метаданные о DSN" output="false"
{
//пустая структура, она нам пригодиться
dm={};

//получаем данные о запрашиваемой DSN
db=new dbinfo(datasource="#arguments.obj#");

//получаем список таблиц в БД
tbls=db.tables();

//вероятно именно этот большой цикл тупит и тормозит.
//тут мы сначала заполняем структуру dm ключами — именами таблиц
for (i=1;i lte tbls.RecordCount;i=i+1)
{
//нам нужны только настоящие таблицы, а не системные
if(tbls["table_type"][i] == "table")
{
//создаём пустой массив, который у нас будет вставляться как
//значение для ключа в структуре
a=arraynew(1);
structInsert(dm,tbls["table_name"][i], a, true);
cs=structCopy(dm);

//а теперь для каждой таблицы получаем, опять же циклом,
//список столбцов, которые сохраняем в массиве
for (key in cs)
{

//получаем все столбцы для указанной таблицы
clmns=new dbinfo(datasource="#arguments.obj#", table="#key#").columns();
for (c=1;c lte clmns.RecordCount;c=c+1)
{
//собираем массив из имен столбцов
arrayAppend(a, clmns["column_name"][c]);
}
}
}
}
return dm;
}


Есть мысли как этот код усовершенствовать или написать более элегантное решение?


Комментариев нет:

Отправить комментарий