Hey,
Now I was checking if the properties were correctly added to the type and I
got something strange:
dataFactory->addPropertyToType(myType, *(new
std::string(getColumnName(statement, 1)), intType);
dataFactory->addPropertyToType(myType, *(new
std::string(getColumnName(statement, 2)), intType);
// on my test the column names returned by the getColumnName function are
respectively "ID" and "DESCR"
...
//then I checked if the properties were correctly added with this loop:
int m;
commonj::sdo::PropertyList list = myType.getProperties();
for (m = 0 ; m < list.size() ; m++) {
std::cout << list[m].getName() << "\n";
}
The output should be:
ID
DESCR
But it's outputting:
====ID
====DESCR
I don't know from where this four "=" are coming from, cause I already have
checked with a debugger and the strings "ID" and "DESCR" are being added and
there is no '=' ('\205' as shown on the debugger) character in it.
Is this a bug?
Adriano Crestani
//as I've already said I'm adding the properties this way:
On 3/14/07, Adriano Crestani <[EMAIL PROTECTED]> wrote:
I created a new type on a DataFactory, for example
...
dataFactory->addType("MyNameSpace", "MyRoot");
const Type& myType = dataFactory->getType("MyNameSpace", "MyRoot");
const Type& intType = dataFactory->getType("commonj.sdo", "Integer");
//then I try to add some integer properties to this type
dataFactory->addPropertyToType(myType, getColumnName(statement, 1),
intType);
std::cout << "Properties count = " << myType.getProperties().size() <<
"\n";
dataFactory->addPropertyToType(myType, getColumnName(statement, 2),
intType);
std::cout << "Properties count = " << myType.getProperties().size() <<
"\n";
...
}
//where getColumnName function is defined as:
std::string getColumnName(HSTMT statement, int column) {
SQLPOINTER sqlPtr = 0;
char strAux[1];
SQLSMALLINT length = 0;
SQLColAttributeA(statement, column, SQL_DESC_BASE_COLUMN_NAME,
&strAux, 1, (SQLSMALLINT*) &length, NULL); //get the string length
length++;
sqlPtr = (char*) malloc(length*sizeof(char)); //alloc the enough
memory to place the string characters
SQLColAttributeA(statement, column, SQL_DESC_BASE_COLUMN_NAME, sqlPtr,
length, (SQLSMALLINT*) &length, NULL); //get the string from the db
std::string ret = (char*) sqlPtr; //create a new string object from a
char pointer
return ret;
}
Unfortunately the output is:
Properties count = 1
Properties count = 1
instead of
Properties count = 1
Properties count = 2
I've checked if the function getColumnName isn't returning strings with
the same value, but it is not, they are different strings!!
Though I tried an strange approach and it's solving the problem for while,
that is to instantiate a new string on memory:
dataFactory->addPropertyToType(myType, *(new
std::string(getColumnName(statement, 1)), intType);
dataFactory->addPropertyToType(myType, *(new
std::string(getColumnName(statement, 2)), intType);
Can anybody tell why it's happening?
Adriano Crestani