Managing <EMPHASIS>data models</EMPHASIS>

Each time we execute a normal query, we will obtain a <LINK><EMPHASIS>GdaDataModel </EMPHASIS></LINK> object, which is the way to see what the query returned. As <LINK>GdaDataModel</LINK> is an object, we can manage it with <LINK>GdaDataModel</LINK> class.

Before continuing, we must say that it is possible to modify a data model, but as we are accessing using SQL, it is not recommended to modify it, so modifications on the database must be done using SQL.

Let's see the functions we need:

<ITEMIZEDLIST> <LISTITEM>

<LINK>gda_data_model_get_n_rows()</LINK>

</LISTITEM>
<LISTITEM>

<LINK>gda_data_model_get_n_columns()</LINK>

</LISTITEM>
<LISTITEM>

<LINK>gda_data_model_describe_column()</LINK>

</LISTITEM>
<LISTITEM>

<LINK>gda_data_model_get_column_title()</LINK>

</LISTITEM>
<LISTITEM>

<LINK>gda_data_model_get_column_position()</LINK>

</LISTITEM>
<LISTITEM>

<LINK>gda_data_model_get_row()</LINK>

</LISTITEM>
<LISTITEM>

<LINK>gda_data_model_get_value_at()</LINK>

</LISTITEM>
<LISTITEM>

<LINK>gda_row_get_value()</LINK>

</LISTITEM>
</ITEMIZEDLIST>

This functions are very easy to use, so let's see some clear examples:

Example using direct cell access

This function accesses the data model by directly accessing cells (using <LINK>gda_data_model_get_value_at () </LINK>)

<PROGRAMLISTINGCO> <AREASPEC> <AREA></AREA> <AREA></AREA> <AREA></AREA> </AREASPEC>
          void
          show_table (GdaDataModel * dm)
          {
            gint row_id;
            gint column_id;
            GdaValue *value;
          
            for (column_id = 0; column_id < gda_data_model_get_n_columns (dm);
                 column_id++)
              g_print("%s\t",gda_data_model_get_column_title (dm, column_id));
            g_print("\n");
          
            for (row_id = 0; row_id < gda_data_model_get_n_rows (dm); row_id++)
              {
                for (column_id = 0; column_id < gda_data_model_get_n_columns (dm);
                     column_id++)
                  {
                    value =
                      (GdaValue *) gda_data_model_get_value_at (dm, column_id, row_id);
                    g_print ("%s\t", gda_value_stringify (value));
                  }
                g_print("\n");
              }
          }
          
<CALLOUTLIST> <CALLOUT> <PARA> Loop for writing column names. </PARA> </CALLOUT> <CALLOUT> <PARA> Double loop accessing values using <LINK>gda_data_model_get_value_at () </LINK> </PARA> </CALLOUT> <CALLOUT> <PARA> Data returned is a <LINK>GdaValue</LINK> object. </PARA> </CALLOUT> </CALLOUTLIST> </PROGRAMLISTINGCO>

Example using row access

This function accesses the data model by accessing rows (using <LINK>gda_data_model_get_row () </LINK> and <LINK> gda_row_get_value () </LINK>)

<PROGRAMLISTINGCO> <AREASPEC> <AREA></AREA> <AREA></AREA> <AREA></AREA> </AREASPEC>
            <ANCHOR>
          void
          show_table2 (GdaDataModel * dm)
          {
            gint row_id;
            gint column_id;
            GdaValue *value;
            GdaRow *row;
          
            for (column_id = 0; column_id < gda_data_model_get_n_columns (dm);
                 column_id++)
              g_print("%s\t",gda_data_model_get_column_title (dm, column_id));
            g_print("\n");
          
            for (row_id = 0; row_id < gda_data_model_get_n_rows (dm); row_id++) {
                row = (GdaRow *) gda_data_model_get_row (dm, row_id);
                for (column_id = 0; column_id < gda_data_model_get_n_columns (dm);
                     column_id++) {
                    value = gda_row_get_value (row, column_id);
                    string=gda_value_stringify (value);
                    g_print ("%s\t", string);
                    g_free(string);
                  }
                g_print ("\n");
              }
          }
	    </ANCHOR>
          
<CALLOUTLIST> <CALLOUT> <PARA> Loop for writing column names. </PARA> </CALLOUT> <CALLOUT> <PARA> Outer loop obtaining rows using <LINK>gda_data_model_get_row () </LINK> </PARA> </CALLOUT> <CALLOUT> <PARA> Inner loop obtaining the value using <LINK>gda_row_get_value () </LINK>. Notice that <LINK>gda_row_get_value ()</LINK> returns a <EMPHASIS>const <LINK>GdaValue</LINK></EMPHASIS>, so we do not have to free it. </PARA> </CALLOUT> </CALLOUTLIST> </PROGRAMLISTINGCO>

Freeing data models

When you finish using data models you must free it, but GdaDataModel class does not have a function to do it, so you have to use <EMPHASIS>g_object_unref ()</EMPHASIS>.