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

Reply via email to