| 766 | } |
| 767 | |
| 768 | int load_metadata_columns(table_p _tp) |
| 769 | { |
| 770 | int ret,n,len; |
| 771 | char dbuf[MAX_ROW_SIZE]; |
| 772 | char *tmp; |
| 773 | char *s = NULL; |
| 774 | char cn[64], ct[16]; |
| 775 | DB *db = NULL; |
| 776 | DBT key, data; |
| 777 | column_p col; |
| 778 | ret = n = len = 0; |
| 779 | |
| 780 | if(!_tp || !_tp->db) |
| 781 | return -1; |
| 782 | |
| 783 | if(_tp->ncols!=0) |
| 784 | return 0; |
| 785 | |
| 786 | db = _tp->db; |
| 787 | memset(&key, 0, sizeof(DBT)); |
| 788 | memset(&data, 0, sizeof(DBT)); |
| 789 | memset(dbuf, 0, MAX_ROW_SIZE); |
| 790 | |
| 791 | key.data = METADATA_COLUMNS; |
| 792 | key.size = strlen(METADATA_COLUMNS); |
| 793 | |
| 794 | /*memory for the result*/ |
| 795 | data.data = dbuf; |
| 796 | data.ulen = MAX_ROW_SIZE; |
| 797 | data.flags = DB_DBT_USERMEM; |
| 798 | |
| 799 | if ((ret = db->get(db, NULL, &key, &data, 0)) != 0) |
| 800 | { |
| 801 | db->err(db, ret, "load_metadata_columns DB->get failed"); |
| 802 | LM_ERR("FAILED to find METADATA_COLUMNS in DB \n"); |
| 803 | return -1; |
| 804 | } |
| 805 | |
| 806 | |
| 807 | /* eg: dbuf = "table_name(str) table_version(int)" */ |
| 808 | |
| 809 | LM_DBG("Found: [%s]\n",dbuf); |
| 810 | |
| 811 | tmp = dbuf; |
| 812 | s = strsep(&tmp, " "); |
| 813 | while(s!=NULL && n<MAX_NUM_COLS) |
| 814 | { |
| 815 | /* eg: meta[0]=table_name meta[1]=str */ |
| 816 | sscanf(s,"%20[^(](%10[^)])[^\n]", cn, ct); |
| 817 | |
| 818 | /* create column*/ |
| 819 | col = (column_p) pkg_malloc(sizeof(column_t)); |
| 820 | if(!col) |
| 821 | { LM_ERR("out of private memory \n"); |
| 822 | return -1; |
| 823 | } |
| 824 | |
| 825 | /* set name*/ |
no outgoing calls
no test coverage detected